Created
October 8, 2014 18:59
-
-
Save juanvmarquezl/a299049a3acc5d201924 to your computer and use it in GitHub Desktop.
Calcular y validar digito del RIF en Venezuela
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def calcular_rif(data): | |
''' | |
Toma un nro de cedula o rif y calcula el digito validador | |
data: string con nro de CI o RIF sin espacion ni guiones ej. | |
V12345678 | |
E12345678 | |
J123456789 | |
devuelve el rif con el digito calculado | |
no se validan los datos de entrada | |
para validar: if data == calcular_rif(data): | |
''' | |
base = {'V': 4, 'E': 8, 'J': 12, 'G': 20} | |
oper = [0, 3, 2, 7, 6, 5, 4, 3, 2] | |
val = 0 | |
for i in range(len(data[:9])): | |
val += base.get(data[0], 0) if i == 0 else oper[i] * int(data[i]) | |
digit = 11 - (val % 11) | |
digit = digit if digit < 10 else 0 | |
return '%s%s' % (data[:9], digit) |
El RIF es el Registro de Información Fiscal, Se usa para gestiones netamente fiscales (en Venezuela), Desconozco si el número de pasaporte tiene una validación similar o uquivalente
en el caso de pasaporte no existen rif?
To validate passport use value 16 for P
data deberia ser el numero de cedula,no?
tendria q declarar una variable data que seria la cedula?
Si data = nro de CI
Gracias por tu aportación, pero debo comentarte 2 cosas,
- No me estoy de acuerdo con que te expreses y descalifiques a la primera el aporte de los demás (al menos mis aportes).
- El código Optimizado que propones es en algunos casos mas lento que el original.
No dudo que haya una (y más) maneras de optimizar este código, pero creo que puedes hacer tu propuesta sin caer en la arrogancia.
Saludos y gracias
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
en el caso de pasaporte no existen rif?