Buen día , 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

Código:
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 que según yo, se usa para validar esto

Código:
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; }
Por ultimo, la funcion que llama para validar

Código:
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;
            }
Como dije, cualquier ayuda sería buena, sobretodo como tener el enfoque para atacar este tipo de problemas.
supuse que este era el lugar correcto para postear esto pues mi maestro mencionó que se trataba de analisis de ingenieria inversa. Así que espero sea correcto, en caso contrario, seria bueno que me indicaran donde debo de ponerlo.

saludos y gracias!