Spanish Calculo DNI/NIE letra

scsjc

Well-Known Member
Licensed User
Longtime User
Hola a todos,
Os comparto aqui un antiguo codigo para verificar o extraer la letra del DNI/NIE

B4X:
Log(getLetraDNI("45538415")) '<--- devuelve letra
Log(checkDNI("Y2881542R")) ' <--- devuelve correcto o incorrecto


Sub checkDNI(dni As String) As String
    If dni.Length<>9 Then Return False 'longitud incorrecta
    dni = dni.ToUpperCase
    Dim txtlongitud As Int = dni.Length
    Dim letra As String = dni.SubString2(txtlongitud-1,txtlongitud)
    Dim letracalculada As String = getLetraDNI(dni.SubString2(0,txtlongitud-1))
    If letra=letracalculada Then Return True Else Return False
End Sub
Sub getLetraDNI(dni As String) As String
    If dni.Length<>8 Then Return "" 'longitud incorrecta
    dni = dni.ToUpperCase
    ' Si es un NIE hay que cambiar la primera letra por 0, 1 ó 2 dependiendo de si es X, Y o Z.
    Dim primeraletra As String = dni.SubString2(0,1)
    Select Case primeraletra
        Case "X":
            dni = dni.Replace("X","0")
        Case "Y":
            dni = dni.Replace("Y","1")
        Case "Z":
            dni = dni.Replace("Z","2")
    End Select
    Dim letras As String = "TRWAGMYFPDXBNJZSQVHLCKE"
    Dim character As Int
    character = (1 + (dni) Mod 23)
    Return letras.SubString2 ((character-1), (character-1)+ 1)
End Sub

Saludos
 
Top