Actualmente en la aplicación Censo, para validar un CURP de México, se sigue el siguiente algoritmo(pseudocódigo):
Funcion validarCURP(curp) // se convierte a mayúsculas y se eliminan espacios en blanco al inicio y al final del string recibido string curp := convertir_a_mayusculas(eliminar_espacios(curp)) Si longitud(curp) != 18 Entonces regresa FALSO Si no Entonces // se calcula el digito verificador del curp integer digito := calculasDigitoVerificadorCURP(curp); // se obtiene el último digito del curp integer ultimoDigito := cortar_string(curp, -1) // expresión regular a evaluar, obtenido de RENAPO string patron = "/[A-Z]{4}\d{6}[HM][A-Z]{2}[B-DF-HJ-NP-TV-Z]{3}[A-Z0-9][0-9]/" Si !coincide(patron, curp) Entonces regresa FALSO Si no si !(digito = ultimoDigito) Entonces regresa FALSO Si no Entonces regresa VERDADERO Fin Si Fin Si Fin Funcion |
Para poder calcular el dígito verificador de un curp se utiliza el siguiente algoritmo(pseudocódigo).
Funcion calcularDigitoVerificadorCURP(curp) // se obtienen los primeros 17 caracteres del string recibido string segmentoRaiz := cortar_string($curp,17) // se el correspondiente valor en utf8 para cada letra del abecedario arreglo chrCaracter := decodificar_utf8("0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ") array intFactor := [] float lngSuma := 0.0 float lngDigito := 0.0 // se recorren los strings de segmentoRaiz y chrCaracter Para i = 0 Hasta i = 16 Hacer string letraRaiz := cortar_string(segmentoRaiz, i, 1) Para j = 0 Hasta j = 36 Hacer string letraChr := cortar_string(chrCaracter, j, 1) // cuando la letra de ambos strings coincide, se guarda la posición en la que coincidieron Si letraRaiz = letraChr Entonces intFactor[i] := j Fin Si Fin Para Fin Para Para k = 0 Hasta k = 16 Hacer // se realiza calculo para sumar los valores de las posiciones donde coincidieron las letras lngSuma := lngSuma + (intFactor[k] * (18 - k)) Fin Para // se obtiene el modulo 10 de lngSuma y se le resta a 10 lngDigito := 10 - (lngSuma modulo 10) Si lngDigito = 10 Entonces lngDigito := 0 Fin Si regresa lngDigito Fin Funcion |
|
|