You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
Version 1
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
Para i = 0 Hasta i < 17 Hacer
string letraRaiz := cortar_string(segmentoRaiz, i, 1)
Para j = 0 Hasta j < 37 Hacer
Si cortar_string()
Fin Para
Fin Para
for($i=0; $i<17; $i++)
{
for($j=0; $j<37; $j++)
{
if(substr($segRaiz,$i,1) === substr($chrCaracter,$j,1))
{
$intFactor[$i]=$j;
}
}
}
for($k = 0; $k < 17; $k++)
{
$lngSuma= $lngSuma + (($intFactor[$k]) * (18 - $k));
}
$lngDigito = (10 - ($lngSuma % 10));
if($lngDigito===10)
{
$lngDigito=0;
}
return $lngDigito;
}
Funcion formatearRUT(rut)
// se eliminan letras y caracteres no permitidos,
// quedando solo números y la letra K (si es que existe en el string proporcionado)
string rut := reemplazar_invalidos("/[^0-9K]/", '', rut)
// se obtiene el digito verificar, el cual es el último caracter del string del RUT
string verificador = cortar_string(rut, -1);
// se obtienen los primeros 8 caracteres de rut
string rut1 := cortar_string(rut, 8)
// se le da la vuelta a la cadena obtenida al cortar los primeros ocho caracteres del rut
string rut2 := voltear_string(rut1);
integer n := 0
string rutFormateado := ''
// se recorre rut2
Para x = 0 Hasta x < longitud(rut2) Hacer
// se concatena rut[x] a la cadena que será el resultado formateado
rutFormateado := rutFormateado + rut[x]
// se incrementa n
n := n + 1
// si n es mayor a la cantidad de digitos en el arreglo, volver a empezar
Si n = 3 Entonces
// si ya se agregaron 3 digitos, se agrega un punto
rutFormateado := rutFormateado + '.';
// se reinicia el contador
n := 0;
Fin Si
Fin Para
// se le da la vuelta al rutFormateado y se le agrega el digito verificador separado por un guion
regresar voltear_string(rutFormateado) + '-' + verificador
Fin Funcion
PSL-5769
-
Getting issue details...
STATUS