Hace algún tiempo estuve buscando algo sobre la verificación de este tipo de identificacion pero encontré ciertas implementaciones no óptimas y por eso decidí investigar como se lo hacia manualmente, el proceso es el siguiente:
- La cedula ecuatoriana está formada por los dos primeros dígitos que corresponden a la provincia donde fue expedida, por lo cual los dos primeros números no será mayor a 24 ni menor a 1.
- El tercer digito es un número menor a 6 (0, 1, 2, 3, 4, 5).
- Los siguientes hasta el noveno digito son un número consecutivo.
- Y el décimo digito es el digito verificador.
Los coeficientes usados para verificar el décimo dígito de la cédula, mediante el algoritmo “Módulo 10”
COEFICIENTES = 2.1.2.1.2.1.2.1.2
C#:
Visual Studio 2010 framework 4.0
JAVA: Neetbeans 7.0
Muchas gracias, me sirvio mucho, justo lo que necesitaba, con exepcion del codigo de ruc publico, no valida correctamente, pero lo demas muy bueno, gracias
ResponderEliminarMe da gusto que te haya servido !!!
EliminarEl codigo de ruc publico lo voy a revisar
Hola, tal vez te sirva mi artículo donde detallo los tipos de RUC y sus diferencias, junto con ejemplos personalizados e implementaciones en otros lenguajes, está en https://www.jybaro.com/blog/cedula-de-identidad-ecuatoriana/
EliminarBuenas necesito ayuda para realizar un código en phyton
EliminarLa más didactica de explicaciones. Gracias !
ResponderEliminarMuy bueno tu aporte, les dejo el enlace del documento directo del SRI donde indica los pasos para la verificacion de la cedula, ruc, juridico, publico y persona natural
ResponderEliminarhttp://www.sri.gob.ec/DocumentosAlfrescoPortlet/descargar/11a5917c-ea28-46f8-bb19-3737bf6cd07b/Estructura+del+RUC.doc
esto es lo q he estado necesitando,,, me gustaria q me ayuden..porq me sale error: no todas las rutas de codigo devuelven un valor
ResponderEliminar---public bool VerificaCedula(string ced)----
Podrian ayudarme con el codigo en javascript?
ResponderEliminarSi alguien necesita en Filemaker el Algoritmo de Verificacion de Cedula Ecuatoriana:
ResponderEliminarLet ( [
digitos = Length ( Cedula_ID ) ;
provincia = Left ( Cedula_ID ; 2 ) ;
tercer_digito = Middle ( Cedula_ID ; 3 ; 1 ) ;
ult_digito = Right ( Cedula_ID ; 1 ) ;
digito_verificador = Let ( [ suma_digitos = Let ( [
suma_pares = Let ( [ digito2 = Middle ( Cedula_ID ; 2 ; 1 ) ;
digito4 = Middle ( Cedula_ID ; 4 ; 1 ) ;
digito6 = Middle ( Cedula_ID ; 6 ; 1 ) ;
digito8 = Middle ( Cedula_ID ; 8 ; 1 ) ] ; Sum ( digito2 ; digito4 ; digito6 ; digito8 )
) ;
suma_impares = Let ( [ digito1 = If ( 2 * Middle ( Cedula_ID ; 1 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 1 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 1 ; 1 ) ) ;
digito3 = If ( 2 * Middle ( Cedula_ID ; 3 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 3 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 3 ; 1 ) ) ;
digito5 = If ( 2 * Middle ( Cedula_ID ; 5 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 5 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 5 ; 1 ) ) ;
digito7 = If ( 2 * Middle ( Cedula_ID ; 7 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 7 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 7 ; 1 ) ) ;
digito9 = If ( 2 * Middle ( Cedula_ID ; 9 ; 1 ) > 9 ; 2 * Middle ( Cedula_ID ; 9 ; 1 ) - 9 ; 2 * Middle ( Cedula_ID ; 9 ; 1 ) ) ] ; Sum ( digito1 ; digito3 ; digito5 ; digito7 ; digito9 )
)
] ; Sum ( suma_pares ; suma_impares ) )
] ; If ( ( 1 + Left ( suma de pares e impares ; 1 ) ) * 10 - suma de pares e impares = 10 ; 0 ; ( 1 + Left ( suma de pares e impares ; 1 ) ) * 10 - suma de pares e impares ) )
] ; digitos = 10 and provincia ≥ 1 and provincia ≤ 24 and tercer_digito ≥ 0 and tercer_digito ≤ 5 and ult_digito = digito_verificador
)
Este comentario ha sido eliminado por el autor.
ResponderEliminarEstimado, tienes talvez ya con la validación del RUC publico??
ResponderEliminarGracias tu ayuda.
https://programacionecuador.blogspot.com/2017/12/voy-ir-al-grano-aquiles-dejo-el.html
EliminarEl algoritmo no funciona cuando la suma de todos los resultados es menor de 10. Ejemplo con la cedula 0202016051.
ResponderEliminarEn este caso el dígito verificador es 1 pero el calculado es 9.
Usar ese calculo (c#):
var digitoVerificadorObtenido = (total % 10) != 0 ? 10 - (total % 10) : 0;
es por que tu cedula esta mal, no es correcta. A partir del 4to digito:
Eliminar"Los siguientes hasta el noveno digito son un número consecutivo."
Pon una cédula correcta.
La cédula esta bien, la suma de los dígitos da 9, la siguiente decena es 10 y 10-9=1 que es el dígito verificador, cuando se dice que desde el cuarto dígito al noveno son consecutivos se refiere a que el registro civil asigna estos dígitos de forma consecutiva.
EliminarLa cédula esta bien, la suma de los dígitos da 9, la siguiente decena es 10 y 10-9=1 que es el dígito verificador, cuando se dice que desde el cuarto dígito al noveno son consecutivos se refiere a que el registro civil asigna estos dígitos de forma consecutiva.
Eliminarmi amigo pedro tiene razón la cédula si es correcta yo ya la comprobé en mi verificador.
Eliminarque acabe de crear.
;)
ResponderEliminarme da un error en netbeans de "no main class found"
ResponderEliminaralguien me ayuda porfavor
pero en visual basic 6.0 como es eso
ResponderEliminarmuy buenA LA EXPLICACION
ResponderEliminarMe puedes decir qué algoritmo se usaría para este RUC: 0960036879001, es el ruc de una persona natural extranjera.
ResponderEliminarYo hice este ojala y les sirva es para los tres tipos de cedula. C#
ResponderEliminarpublic bool validacedula(string cedula)
{
int numv = 10;
int div = 11;
int[] coeficientes;
if (int.Parse(cedula[2].ToString()) < 6) { coeficientes = new int[] { 2, 1, 2, 1, 2, 1, 2, 1, 2 }; div = 10; }
else
{
if (int.Parse(cedula[2].ToString()) == 6)
{
coeficientes = new int[] { 3, 2, 7, 6, 5, 4, 3, 2 };
numv = 9;
}
else coeficientes = new int[] { 4, 3, 2, 7, 6, 5, 4, 3, 2 };
}
int total = 0;
int numprovincia = 24;
int calculo = 0;
cedula = cedula.Replace("-", "");
char[] valores = cedula.ToCharArray(0,9);
if (((Convert.ToInt16(valores[2].ToString()) <= 6) || (Convert.ToInt16(valores[2].ToString()) == 9)) && (Convert.ToInt16(cedula.Substring(0, 2)) <= numprovincia))
{
for (int i = 0; i < numv-1; i++)
{
calculo = (Convert.ToInt16(valores[i].ToString())) * coeficientes[i];
if (div==10) total +=calculo>9?calculo-9:calculo;
else total +=calculo;
}
return (div-(total % div)) >=10? 0==Convert.ToInt16(cedula[numv-1].ToString()):(div-(total % div)) == Convert.ToInt16(cedula[numv-1].ToString());
}
else return false;
}
Este comentario ha sido eliminado por el autor.
Eliminarnecesito esto en sql por favor
Eliminaralguien lo tiene en sql?
EliminarMuy Útil. gracias por el post!
ResponderEliminarMuy útil, será que me puedes ayudar con el código para Acess 2013
ResponderEliminarMis correos:alfaro_contador@hotmail.com o al cfalfarog@gmail.com
ResponderEliminarpodria ser realizado en python..??...seria de muchisima ayuda
ResponderEliminarhola me guwsto mucho tu explicaicon me ayudo bastante pero te tengo una pregunta a aver si me puedes ayudar... yo estoy desarrollado el softwar en visual basic 6.o y estoy usando la funcion mid.... sabes por que cuando la cedula empieza con el numero 0 este metodo no vale
ResponderEliminarHay algún dígito que diga si la cédula pertenece a un extranjero residente o a un ciudadano??
ResponderEliminarHay algún dígito que diga si la cédula pertenece a un extranjero residente o a un ciudadano??
ResponderEliminarvale verga :) cristo te ama
ResponderEliminarhola me podrias ayudar para hacerlo en dfd :(
ResponderEliminarGracias por la detallada explicación de cómo validar la cédula, las imágenes son muy claras en el algoritmo y me ha servido de ayuda para un artículo donde detallo un poco más y pongo ejemplos personalizados, si pudieras pasar y comentar cualquier cosa sería genial! Está en https://www.jybaro.com/blog/cedula-de-identidad-ecuatoriana/
ResponderEliminarFue entretenido ggggg...
ResponderEliminarhttps://1drv.ms/u/s!AjSEk3eeQ5-ynQYEPdLhADUfJVr8
By:
Li0nle0
Este es exactamente el código c# del post pero en formtado texto, para que sea facil copiar y pegar. Ojo no tiene la mejora mencioanda por Anónimo17 de octubre de 2014, 9:51.
ResponderEliminarpublic static bool VerificaCdedula(string ced)
{
int isNumeric;
var total = 0;
const int tamanoLongitudCedula = 10;
int[] coeficientes = { 2,1,2,1,2,1,2,1,2};
const int numeroProvincias = 24;
const int tercerDigito = 6;
if (int.TryParse(ced, out isNumeric) && ced.Length == tamanoLongitudCedula)
{
var provincia = Convert.ToInt32(string.Concat(ced[0], ced[1], string.Empty));
var digitoTres = Convert.ToInt32(ced[2]+string.Empty);
if ((provincia > 0 && provincia <= numeroProvincias) && digitoTres < tercerDigito)
{
var digitoVerificadorRecibido = Convert.ToInt32(ced[9] + string.Empty);
for (int k = 0; k < coeficientes.Length; k++)
{
var valor = Convert.ToInt32(coeficientes[k] + string.Empty) *
Convert.ToInt32(ced[k] + string.Empty);
total = valor > 10 ? total + (valor - 9) : total + valor;
}
var digitoVerificadorObtenido = total >= 10 ? (total % 10) != 0 ?
10 - (total % 10) : (total % 10) : total;
return digitoVerificadorObtenido == digitoVerificadorRecibido;
}
return false;
}
return false;
}
Si es que alguien lo requiere en PHP esta sería la alternativa:
ResponderEliminarApelando a la funcion validarCI('numero_de_cedula') se reciben los valores true o false dependiendo de si cumple o no con las reglas de validación.
function validarCI($strCedula)
{
if(strlen($strCedula)<10){
return false;
}
if(strlen($strCedula)>10){
return false;
}
$suma = 0;
$strOriginal = $strCedula;
$intProvincia = substr($strCedula,0,2);
$intTercero = $strCedula[2];
$intUltimo = $strCedula[9];
if (! settype($strCedula,"float")) return FALSE;
if ((int) $intProvincia < 1 || (int) $intProvincia > 23) return FALSE;
if ((int) $intTercero == 7 || (int) $intTercero == 8) return FALSE;
for($indice = 0; $indice < 9; $indice++) {
//echo $strOriginal[$indice],'';
switch($indice) {
case 0:
case 2:
case 4:
case 6:
case 8:
$arrProducto[$indice] = $strOriginal[$indice] * 2;
if ($arrProducto[$indice] >= 10) $arrProducto[$indice] -= 9;
//echo $arrProducto[$indice],'';
break;
case 1:
case 3:
case 5:
case 7:
$arrProducto[$indice] = $strOriginal[$indice] * 1;
if ($arrProducto[$indice] >= 10) $arrProducto[$indice] -= 9;
//echo $arrProducto[$indice],'';
break;
}
}
foreach($arrProducto as $indice => $producto) $suma += $producto;
$residuo = $suma % 10;
$intVerificador = $residuo==0 ? 0: 10 - $residuo;
return ($intVerificador == $intUltimo? TRUE: FALSE);
}
Para PHP, cómo le agrego la opción de "consumidor final" con el numero de cédula 9999999999 ???
Eliminargracias.
En Netbeans me slae un error "class"validación de cédula" does not have a main method" ayuda por favor
ResponderEliminarhola amigo el articulo es muy bueno y quisiera saver si puedo correrlo en dev c++ y que bibliotecas o librerias necesito para que me corra el programa
ResponderEliminardisculpa si me puedes ayudar con la cedula de ciudadania pero con vectores
ResponderEliminarHola que tal me podrian ayudar con la programacion de la cedula en html se les agracede
ResponderEliminarMi cédula tiene en el tercer digito el número 6 y aquí se dice que es un número entre 0 y 5, será por eso que no me puedo registras en ninguna página, pués dice número de cédula no válido
ResponderEliminarHola que tal me podrian ayudar con la programacion de la cedula en c++ se les agracede
ResponderEliminarla necesito tabn en c++ :(
EliminarEsta mal el de la cédula porque el dígito 3 si puede ser 6 osea (0,1,2,3,4,5,6), me dio error por esta cédula 0961279247 que si esta verificada como valida en la pagina del registro civil
ResponderEliminarcomo lo solucionaste?
EliminarCon esta cédula no funciona 1756661391
ResponderEliminares porque esa cedula es de un ciudadano extranjero, y tiene el digito 6
Eliminardisculpa que le puedo modificar al codigo para que me funcione cuando es extranjero
EliminarPodrían actualizar el algoritmo?
ResponderEliminarAlguien me puede ayudar realizando este mismo ejercicio pero en c++
ResponderEliminar...
alguien lo tiene hecho en Visual.NET
ResponderEliminaralguien sabe como en la cedula saber la fecha de nacimiento
ResponderEliminarGracias por el aporte. me servio de mucho
ResponderEliminarTalvez en python
ResponderEliminarMe podrían ayudar con el código en Pseint
ResponderEliminar