Está en la página 1de 3

CÁLCULO LETRA DEL NIF-NIE1

Este es, en principio, un ejemplo para “españoles”, dado


que los elementos que analizaremos (un NIF o un NIE) son
documentos propios de España (hasta donde yo sé).

De todas maneras es un ejemplo, creo yo, interesante para


analizar, dado que su relativa sencillez lo hace
bastante “entendible”.

Pues la idea es, simplemente, que en un campo introducimos un DNI (es decir, sólo
los números) y el campo nos devuelve la letra del NIF que correspondería. Si empezamos a
escribir esa numeración con una letra significa que estamos escribiendo un NIE, por lo que el
código detecta lo anterior y actúa en consecuencia, devolviéndonos la letra, esta vez, de un
NIE.

En el ejemplo vamos a utilizar un cuadro de texto, aunque es perfectamente aplicable sobre un


campo de una tabla en un formulario.

Veamos…

CREANDO NUESTRO FORMULARIO


Vamos a crear un formulario en blanco (o el formulario sobre nuestra tabla) y vamos a añadir
un cuadro de texto, que llamaremos txtDni 2 (o aplicarlo sobre el campo donde
vamos a introducir el NIF).

Sacamos sus propiedades y en el evento “Después de actualizar” generamos el siguiente


código3:

Private Sub txtDni_AfterUpdate()
Dim elNIF As String
Dim primerCaracter As String
'Cogemos el valor introducido pasándolo a mayúsculas
elNIF = UCase(Me.txtDni.Value)
'Obtenemos el primer carácter
primerCaracter = CStr(Left(elNIF, 1))
'Miramos el primer carácter
Select Case primerCaracter
Case "X" 'El carácter es una X
'Cogemos los valores numéricos
elNIF = CStr(Right(elNIF, Len(elNIF) - 1))
'Sacamos la letra
elNIF = "X" & NIF(Val(elNIF))
Case "Y" 'El carácter es una Y
'Sustituimos la Y por un 1
elNIF = "1" & CStr(Right(elNIF, Len(elNIF) - 1))
'Sacamos la letra
elNIF = "Y" & NIF(Val(elNIF))
Case "Z" 'El carácter es una Z
'Sustituimos la Z por un 2
elNIF = "2" & CStr(Right(elNIF, Len(elNIF) - 1))
'Sacamos la letra
elNIF = "Z" & NIF(Val(elNIF))

1 La BD de ejemplo os la podéis bajar aquí


2 Para asignar un nombre a un control lo que debemos hacer es sacar las propiedades de ese control e irnos a la Pestaña > Otras >
Nombre. Ahí escribimos el nombre que queramos.
3 Para generar código debemos sacar las propiedades del control > Pestaña Eventos, y nos situamos en la parte “blanca” a la
derecha del evento que queremos programar. Veremos un pequeño botón de puntos suspensivos. Si hacemos clic sobre él nos
aparecerá una ventana que nos pedirá qué operación deseamos realizar. Le indicamos que queremos “generar código”.

1
Visítame en http://neckkito.siliconproject.com.ar
Case Else
'Es un DNI no extranjero
elNIF = NIF(Val(elNIF))
End Select
'Escribimos el valor obtenido en el campo txtDNI
Me.txtDni.Value = elNIF
End Sub

El proceso que realizamos es el siguiente:

• Cogemos el valor introducido (elNIF =


UCase(Me.txtDni.Value))

• Examinamos el primer carácter ( primerCaracter = CStr(Left(elNIF, 1))), convirtiéndolo en un


String (tipo texto) para mayor seguridad.

•A continuación examinamos si el primer carácter es una “X”, una “Y”, una


“Z” o cualquier otro carácter.

• Si fuera cualquier otro carácter (Case Else) llamamos a la función NIF() -que veremos un
poco más abajo-, pasándole sólo los valores numéricos a través de la función Val() (elNIF =
NIF(Val(elNIF)))

• Si, por el contrario, el primer carácter es una letra:


◦ Si es “X” cogemos los valores numéricos y llamamos a la función NIF() (elNIF =
CStr(Right(elNIF, Len(elNIF) – 1)))
◦ Si es “Y” sustituimos esa Y por un 1 y llamamos a la función NIF()
◦ Si es “Z” sustituimos esa Z por un 2 y llamamos a la función NIF()

• Finalmente, reescribimos el NIF en el cuadro de texto (Me.txtDni.Value = elNIF)

Ahora sólo nos falta escribir esa función NIF. Para ello, en el módulo de formulario que nos ha
aparecido en el editor de VB (donde hemos escrito el código anterior), veremos que hay una
línea que indica “Option Compare Database” (y quizá también “Option Explicit”).

Inmediatamente debajo de esa (o esas) líneas escribimos lo siguiente:



Private Function NIF(DNI As Long)
NIF = DNI & Mid$("TRWAGMYFPDXBNJZSQVHLCKE", (DNI Mod 23) + 1, 1)
End Function

Como veis, la función escribe el DNI y a continuación le añade la letra correspondiente. Y la


letra correspondiente se saca del “listado” de letras que podéis ver, eligiéndola en función del
resto de la división del número del DNI entre 23 y añadiéndole una unidad.

Para entendernos, si el DNI fuera 23 lo que haríamos sería


23 / 23 = 1 Resto 0 →
Resto +1 = 1
1 = la primera letra de la lista T →
El NIF sería: 23T

¿Fácil, no?

Por cierto, esta función para obtener la letra del DNI no es mía, sino que la podéis encontrar en
una simple búsqueda por Internet.

2
Visítame en http://neckkito.siliconproject.com.ar
Y eso es todo. Si ahora escribimos el DNI en nuestro cuadro
de texto y pulsamos ENTER nos aparecerá con la letra
correspondiente.

PARA FINALIZAR EL EJEMPLO


Poco más debo añadir. Sólo que espero que el ejemplo os
sea útil.

Un saludo, y…

¡suerte!

3
Visítame en http://neckkito.siliconproject.com.ar