Un objeto que manejamos prácticamente a diario en nuestra vida es el DNI, el documento nacional de identidad, que está formado por un número de ocho dígitos y, desde hace unos años, también una letra. Muchas personas piensan que esa letra se nos asigna de forma aleatoria, como el número, pero esto no es así. En esta entrada del Cuaderno de Cultura Científica vamos a explicar, aunque es posible que muches de vosotres ya lo conozcáis, cómo se asigna esa letra y cuál es su significado.
|
etiquetas: dni , letra , detector , errores
¿Están llamando analfaburras a las mujeres? Es que algo tan tonto como la manera de sacar la letra del DNI lo sabe todo el mundo, pero ahora parece que solo lo sabíamos los seres dotados de testículos.
www.aecoc.es/servicios/herramientas/calculo-digito-control/
Mucha gente no sabe, pero todo el que haya trabajado mínimamente con dni. o con cifs, o con cuentas bancarias y mas cosas, sabe que hay dígitos de control, que tienen unas reglas de calculo, etc, etc. y los que nos dedicamos a estas cosas ya nos sabemos unos cuantos de memoria como el 0T el 1R o el 12345678Z... ese era mi chiste (sin gracia)
Public Function LetraNif(Dni As Long, Optional TipoIPF As String) As String
Dim UniNIE_Num As String
Dim ProcesarStrDni As String
ProcesarStrDni = CStr(Dni)
If Len(ProcesarStrDni) = 6 Then ProcesarStrDni = "0" & ProcesarStrDni
If Len(ProcesarStrDni) = 5 Then ProcesarStrDni = "00" & ProcesarStrDni
If Len(ProcesarStrDni) = 4 Then ProcesarStrDni = "000" & ProcesarStrDni
If Len(ProcesarStrDni) = 3 Then ProcesarStrDni = "0000" & ProcesarStrDni
' Extranjeros o tipos especiales
Select Case Trim(TipoIPF)
Case "X"
Case "Y"
UniNIE_Num = "Y" & CStr(ProcesarStrDni)
UniNIE_Num = Replace(UniNIE_Num, "Y", 1)
Dni = CDbl(UniNIE_Num)
Case "Z"
ProcesarStrDni = CStr(Dni)
UniNIE_Num = "Z" & CStr(ProcesarStrDni)
UniNIE_Num = Replace(UniNIE_Num, "Z", 2)
Dni = CDbl(UniNIE_Num)
End Select
LetraNif = Right(Left("TRWAGMYFPDXBNJZSQVHLCKEO", ((Dni Mod 23) + 1)), 1)
End Function