Algoritmo de cálculo de la letra del N.I.F. - Serafín Medina Montañés Pág.:1/1 ALGORITMO DE VERIFICACIÓN DE LETRA CORRECTA EN EL N.I.F. El segmento de código que ponemos a continuación es el de un programa hecho en Visual Basic que verifica si la letra del NIF es correcta y la sustituye por la correcta si no lo es o la añade al DNI si no la tiene: Function Valida_NIF(ByRef strDNI As String) As Boolean ' Valida que strDNI tiene un formato correcto... ' strTipo indica el tipo de persona, Fisica("F") por defecto o Juridica ("J") Dim i% Dim strRistra As String Dim strLetra As String Dim strNumero As String Dim strLetraCalculada As String Dim nModNif As Integer Dim nEstado As Integer strRistra = "TRWAGMYFPDXBNJZSQVHLCKE" If Len(strDNI) <= 9 And Len(strDNI) >= 6 Then ' Verificamos que el formato sea de numeros seguido o no de una letra For i% = 1 To Len(strDNI) 'If Asc(Mid(strDNI, i%, 1)) >= 48 And _ ' Asc(Mid(strDNI, i%, 1)) <= 59 Then ' Jordi: Cambio el 59 por un 57 ya que los caracteres 58 y 59 ' son para el ";" y ":" y hacian "petar" la validacion del DNI If Asc(Mid(strDNI, i%, 1)) >= 48 And _ Asc(Mid(strDNI, i%, 1)) <= 57 Then Else Exit For End If Next Select Case i% ' Son todo numeros Case Len(strDNI) + 1 nEstado = 1 strNumero = strDNI ' Numero seguido de letra Case Len(strDNI) nEstado = 2 strLetra = Right(strDNI, 1) strNumero = Left(strDNI, Len(strDNI) - 1) 'Caso erroneo Case Else nEstado = 3 End Select If nEstado = 1 Or nEstado = 2 Then nModNif = (CLng(strNumero) Mod 23) + 1 strLetraCalculada = Mid(strRistra, nModNif, 1) Select Case nEstado Case 1 Valida_NIF = True strDNI = strDNI & strLetraCalculada Case 2 Valida_NIF = True If strLetraCalculada <> strLetra Then strDNI = strNumero & strLetraCalculada Else End If End Select Else Algoritmo de cálculo de la letra del N.I.F. - Serafín Medina Montañés Pág.:2/2 Valida_NIF = False End If Else Valida_NIF = False End If End Function La fórmula para hallar la letra del N.I.F. que se deduce del código anterior es la siguiente: LETRA = SUBCADENA (CADENA, 1, (RESTO (NUMERO DE DNI / 23) + 1 ) ) La CADENA de donde se extrae la letra está formada por las letras mayúsculas comunes en el alfabeto latino (Del que están excluidas las particulares del alfabeto español, como la Ñ y otras que pueden prestarse a confusión, como la I) dispuestas en un cierto orden, que es el siguiente: CADENA = "TRWAGMYFPDXBNJZSQVHLCKE" §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§