Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Estado
EN USO

Situación actual

Actualmente en la aplicación Censo, para validar un CURP de México, se sigue el siguiente algoritmo(pseudocódigo):

Validar RUT
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).

Formateo de RUT
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

 

 

Enlaces

PSL-5769 - Getting issue details... STATUS

 

 

 

  • No labels