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