• Domingo 22 de Diciembre de 2024, 19:06

Autor Tema:  Re: Sacar la letra del DNI  (Leído 2285 veces)

javirues

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Sacar la letra del DNI
« en: Jueves 18 de Septiembre de 2003, 10:25 »
0
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.

angelescj

  • Miembro MUY activo
  • ***
  • Mensajes: 154
    • Ver Perfil
Re: Sacar la letra del DNI
« Respuesta #1 en: Jueves 18 de Septiembre de 2003, 10:54 »
0
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:

javirues

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Sacar la letra del DNI
« Respuesta #2 en: Jueves 18 de Septiembre de 2003, 10:56 »
0
: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.

ROBER.29

  • Miembro MUY activo
  • ***
  • Mensajes: 421
    • Ver Perfil
    • http://www.contrapixel.com
Re: Sacar la letra del DNI
« Respuesta #3 en: Jueves 18 de Septiembre de 2003, 10:56 »
0
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.
Roberto García
Moderador de Visual Basic.
Gerente
[contra]PixeL S.L.
Valladolid

javirues

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Sacar la letra del DNI
« Respuesta #4 en: Jueves 18 de Septiembre de 2003, 11:01 »
0
Gracias a todos por las molestiuas que se han tomado