/
Validación de CURP en México

Validación de CURP en México

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, 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

Formato de CURP

 



En mayúsculas y sin espacios: AAPR630321HDFLRCC9

Enlaces

PSL-5791 - Getting issue details... STATUS

 

 

 

Related content

Validación de RUT y formateo de RUT en Chile
Validación de RUT y formateo de RUT en Chile
More like this
Búsqueda de un Alumno
Búsqueda de un Alumno
More like this
Alta masiva de alumnos
Alta masiva de alumnos
More like this
Testar na Homologação Relatório de Despesa
Testar na Homologação Relatório de Despesa
More like this
Aplicaciones que ejecutan procedimientos almacenados
Aplicaciones que ejecutan procedimientos almacenados
More like this
Matriz de Pruebas Negocio
Matriz de Pruebas Negocio
More like this