Validación de Cedula de Ecuador

Forums: 

Script de Validación de Cedula de Ecuador en PHP

Esta documentado para poderlo entender:

Validacion de Cedula

<?php

// funcion para validar la cedula de Ecuador//
//Autor: Oliver Veliz
//año:2010

function validarCI($strCedula)
{
//El decimo Digito es un resultante de un calculo
//Se trabaja con los 9 digitos de la cedula
//Cada digito de posicion impar se lo duplica, si este es mayor que 9 se resta 9
//Se suman todos los resultados de posicion impar
//Ahora se suman todos los digitos de posicion par
//se suman los dos resultados
//se resta de la decena inmediata superior
//este es el decimo digito
//si la suma nos resulta 10, el decimo digito es cero

if(is_null($strCedula) || empty($strCedula)){//compruebo si que el numero enviado es vacio o null
echo "Por Favor Ingrese la Cedula";
}else{//caso contrario sigo el proceso
if(is_numeric($strCedula)){
$total_caracteres=strlen($strCedula);// se suma el total de caracteres
if($total_caracteres==10){//compruebo que tenga 10 digitos la cedula
$nro_region=substr($strCedula, 0,2);//extraigo los dos primeros caracteres de izq a der
if($nro_region>=1 && $nro_region<=24){// compruebo a que region pertenece esta cedula//
$ult_digito=substr($strCedula, -1,1);//extraigo el ultimo digito de la cedula
//extraigo los valores pares//
$valor2=substr($strCedula, 1, 1);
$valor4=substr($strCedula, 3, 1);
$valor6=substr($strCedula, 5, 1);
$valor8=substr($strCedula, 7, 1);
$suma_pares=($valor2 + $valor4 + $valor6 + $valor8);
//extraigo los valores impares//
$valor1=substr($strCedula, 0, 1);
$valor1=($valor1 * 2);
if($valor1>9){ $valor1=($valor1 - 9); }else{ }
$valor3=substr($strCedula, 2, 1);
$valor3=($valor3 * 2);
if($valor3>9){ $valor3=($valor3 - 9); }else{ }
$valor5=substr($strCedula, 4, 1);
$valor5=($valor5 * 2);
if($valor5>9){ $valor5=($valor5 - 9); }else{ }
$valor7=substr($strCedula, 6, 1);
$valor7=($valor7 * 2);
if($valor7>9){ $valor7=($valor7 - 9); }else{ }
$valor9=substr($strCedula, 8, 1);
$valor9=($valor9 * 2);
if($valor9>9){ $valor9=($valor9 - 9); }else{ }

$suma_impares=($valor1 + $valor3 + $valor5 + $valor7 + $valor9);
$suma=($suma_pares + $suma_impares);
$dis=substr($suma, 0,1);//extraigo el primer numero de la suma
$dis=(($dis + 1)* 10);//luego ese numero lo multiplico x 10, consiguiendo asi la decena inmediata superior
$digito=($dis - $suma);
if($digito==10){ $digito='0'; }else{ }//si la suma nos resulta 10, el decimo digito es cero
if ($digito==$ult_digito){//comparo los digitos final y ultimo
echo "Cedula Correcta";
}else{
echo "Cedula Incorrecta";
}
}else{
echo "Este Nro de Cedula no corresponde a ninguna provincia del ecuador";
}
echo "Es un Numero y tiene el numero correcto de caracteres que es de ".$total_caracteres."
";

}else{
echo "Es un Numero y tiene solo".$total_caracteres;
}
}else{
echo "Esta Cedula no corresponde a un Nro de Cedula de Ecuador";
}
}
}

$accion=$_GET["accion"];
$cedula=validarCI($_GET["cedula"]);

if($accion=="Validar"){

echo $cedula;

}else{

echo "no hay nada";

}

?>

Validacion de Cedula Ecuatoriana
Cedula

Muy interesante! No sabía

Muy interesante! No sabía como funcionaba eso. Aquí les pongo una version en python del mismo código (sin validaciones ni nada):


def cedula_valida(ced):
valores = [ int(ced[x]) * (2 - x % 2) for x in range(9) ]
suma = sum(map(lambda x: x > 9 and x - 9 or x, valores))
return int(ced[9]) == 10 - int(str(suma)[-1:])

http://caih.org

Qué chevere es python e

Imagen de Tonny

Qué chevere es python e compartido tu código en coplec ya que habia una implementación en java de la validación de cedula
sería bueno que comentes el algoritmo para que lo entiendan.

http://www.coplec.org/?q=2010/06/26/validador-de-c%C3%A9dula-ecuatoriana-en-python

Aquí está el código

Aquí está el código explicado:


def cedula_valida(ced):

valores = [ # variable que contiene un arreglo de los dígitos de la cédula
int(ced[x]) # tomamos el dígito x y lo convertimos a entero
* (2 - x % 2) # lo multiplicamos por 2 si es impar o por 1 si es par
for x in range(9) ] # se aplica solo a los primeros 9 dígitos
# esto es equivalente a: [ ced[0] * 2, ced[1], ced[2] * 2, ..., ced[8] * 2 ]

suma = sum( # La suma de los dígitos
map(lambda x: x > 9 and x - 9 or x, # a cada dígito vamos a aplicar esta función
valores)) # que resta 9 si el dígito es mayor a 9

return (int(ced[9])
== 10 - # Restar de 10 el último dígito de la suma
int(str(suma)[-1:])) # Primero convertir la suma a string, tomar el
# último caracter y convertirlo de vuelta a entero

Por ejemplo si utilizo la cédula 123456789? como ej estos serían los resultados parciales

valores => [ 2, 2, 6, 4, 10, 6, 14, 8, 18 ]
map(lambda x: x > 9 and x - 9 or x, valores) => [ 2, 2, 6, 4, 1, 6, 5, 8, 9 ]
suma => 43
int(str(suma)[-1:]) => 3
return => 7

En este caso el dígito de verificación sería 7.

http://caih.org