Bueno últimamente he estado haciendo hartos scripts para trabajar el tema de los algoritmos, familiarizarme con python y adquirir experiencia. Entre los varios scripts que he hecho, hice uno en especial, al cual le ingresas un rut, sin puntos ni guiones y te imprime el número verificador.
Según Wikipedia:
El RUT consta de dos partes, el número y el dígito verificador separados por un guion. En el siguiente ejemplo se toma como RUT el número 30.686.957-X, donde 30.686.957 es el número del RUT y X es el dígito verificador que no conocemos o que queremos verificar:
- Se procede a tomar el número de RUT de derecha a izquierda, multiplicando cada dígito por los números que componen la serie numérica 2,3,4,5,6,7; y sumando el resultado de estos productos, como se muestra a continuación (si se ha aplicado la serie hasta el 7 y quedan dígitos por multiplicar, se comienza la serie nuevamente):
En el ejemplo:
7 × 2 = 14,
5 × 3 = 15,
9 × 4 = 36,
6 × 5 = 30,
8 × 6 = 48,
6 × 7 = 42,
0 × 2 = 0,
3 × 3 = 9, entonces la suma de los productos es: 14+15+36+30+48+42+0+9 = 194
- Al número obtenido por la suma del producto de cada dígito por la serie ya mencionada, se le aplica módulo 11, o sea, se divide por 11 y se determina el resto de la división.
En el ejemplo:
194: 11 = 17
Resto: 7
Ahora a 11 se le resta el resto:
En el ejemplo:
11 – 7 = 4
Si el resultado es 11, el dígito verificador será 0.
Si el resultado es 10, el dígito verificador será K.
En otro caso el resultado será el dígito verificador.
Como en el ejemplo el resultado de la resta es 4, el dígito verificador es 4.
Por ende, el RUT del ejemplo es el 30.686.957-4.
Es por eso que hice esto:
rut = raw_input("Ingrese rut sin puntos, ni guiones, ni numero verificador: ") #obtengo datos por teclado
lenght = 0-len(rut) #obtengo la longitud y la hago negativa
i = -1 #inicio contador para while
j = 2 #incio contador para multiplicacion ( 2,4,5,6,7 )
suma = 0 #inicio variable para suma
try:
while lenght <= i:
multiplicacion = int(rut[i])*j
j = j + 1
if j == 8:
j = 2
suma = multiplicacion + suma
i = i - 1
resto = suma % 11
num_ver= 11 - resto
if num_ver == 10:
print "El numero verificador es K"
elif num_ver == 11:
print "El numero verificador es 0"
else:
print "El numero verificador es %d" %(num_ver)
except:
print "Debe ingresar numeros, no letras...."