SoloCodigo
Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: javirues en Jueves 18 de Septiembre de 2003, 10:25
-
No quiero parecer abusivo en mis pretensiones (que ya esta la cosa muy calentita), pero necesito el codigo fuente para resolver la letra de un DNI o bien que alguien me explique un poquillo el algoritmo para resolverlo.
Gracias a todos.
-
Aquí tienes el código, como verás es muy sencillo:
Public Function letra_DNI(txt As String) As String
letra_DNI = Mid("TRWAGMYFPDXBNJZSQVHLCKE", (CLng(txt) Mod 23) + 1, 1)
End Function
NOTA: Se supone que "txt" es una cadena de caracteres que contiene el número de D.N.I.
:good:
-
:hippi:
Gracias gente ya lo he averiguado;
por si a alguien le vale es algo muy sencillo.
Consiste en sacar el mod del DNI / 23
y localizar esta posicion en una cadena fija de letras, algo asin...
letras = "TRWAGMYFPDXBNJZSQVHLCKE"
DNI = text1.text
valor = DNI Mod 23
res = Mid(letras, valor + 1, 1)
Text1.Text = DNI & " - " & res
Espero que le valga a alguien.
-
Hola,
Aqui te muestro dos funciones, una que comprueba si el DNI es correcto y otra que te muestra la letra que corresponde a un DNI dado.
'Muestra la letra del DNI
Function mostrar_letra (DNI as Long)
Dim posicion As Variant
Dim cadena As String
Dim letras() As String
cadena = "T,R,W,A,G,M,Y,F,P,D,X,B,N,J,Z,S,Q,V,H,L,C,K,E,T"
letras = Split(cadena, ",")
posicion = Int(DNI / 23)
posicion = DNI - (posicion * 23)
MsgBox letras(posicion)
End Function
'Funcion que comprueba si un DNI es valido o no. Devuelve:
' 0 -> si es nulo o esta vacio.
' 1 -> Si el formato es valido asi como la letra.
' 2 -> Si la letra del DNI es invalida.
' 3 -> Si el DNI es valido.
Function Validar_DNI(DNI As String) As Integer
Dim Letra
Letra = "TRWAGMYFPDXBNJZSQVHLCKE"
If DNI = "" Then
Validar_DNI = 0
Exit Function
End If
DNI = UCase(DNI)
If Len(DNI) <> 9 Then
Validar_DNI = 1
Exit Function
End If
If IsNumeric(Left(DNI, Len(DNI)-1)) = False Then
Validar_DNI = 1
Exit Function
End If
If Right(DNI, 1) < "A" Or Right(DNI, 1) > "Z" Then
Validar_DNI = 1
Exit Function
End If
If Mid(Letra, (Left(DNI, Len(DNI)-1) Mod 23) + 1, 1) <> Right(DNI, 1) Then
Validar_DNI = 2
Exit Function
End If
Validar_DNI = 3
End Function
Espero que te sirva.
Saludos.
-
Gracias a todos por las molestiuas que se han tomado