SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: javirues en Jueves 18 de Septiembre de 2003, 10:25

Título: Re: Sacar la letra del DNI
Publicado 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.
Título: Re: Sacar la letra del DNI
Publicado por: angelescj en Jueves 18 de Septiembre de 2003, 10:54
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:
Título: Re: Sacar la letra del DNI
Publicado por: javirues en Jueves 18 de Septiembre de 2003, 10:56
: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.
Título: Re: Sacar la letra del DNI
Publicado por: ROBER.29 en Jueves 18 de Septiembre de 2003, 10:56
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.
Título: Sacar la letra del DNI
Publicado por: javirues en Jueves 18 de Septiembre de 2003, 11:01
Gracias a todos por las molestiuas que se han tomado