Como realizar la validación de un Nif en Python
Para quién no lo sepa, en España se utiliza el Número de Identificación Fiscal (NIF) para la identificación fiscal de personas físicas. Básicamente, el NIF consiste en el DNI (Documento Nacional de Identidad) + un dígito de control. Este dígito sirve como verificación, ya que se puede calcular a partir del DNI. ¿Para qué sirve entonces? Evita que alguien se pueda inventar un NIF sobre la marcha o, de forma más práctica, si te equivocas introduciendo un número, no se validará el NIF.
A continuación os dejo una función implementada en Python que devolverá el NIF normalizado (Ej.: 12345678Z) y que admite como entrada cadenas con formato '12345678-Z' y '12345678Z'. En caso de que no se valide o que la cadena de texto no tenga un formato correcto, saltará una excepción.
import re
def validate_nif(value):
value = unicode(value).upper()
match = re.match('(?P<dni>\d{8})(?P<letra>[A-Z])', value)
if match is None:
match = re.match('(?P<dni>\d{8})-(?P<letra>[A-Z])', value)
if match is None:
raise Expection
dni = int(match.group('dni'))
letra = match.group('letra')
LETRAS_NIF = 'TRWAGMYFPDXBNJZSQVHLCKE'
if LETRAS_NIF[dni%23] != letra:
raise Expection
return unicode('%s%s' % (dni, letra))
Y unos pequeños ejemplos:
In [3]: validate_nif('12345678-Z')
Out[3]: u'12345678Z'
In [4]: try:
...: validate_nif('22222')
...: except:
...: print 'Invalido'
...:
Invalido
In [5]: try:
...: validate_nif('12345678-D')
...: except:
...: print 'Invalido'
...:
Invalido
Tags
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
