You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
« Previous
Version 5
Next »
Situación actual
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, i, 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
PSL-5791
-
Getting issue details...
STATUS