Tengo problemas con cálculo de NIF/NIE
Hace un tiempo NEKKITO NCK dió una solución muy buena para el cálculo con de la letra del NIF, para ACCESS con VB, pero aunque decía que servía también para el cálculo de NIE, hay algún fallo
Esté fué el serial que puso en mayo del 2.013
RESPUESTA DE NECKKITO NCK
Neckkito Nck, Access... Ser o no ser. Esa es la cuestión
Hola!
Voy a suponer que escribes el DNI en el campo [txtDNI], que es coincidente con el campo que te guarda el DNI con la letra.
En tu formulario, en ese campo donde escribes el DNI, sacas sus propiedades y te vas a la pestaña Eventos -> Después de actualizar, y le generas el siguiente código:
...
Private Sub...
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 = 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))
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
...
Para escribir ese código se te habrá abierto el editor de VB en el módulo asociado en el formulario. Entonces ahí, bajo la primera línea que te aparece (Option Explicit), escribes la siguiente función:
...
Private Function NIF(DNI As Long)
NIF = DNI & Mid$("TRWAGMYFPDXBNJZSQVHLCKE", (DNI Mod 23) + 1, 1)
End Function
Yo he detectado que si pones un número de NIE que empiece por X no hay problema, el resultado es correcto, pero si empieza por Y entre la Y y el primer número se pone también aparece un 1, y si empieza por Z entre la Z y el primer número se pone también aparece un 2, (p.e. El número X1162138, el resultado es X1162138V; si fuese Y1162138, el resultado correcto es Y1162138P sin embargo sale Y11162138P; si fuese Z1162138, el resultado correcto es Z1162138E sin embargo sale Z21162138E), esto nos indica que algo tiene que tener mar el serial.
Podría contestar alguien, si fuera Neckkito mejor,
Muchas gracias.