Skip to content

Instantly share code, notes, and snippets.

@juanvmarquezl
Created October 8, 2014 18:59
Show Gist options
  • Save juanvmarquezl/a299049a3acc5d201924 to your computer and use it in GitHub Desktop.
Save juanvmarquezl/a299049a3acc5d201924 to your computer and use it in GitHub Desktop.
Calcular y validar digito del RIF en Venezuela
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)
@juanvmarquezl
Copy link
Author

Si data = nro de CI

@juanvmarquezl
Copy link
Author

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