? CheckDni("011637057")
*/-- Verificador y Generador de DNI peruano: Antiguos y Nuevos
Function CheckDNI
LParameters tcDni, tlGenera, tlNumero
Local luResult, lnTotal, lnIndex, lnFactor, lnDigito, lnPosicion, lnNumero, lcNumeros, lcLetra, lcLetras
tlGenera = Iif(Vartype(tlGenera) == "L", tlGenera, .F.)
tlNumero = Iif(Vartype(tlNumero) == "L", tlNumero, .F.)
If !tlGenera And Len(tcDni) != 9
Return .T.
EndIf
lcLetras = "KABCIEFGHI" && Antiguo DNI
lcNumeros = "6789011234" && Nuevo DNI
lnTotal = 0
For lnIndex = 1 To 8
lnFactor = Int(Val(Substr("32765432", lnIndex, 1)))
lnDigito = Int(Val(Substr(tcDni, lnIndex, 1)))
lnTotal = lnTotal + (lnFactor * lnDigito)
EndFor
lnPosicion = 11 - Mod(lnTotal, 11)
If lnPosicion = 11
lnPosicion = 0
Else
If lnPosicion = 10
lnPosicion = 1
EndIf
EndIf
lnNumero = Int(Val(Substr(lcNumeros, lnPosicion + 1, 1)))
lcLetra = Substr(lcLetras, lnPosicion + 1, 1)
If tlGenera
If tlNumero
luResult = lnNumero
Else
luResult = lcLetra
EndIf
Else
luCheck = Right(tcDni, 1)
If IsAlpha(luCheck)
luResult = luCheck == lcLetra
Else
luCheck = Int(Val(luCheck))
luResult = luCheck == lnNumero
EndIf
EndIf
Return (luResult)
Saludos.Roberto Reategui Kanashiro
Muchas Gracias Estimado.
ResponderBorrarJames JAR