Buen día eoleanos, el motivo de este tema es, como dice el título, obtener un poco de ayuda con un algoritmo.
Un profesor me ha dado el código de verificación que usará y nos ha pedido, realizar un programa, en python que genere secuencias que sean validas
para su autentificador.
Como mi clase es de análisis y diseño de algoritmos, la implementación (hacer el código), es lo sencillo, lo duro es saber que hacer. Llevo días pensando en esto y no he podido lograrlo y comienza a venir el tiempo de entrega.
Lo único que he podido analizar es que se trata de una cadena, de carácteres (mayúsculas) y dígitos (0-9) de 15 números/letras, que para convertir los números de las letras, se usa su equivalente ASCII para hacerle ciertas operaciones y volverlo un número diferente.
No tengo mucha experiencia pidiendo ayuda en este tipo de cosas, pero espero puedan ayudarme, no sé que más podría darles de información, el código que me dio mi profesor lo adjuntaré, está hecho en Javascript pues desde Python debo hacer que solicite el servicio de validación.
Cualquier idea, pista o ayuda es más que bienvenida.
Saludos y muchas gracias.
Esta es la función que obtiene un número por cada letra
function char2number(chr) {
var code = chr.charCodeAt(0);
if(code<65) code = code-48;
else {
code=code-65+10;
if(code>=11) code++;
if(code>=22) code++;
if(code>=33) code++;
}
return code;
}
Esta es la parte interesante (según yo, la que se usa para validar)
function checkdata(codigo) {
var dig = 0;
var test = 1;
for(var i=0; i<codigo.length-1;i++) {
dig=dig+(char2number(codigo.charAt(i))*test);
test*=2;
}
dig = mod(dig,9);
if(dig==codigo.charAt(codigo.length-1)) return true;
else return false; }
//ESTA ES LA FUNCIÓN MOD QUE LLAMA ARRIBA
function mod(X,Y) { var t; t = X % Y; return t < 0 ? t + Y : t; }
Así mismo, en otra parte, que es la que va a usar para verificar, viene esto:
function valida() {
var codigo = document.getElementById("codigo").value;
// Valida el codigo
if( codigo == "" || codigo.length < 15 ) {
alert("El codigo capturado es invalido!");
return false;
}
if( ! checkdata(codigo.toUpperCase()) ) {
alert("El codigo capturado es invalido!");
return false;
}