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 <= 1716 Hacer
string letraRaiz := cortar_string(segmentoRaiz, i, 1)
Para j = 0 Hasta j <= 3736 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 xletraChr := 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 xk < longitud(rut2)= 16 Hacer
// se concatena rut[x] a la cadena que será el resultado formateado
rutFormateado realiza calculo para sumar los valores de las posiciones donde coincidieron las letras
lngSuma := rutFormateadolngSuma + rut(intFactor[xk]
// se incrementa n
n := n + 1
* (18 - k))
Fin Para
// sise nobtiene esel mayor a la cantidadmodulo 10 de digitoslngSuma eny else arreglo,le volverresta a empezar10
SilngDigito n := 310 Entonces
// si ya se agregaron 3 digitos, se agrega un punto
rutFormateado := rutFormateado + '.';
// se reinicia el contador
n- (lngSuma modulo 10)
Si lngDigito = 10 Entonces
lngDigito := 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
regresa lngDigito
Fin Funcion |