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

« Previous Version 5 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 CURP
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).

calcularDigitoVerificador
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
Enlaces

PSL-5791 - Getting issue details... STATUS

 

 

 

  • No labels