Verificar Dni/Nif
Publicado por Francesc (68 intervenciones) el 12/10/2013 12:41:52
Intento unificar código localizado en algunos foros, para conseguir que a partir de la entrada de datos en un formulario controle que la letra final es correcta así como en los nif de extranjeros.
En antes de actualizar anoto el siguiente código:
Es después de actualizar el siguiente:
El módulo VerLetraNIF es:
El problema es que por separado me funciona correctamente, es decir si entro un DNI funciona y me avisa si la letra no es correcta y permite volver a introducir la letra, pero si entro un NIF (extranjero, normalmente empieza por X,Y o Z) no me funciona correctamente.
¿Es posible que la función recoja ambas casuísticas, si es así como la estructuro?
Gracias por la colaboración.
En antes de actualizar anoto el siguiente código:
1
2
3
4
5
6
7
8
Private Sub DNI_BeforeUpdate(Cancel As Integer)
If Nz(Me.DNI, "") <> "" Then
If Right(Me.DNI, 1) <> VerLetraNIF(Me.DNI) Then
MsgBox "Letra incorrecta o no introducida.", vbExclamation
Cancel = True
End If
End If
End Sub
Es después de actualizar el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Sub DNI_AfterUpdate()
Dim elNIF As String
Dim primerCaracter As String
'Cogemos el valor introducido pasándolo a mayúsculas
elNIF = UCase(Me.DNI.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" & VerLetraNIF(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" & VerLetraNIF(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" & VerLetraNIF(Val(elNIF))
Case Else
'Es un DNI no extranjero
elNIF = VerLetraNIF(Val(elNIF))
End Select
'Escribimos el valor obtenido en el campo txtDNI
Me.DNI.Value = elNIF
End Sub
El módulo VerLetraNIF es:
1
2
3
Public Function VerLetraNIF(DNI As String) As String
VerLetraNIF = Mid$("TRWAGMYFPDXBNJZSQVHLCKE", (Val(DNI) Mod 23) + 1, 1)
End Function
El problema es que por separado me funciona correctamente, es decir si entro un DNI funciona y me avisa si la letra no es correcta y permite volver a introducir la letra, pero si entro un NIF (extranjero, normalmente empieza por X,Y o Z) no me funciona correctamente.
¿Es posible que la función recoja ambas casuísticas, si es así como la estructuro?
Gracias por la colaboración.
Valora esta pregunta
0