algoritmo de verificación de letra correcta en el nif

Anuncio
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"
§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
Descargar