Me dio por realizar esta función con el objeto de que a alguien le sirva.
Saludos!.
(Obtiene el DV del RUN chileno). 
#!/usr/bin/env python
# -*- coding: utf8 -*-
"""
Script para obtener el digito verificador del RUN
e imprime todo el RUN
@author: felcontreras@gmail.com
"""
import os
import sys
def number_format(num):
    """
    Funcion la cual realiza el formateo del numero
    dejandolo asi separado por puntos.
    (USO SIMPLE)
    """
    numero = str(num)
    i = 0
    numfinal = ""
    numdex = ""
    for concat in reversed(numero):
        numfinal += concat
        if i == 2:
            numfinal += "."
            i = 0
        else:
            i += 1
    for numreal in reversed(numfinal):
        numdex += numreal
    if numdex[0] == ".":
        retorno = numdex[1:len(numdex)]
    else:
        retorno = numdex
    return retorno
def obtienedv(run):
    """
    Funcion la cual retorna el digito verificador
    a su vez el run ya formateado.
    Eso ya me voy a dormir.
    """
    permitido = "1234567890"
    total = 0
    multiplo = 2
    rutx = ""
    for cambio in run:
        if cambio in permitido:
            rutx += cambio
    for reverso in reversed(rutx):
        total += int(reverso) * multiplo
        if multiplo == 7:
            multiplo = 2
        else:
            multiplo += 1
        modulus = total % 11
        verificador = 11 - modulus
        if verificador == 10:
            div = "k"
        elif verificador == 11:
            div = "0"
        else:
            if verificador < 10:
                div = verificador
        retorno = rutx+str(div)
    return retorno
def abreArchivo(archivo):
    """
    Funcion la cual lee el archivo de origen para la opcion -i
    """
    abre = open(archivo, 'r')
    arreglo = []
    for linea in abre.readlines():
        arreglo.append(obtienedv(linea))
    abre.close()
    return "\n".join(arreglo)
def creaArchivo(archivo, info):
    """
    Funcion la cual crea el archivo de destino y almacena la información del archivo de entrada
    """
    try:
        cnuevo = open(archivo, 'w')
    except:
        print "Imposible escribir en archivo"
        sys.exit()
    cnuevo.write(info)
    cnuevo.close()
    return True
if '__main__' == __name__:
    if "--help" in sys.argv:
        print "Modo de uso:"
        print sys.argv[0]+ " 123456789 # (run)"
        print sys.argv[0]+ " -i archivo_entrada # Imprime en Pantalla | -o archivo_de_salida (opcional)"
        sys.exit()
    if len(sys.argv) > 2:
        if "-i" in sys.argv:
            try:
                archivo = sys.argv[sys.argv.index("-i")+1]
            except IndexError:
                print "Debes definir el archivo a leer"
                sys.exit()
            runs = abreArchivo(os.getcwd()+"/"+archivo)
            if "-o" in sys.argv:
                try:
                    anuevo = sys.argv[sys.argv.index("-o")+1]
                    creaArchivo(anuevo, runs)
                except:
                    print "Imposible crear el archivo de salida."
                    sys.exit()
            else:
                print runs
    elif len(sys.argv) == 2:
        print obtienedv(sys.argv[1])
    else:
        print sys.argv[0]+" --help. Para obtener mayor infromacion."
