Validación de Cedula de Ecuador

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."<br>";
           
       
        }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



Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

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

Imagen de Tonny

Qué chevere es python e

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

Imagen de Tonny

Chévere, gracias por la

Chévere, gracias por la velocidad de respuesta!

Saludos.