Entiendo que
aguml solo ha pretendido experimentar. Al principio no entendí bien lo que pretendía y escribí un código muy simple que evidentemente no era lo que él buscaba. Siguiendo con la causa original del hilo me permito aportar un código usando C, sin ayuda de cadenas estilo delphi, como él usa, mucho más eficiente.
He usado un serial como éste:
FAB1AF04. La función de
aguml ha dado con el resultado en 262,875 segundos, mientras que la función que propongo ha tardado 8,656 segundos en un i7. La diferencia es más que notable: 30 veces más rápido, y dedicándole un poco más de tiempo, seguro que se le puede hacer rendir algo más:
Código PHP:
bool FuerzaBruta(char* Serial, char* Salida, char* Rango)
{
int L = strlen(Serial);
int R = strlen(Rango);
int n, i;
bool Error = true;
for(n=0; n<L; n++) Salida[n] = *Rango;
Salida[n] = 0;
int f;
for(int r=0; ; r++){
*Salida = Rango[r%R];
//acarreo
for(int c=0; Salida[c]==*Rango && r>1; c++){
for(i=0; Rango[i] && Rango[i]!=Salida[c+1]; i++);
Salida[c+1] = Rango[(i+1)%R];
}
if(!(Error = strcmp(Salida, Serial))) break;
}
return !Error;
}
Saludos.