Por un tema del trabajo me ha tocado comprobar ciertos DNI que tenía mal puestos. Pensando pensando he llegado a la conclusión de que lo que es más probable que esté bien es la letra, por lo que se podría comprobar (sabiendo que la letra se haya aplicando el módulo 23 al número) qué cifra has tecleado mal. En caso de error lo más probable es que se ponga la cifra anterior o la posterior a la auténtica. Así que pensando pensando he llegado a este script que es una versión digamos beta. Y que seguro que entre todos podemos mejorar. Es un script que detecta la cifra que está mal puesta y pone las posibles soluciones según el nivel de precisión que se ponga en su búsqueda (por defecto está puesto en 1 (uno más o uno menos) pero se puede cambiar hasta 5).
A ver que os parece:
Código PHP:
<script>
//Script de KarlanKas
control="TRWAGMYFPDXBNJZSQVHLCKET";
numerro="";
function comprobar(numero,letra,precision,seguimiento){
document.write(numero+"-"+letra+"-->Original<br />");
encontrado=false;
for(digitos=0;digitos<numero.length;digitos++){
for(variacion=-precision;variacion<=precision;variacion++){
numerro="";
for(v=0;v<numero.length;v++){
variable=parseInt(numero.charAt(v))+variacion;
if(variable<0){variable=10-variable;}
if(variable>9){variable=variable-10;}
numerro+=(digitos==v)?variable:numero.charAt(v);
}
if(control.charAt(parseInt(numerro)%23)==letra){
document.write(numerro+"-"+letra+"-->Bueno<br />");
encontrado=true}
else{
if(seguimiento){
document.write('<strong style="color:red">'+numerro+'</strong><br>');
}
}
}
}
if(!encontrado){
document.write("No se ha encontrado ninguno");
}
}
//comprobar (número,letra, precisión, hacer_seguimiento)
comprobar("71795207","W",1,false);
</script>
Creo que funciona, pero vete tú a saber...
Un saludo!
[/FONT]