URGENTE!!Función para válidar el DNI

usu
21 de Julio del 2004
Hola
Alguien me puede facilitar la función para válidar la letra del Dni.?
Gracias.

queen
21 de Julio del 2004
Hola.
Yo uso esto. Espero que te vaya bien.

Public Function VerNIF(NIF As String) As Byte
'comprueba que el NIF sea correcto, tenga todos los 8 num y la letra
Dim ret As Byte 'ret => variable de retorno 0 => error, 1 => todo bien

ret = 0

'se quitan los espacios en blanco de delante y detras de la palabra
NIF = Trim(NIF)
'se convierte el texto en mayusculas
NIF = UCase$(NIF)

If Len(NIF) = 9 Then

'con NIF Like "########" lo que se hace es comparar la cadena
'NIF con la de después de like y si coincide todo va bien, sino
'nos da un error.
'# = cualquier número pero sólo uno.

'mira si los 8 primeros caracteres son números
If Left$(NIF, 8) Like "########" Then
'mira que el ultimo caracter sea una letra
If Right$(NIF, 1) Like "[A-Z]" Or Right$(NIF, 1) Like "Ñ" Then
ret = 1
Else
Editar_Mensaje ("El último carácter no es una letra")
ret = 0
End If
Else
Editar_Mensaje ("Alguno de los primeros 8 dígitos no es un número")
ret = 0
End If

Else
If Len(NIF) < 9 Then

Editar_Mensaje ("Número erroneo le faltan cifras")
Else
Editar_Mensaje ("Número erroneo le sobran cifras")
End If
ret = 0
End If

VerNIF = ret

End Function

EnR
21 de Julio del 2004
Me parece que lo que quiere es comprobar que la letra corresponde al numero no mirar si tiene X cifras y una letra, es asi??

EnR
21 de Julio del 2004
Esta funcion es la que uso yo no sera la mejor pero funciona :P

Public Function comprueba_nif(Nif As String) As Boolean
Dim Letra As String * 1
Dim letracomprueba As String
Dim Numero As String
Dim DNI As Double
If Left(Nif, 1) = "X" Or Left(Nif, 1) = "x" Then
Nif = Right(Nif, Len(Nif) - 1)
End If
Letra = UCase(Right(Nif, 1))

Numero = Left(Nif, Len(Nif) - 1)
DNI = CDbl(Numero)
Select Case DNI Mod 23
Case 0
letracomprueba = "T"
Case 1
letracomprueba = "R"
Case 2
letracomprueba = "W"
Case 3
letracomprueba = "A"
Case 4
letracomprueba = "G"
Case 5
letracomprueba = "M"
Case 6
letracomprueba = "Y"
Case 7
letracomprueba = "F"
Case 8
letracomprueba = "P"
Case 9
letracomprueba = "D"
Case 10
letracomprueba = "X"
Case 11
letracomprueba = "B"
Case 12
letracomprueba = "N"
Case 13
letracomprueba = "J"
Case 14
letracomprueba = "Z"
Case 15
letracomprueba = "S"
Case 16
letracomprueba = "Q"
Case 17
letracomprueba = "V"
Case 18
letracomprueba = "H"
Case 19
letracomprueba = "L"
Case 20
letracomprueba = "C"
Case 21
letracomprueba = "K"
Case 22
letracomprueba = "E"
End Select
If letracomprueba = Letra Then
comprueba_nif = True
Else
comprueba_nif = False
MsgBox "Error la última letra del Nif/Nie deberia ser: " & letracomprueba, vbOKOnly, Titulo
End If

End Function