miércoles, 5 de septiembre de 2012
martes, 4 de septiembre de 2012
Validador de Run Chileno en Python
#!/usr/bin/env python
#-*- coding: utf8 -*-
"""
Script para la validación de RUN Chileno.
@author: felcontreras@gmail.com
"""
import sys
def filtra(rut):
"""
Esta funcion cumple el trabajo de filtrar el RUN.
Omitiendo asi los puntos (.) y Guiones (-) y cualquier otro caracter
que no incluya la variable 'caracteres'.
"""
caracteres = "1234567890k"
rutx = ""
for cambio in rut.lower():
if cambio in caracteres:
rutx += cambio
return rutx
def valida(rut):
"""
Esta funcion cumple el trabajo de realizar la logica de negocio,
ya sea matematica como logica.
"""
rfiltro = filtra(rut)
rutx = str(rfiltro[0:len(rfiltro)-1])
digito = str(rfiltro[-1])
multiplo = 2
total = 0
for reverso in reversed(rutx):
total += int(reverso) * multiplo
if multiplo == 7:
multiplo = 2
else:
multiplo += 1
modulus = total % 11
verificador = 11 - modulus
if verificador == 10:
div = "k"
elif verificador == 11:
div = "0"
else:
if verificador < 10:
div = verificador
if str(div) == str(digito):
retorno = "Valido"
else:
retorno = "Invalido"
return retorno
if __name__ == "__main__":
if len(sys.argv) == 2:
print valida(sys.argv[1])
else:
print "* Atención - Utilizando RUN: 11.111.111-1 en modo prueba.*"
print "# Modo de empleo: 'python "+sys.argv[0]+" 22.222.222-2'. (RUN A VALIDAR) #"
print valida("11.111.111-1")
#-*- coding: utf8 -*-
"""
Script para la validación de RUN Chileno.
@author: felcontreras@gmail.com
"""
import sys
def filtra(rut):
"""
Esta funcion cumple el trabajo de filtrar el RUN.
Omitiendo asi los puntos (.) y Guiones (-) y cualquier otro caracter
que no incluya la variable 'caracteres'.
"""
caracteres = "1234567890k"
rutx = ""
for cambio in rut.lower():
if cambio in caracteres:
rutx += cambio
return rutx
def valida(rut):
"""
Esta funcion cumple el trabajo de realizar la logica de negocio,
ya sea matematica como logica.
"""
rfiltro = filtra(rut)
rutx = str(rfiltro[0:len(rfiltro)-1])
digito = str(rfiltro[-1])
multiplo = 2
total = 0
for reverso in reversed(rutx):
total += int(reverso) * multiplo
if multiplo == 7:
multiplo = 2
else:
multiplo += 1
modulus = total % 11
verificador = 11 - modulus
if verificador == 10:
div = "k"
elif verificador == 11:
div = "0"
else:
if verificador < 10:
div = verificador
if str(div) == str(digito):
retorno = "Valido"
else:
retorno = "Invalido"
return retorno
if __name__ == "__main__":
if len(sys.argv) == 2:
print valida(sys.argv[1])
else:
print "* Atención - Utilizando RUN: 11.111.111-1 en modo prueba.*"
print "# Modo de empleo: 'python "+sys.argv[0]+" 22.222.222-2'. (RUN A VALIDAR) #"
print valida("11.111.111-1")
Generador de Runs y DV Chilenos en Python
#!/usr/bin/env python
"""
Genera RUN V1.0
Este script genera RUN Chilenos validados
Utiles para registrarse en algun sitio que requiera dichos datos
y no colocar los propios.
uso: Generarut.py 10000000 10000050
Por defecto generara 500 runs entre: 10.000.000 y 10.000.500
Esto generara 50 Runs validos
"""
import sys
def generarut(desde, hasta):
"""
Funcion que permite la generacion de runs.
"""
arreglo = []
multiplo = 2
total = 0
for i in range(desde, hasta):
rut = str(i)
for rinverso in reversed(rut):
total += int(rinverso) * multiplo
if multiplo == 7:
multiplo = 2
else:
multiplo += 1
modulus = total % 11
verificador = 11 - modulus
if verificador == 10:
div = "k"
elif verificador == 11:
div = "0"
else:
if verificador < 10:
div = verificador
arreglo.append(rut + "-" + str(div))
return arreglo
if "__main__" == __name__:
if len(sys.argv) == 3:
DESDE = int(sys.argv[1])
HASTA = int(sys.argv[2])
else:
DESDE = 10000000
HASTA = 10000500
for runs in generarut(DESDE, HASTA):
print runs
"""
Genera RUN V1.0
Este script genera RUN Chilenos validados
Utiles para registrarse en algun sitio que requiera dichos datos
y no colocar los propios.
uso: Generarut.py 10000000 10000050
Por defecto generara 500 runs entre: 10.000.000 y 10.000.500
Esto generara 50 Runs validos
"""
import sys
def generarut(desde, hasta):
"""
Funcion que permite la generacion de runs.
"""
arreglo = []
multiplo = 2
total = 0
for i in range(desde, hasta):
rut = str(i)
for rinverso in reversed(rut):
total += int(rinverso) * multiplo
if multiplo == 7:
multiplo = 2
else:
multiplo += 1
modulus = total % 11
verificador = 11 - modulus
if verificador == 10:
div = "k"
elif verificador == 11:
div = "0"
else:
if verificador < 10:
div = verificador
arreglo.append(rut + "-" + str(div))
return arreglo
if "__main__" == __name__:
if len(sys.argv) == 3:
DESDE = int(sys.argv[1])
HASTA = int(sys.argv[2])
else:
DESDE = 10000000
HASTA = 10000500
for runs in generarut(DESDE, HASTA):
print runs
Suscribirse a:
Comentarios (Atom)
 
