Estimados camaradas linuxeros.
Hace algún tiempo alguien necesitaba un código para validar la cédula, ruc o pasaporte ecuatoriano.
Yo hice un pequeño aporte en javaScript en este enlace.
Ahora adjunto en este mensaje un archivo comprimido en formato zip que se llama "validaCedula.zip.txt", el cual contiene los siguientes archivos:
validaCedulaJS.htm
Simple html que tiene una función en javaScript para validar y probar un número ingresado. Al ejecutarlo se carga el programa. Si desean ver el fuente abran el archivo con un editor de texto. Este formato es útil para mis estimados linuxeros programadores html, php, perl, cgi, etc.
validaCedulaVB.txt
Procedimiento en Visual Basic (para los que aún siguen en el lado oscuro), para que lo peguen en su código y ojalá algún día prueben otras cosas (software libre), con todo el debido respeto del caso. Alguna vez yo programaba en fox y ya saben sobre que OS, jeje.
validaCedulaJava.txt
Ejemplo sencillo de una clase del tipo swing (J2SE) que invoca a un método para validar el número ingresado que se dispara por medio de un oyente o listener. El usuario debe ajustar este fragmento a su código. Además el txtRuc (JTextField) debe ser agregado a un componente.
validaCedulaPhp.txt
Implementación en php del validador. En este archivo encontrarán tres funciones que validan la cédula, el ruc y el pasaporte respectivamente. Muchas gracias a Eduardo Jordán G. por la conversión al lenguaje php. Seguro que muchos programadores en php también se lo agradecerán.
Por favor colegas, descarguen el archivo y cambien la extensión a (.zip) ya que está actualmente como (.zip.txt) desde este enlace (ejecuten "grabar como" o "save as" para guardar el archivo en su pc).
Con mucha alegría en mi corazón comparto este pequeño trabajo, como programador que soy, y espero ayudar en algo a la comunidad de software libre que es muy útil, del cual he aprendido mucho y seguiré aprendiendo.
Saludos cordiales desde Guayaquil/Manta-Ecuador
28 mar 2007
Validación de cédula, ruc y pasaporte ecuatorianos 2da. parte
Publicado por
Carlos Julio
en
7:34
40
comentarios
ESCRIBE AQUI TU COMENTARIO
Etiquetas: ciencia y tecnología
Suscribirse a:
Enviar comentarios (Atom)
40 comentarios:
buena loco me sirvio la bola tus validaciones
Ismael
De nada compadre.
Saludos y gracias por escribir
Hola yo tengo un problema necesito q antes de que digite el numero de documento haya elegido desde un select el tipo ya sea cedula, ruc o pasaporte; me explico si elijo cedula me llame a esa validacion y asi sucesivamente pero no logro conseguir eso si me puedes ayudar en eso porfa mi mail es bombon2482@hotmail.com
Un de estos dias te voy a pasar todas las validaciones de cedula, ruc pasaporte hechas en Oracle, para hacerte un aporte, ojala y te sirvan
Gracias Anónimo.
El aporte tuyo en oracle sería muy bueno.
Muchas gracias por visitar y por el interés.
Bendiciones.
Muy buenas, te escribo desde España, al otro ladito del charco ya ves... Aunque no soy Ecuatoriano, sino Español, me encanta ver como Linux avanza en la comunidad Ibero-Americana. Necesitaria me remitieras, sino te es molestia el codigo de comprobación a mi e-mail (jmpg73@hotmail.com). Pues me encuentro desarrollando para unos amigos Ecuatorianos unos aplicativos hechos en Gambas2.
Saludos
Gracias pana nos ayudó un montón
Especialmente lo del RUC
Muy bien pana por publicar esas validaciones... la verdad que sirven de mucho... Muchas gracias.
Hola una observación segun las nuevs versiones del SRI los ultimos digitos validadores no son estaticos 001 o 0001 como pones en la solucion y eso te puede generar un error.
hola amigo..gracias igual por esos aportes..sirven de mucho,...ahora tengo una inquietud he visto no se si tu es la persona q tienes estas mismas validaciones en oracle..si puedes publicarlos te argadeceria muchisimo..o si sabes de quien pueda facilitar si...un abrazo y felicitaciones de nuevo espero tu pronta respuesta..
pd. por cierto dejo mi mail si por alguien puede ayudar...
angeluz.arkanus.eptc@gmail.com
Saludos Angeluz.arkanus
La validación que necesitas está en la versión de Java que está en el archivo comprimido.
Solo ajústala a tus controles de oracle y listo.
Saludos cordiales.
Gracias por tu aporte; realmente me ha salvado en este momento que necesito que todo funcione perfectamente.
En realidad, es un gran aporte el que ha hecho y espero que sigas haciendolo; porque ayudas mucho a la comunidad.
Gracias cerberox
A las órdenes
Saludos cordiales
hola amigo...gracias por tu contestacion...pero ahora lo que pasa es que no me funciona no se en que este fallando no se si podrias por favor mas o menos explicarme detallado de como poder acoplarlo o si tu me puedes enviar el codigo ya acoplado a Oracle especialmente para la version 6i.....gracias de antemano por tu atencion prestada
super bueno tu aporte... esas personas se necesitan el mundo de la programacion.
Gracias
Gracias amigo
Hace unos años que buscaba esto solo encontraba de otros países, tu aporte me sirve de mucho
gracias... creo que resume el sentimiento de esta comunidad libre que comparte.. Acciones como la de compartir el codigo es lo que a nuestro pais hace grande
GRACIAS DOCTOR ME SALVASTE.. TE DEBO UNA DE TROPICO GRANDE JEJE
Excelente maestro, muchísimas gracias por la validación
Gracias Humberto y Alejandro por sus palabras.
Es un gusto aportar con un granito de arena al menos...
Saludos cordiales.
GRACIAS MIL GRACIAS MAÑANA DEFIENDO MI TESIS Y ME FALTABA ESTA VALIDACION FUNCIONO DE PELICULA
NUEVAMENTE GRACIAS..
De nada viejo.
Saludos cordiales.
Me puedes ayudar, esq necesito que me expliques como le hago funcionar el validador de la cedula en php, osea para que me salga en el navegador, y poder introducir la cedula, te agradecería, gracias...
Hola anónimo 06/09/2010 17:51:00
Aquí mismo está la versión en PHP que otra hizo basándose en mi código.
Ajústala a tu código y listo. Puedes guiarte en la versión JavaScript que también está en este enlace.
Suerte.
Gracias brother, una ayuda inmensa para un apuro...
De nada compadre.
¡Qué bueno que te haya servido!
Saludos cordiales
hola Carlos Julio....te cuento q me estoy me familiarisanado con esto.....pero me gustaria q me expliques xq pones Me.txtcampos(6).....y xq no declaras los c1...etc... y los p1...etc... te agradeceria si me explicaras....gracias...
Excelente Aporte pana!
me fallaban algunos RUCs hasta que aplique tu Rutina
(por basarme en la pagina del SRI, parece que estaba incompleto)
Gracias MIL !!!
PD. Sería bueno que resaltaras el link, casi no se nota (Acostumbrado a ver LETROTAS)
Carlos Julio
Esta es la version del validador para Borland C++. Gracias por publicar tu código. Y si deseas publicar lo mío puedes hacerlo
bool TDMInventario::validaCedRUC(AnsiString documento)
{
bool valor = true;
try {
int suma = 0;
int residuo = 0;
bool privada = false;
bool publica = false;
bool natural = false;
int numeroProvincias = 24;
int digitoVerificador = 0;
int modulo = 11;
int d1, d2, d3, d4, d5, d6, d7, d8, d9, d10;
int p1, p2, p3, p4, p5, p6, p7, p8, p9;
d1 = d2 = d3 = d4 = d5 = d6 = d7 = d8 = d9 = d10 = 0;
p1 = p2 = p3 = p4 = p5 = p6 = p7 = p8 = p9 = 0;
if (documento.Length() < 10) {
valor = false;
}
// Los primeros dos digitos corresponden al codigo de la provincia
int provincia = StrToInt(documento.SubString(0, 2));
if (provincia <= 0 || provincia > numeroProvincias) {
valor = false;
}
// Aqui almacenamos los digitos de la cedula en variables.
d1 = StrToInt(documento.SubString(1,1));
d2 = StrToInt(documento.SubString(2,1));
d3 = StrToInt(documento.SubString(3,1));
d4 = StrToInt(documento.SubString(4,1));
d5 = StrToInt(documento.SubString(5,1));
d6 = StrToInt(documento.SubString(6,1));
d7 = StrToInt(documento.SubString(7,1));
d8 = StrToInt(documento.SubString(8,1));
d9 = StrToInt(documento.SubString(9,1));
d10 = StrToInt(documento.SubString(10,1));
// El tercer digito es:
// 9 para sociedades privadas y extranjeros
// 6 para sociedades publicas
// menor que 6 (0,1,2,3,4,5) para personas naturales
if (d3 == 7 || d3 == 8) {
valor = false;
}
// Solo para personas naturales (modulo 10)
if (d3 < 6) {
natural = true;
modulo = 10;
p1 = d1 * 2;
if (p1 >= 10)
p1 -= 9;
p2 = d2 * 1;
if (p2 >= 10)
p2 -= 9;
p3 = d3 * 2;
if (p3 >= 10)
p3 -= 9;
p4 = d4 * 1;
if (p4 >= 10)
p4 -= 9;
p5 = d5 * 2;
if (p5 >= 10)
p5 -= 9;
p6 = d6 * 1;
if (p6 >= 10)
p6 -= 9;
p7 = d7 * 2;
if (p7 >= 10)
p7 -= 9;
p8 = d8 * 1;
if (p8 >= 10)
p8 -= 9;
p9 = d9 * 2;
if (p9 >= 10)
p9 -= 9;
}
// Solo para sociedades publicas (modulo 11)
// Aqui el digito verficador esta en la posicion 9, en las otras 2
// en la pos. 10
if (d3 == 6) {
publica = true;
p1 = d1 * 3;
p2 = d2 * 2;
p3 = d3 * 7;
p4 = d4 * 6;
p5 = d5 * 5;
p6 = d6 * 4;
p7 = d7 * 3;
p8 = d8 * 2;
p9 = 0;
}
/* Solo para entidades privadas (modulo 11) */
if (d3 == 9) {
privada = true;
p1 = d1 * 4;
p2 = d2 * 3;
p3 = d3 * 2;
p4 = d4 * 7;
p5 = d5 * 6;
p6 = d6 * 5;
p7 = d7 * 4;
p8 = d8 * 3;
p9 = d9 * 2;
}
suma = p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9;
residuo = suma % modulo;
// Si residuo=0, dig.ver.=0, caso contrario 10 - residuo
digitoVerificador = residuo == 0 ? 0 : modulo - residuo;
int longitud = documento.Length(); // Longitud del string
// ahora comparamos el elemento de la posicion 10 con el dig. ver.
if (publica ) {
if (digitoVerificador != d9) {
valor = false;
}
/* El ruc de las empresas del sector publico terminan con 0001 */
if (documento.SubString(10, 4)!="0001") {
valor = false;
}
}
if (privada ) {
if (digitoVerificador != d10) {
valor = false;
}
if (documento.SubString(11, 3)!="001") {
valor = false;
}
}
if (natural ) {
if (digitoVerificador != d10) {
valor = false;
}
if (documento.Length() > 10
&& documento.SubString(11, 3)!="001")
{
valor = false;
}
}
} catch (Exception *e) {
valor = false;
}
return valor;
}
Gracias Diego por tu aporte.
En cuanto pueda, lo incluyo en el zip y lo publico en Ecualug.
Saludos cordiales.
Nunca entenderé por qué los programadores novatos hacen códigos como:
return ($intVerificador == $intUltimo? TRUE: FALSE);
Esto significa "evalua la expresión y si el resultado es true, retorna true y si es false retorna false.
entonces por qué no simplemente hacer lo lógico:
return ($intVerificador == $intUltimo);
Hola Fraddy
Gracias por comentar.
Aunque este no es un espacio dedicado a temas de desarrollo ni a buenas prácticas de programación me permito comentar acerca de tu punto.
El tipo de dato primitivo de varios lenguajes varían bastante. En Java es "true/false", en VB es "True/False", en C cero es falso y diferente de cero es verdadero, etc.
Así que el resultado de un boolean esperado no es tan trivial ya que éste varía en cada lenguaje. Luego, habría que analizar si el código que pones como ejemplo en realidad da verdadero solamente con la ayuda del operador "==".
Saludos cordiales.
Excelente trabajo....! servio de mucho, gracias.
SAludos, alguien tiene el codigo para validar el Pasaporte Ecuatoriano, ya que en este foro dice que eso esta en el archivo validaCedulaPhp.txt pero lo baje y solo contiene para validar la cedula y ruc, no veo por ningun lado para validar el pasaporte..si alguien lo tiene q lo comparta por favor este es mi mail celopuma@yahoo.com desde ya gracias....
Hola carlos julio por fa si me puedes ayudar con el codigo para php del validador de cedula y ruc o si me puedes axplicar un poco el codigo q lo tienes publ en ecualug por q ai sta en javascrip por fa mi mail es kapo.kato@gmail.com
Hola Sydderf
El código en PHP no lo hice yo, pero está claramente legible.
Saludos.
Gracias por los aportes de las validaciones.. modifique el de la cedula en php por ciertas correciones espero que sirva
public function validarCI($strCedula)
{
$suma = 0;
$strOriginal = $strCedula;
$intProvincia = substr($strCedula,0,2);
$intTercero = substr($strCedula,2,1);//$strCedula[2];
$intUltimo = substr($strCedula,8,1);//$strCedula[9];
if (! settype($strCedula,"float")) return FALSE;
if (strlen($str) != 10) return FALSE;
if ((int) $intProvincia < 1 || (int) $intProvincia > 24) return FALSE;
if ((int) $intTercero > 6 ) return FALSE;
for($indice = 0; $indice < 9; $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;
break;
case 1:
case 3:
case 5:
case 7:
$arrProducto[$indice] = $strOriginal[$indice] * 1;
if ($arrProducto[$indice] >= 10) $arrProducto[$indice] -= 9;
break;
}
}
foreach($arrProducto as $indice => $producto) $suma += $producto;
$residuo = $suma % 10;
$intVerificador = $residuo==0 ? 0: 10 - $residuo;
return ($intVerificador == $intUltimo? TRUE: FALSE);
}
Carlos Julio, me tomé el atrevimiento de añadir un par de líneas que creí faltaban, así como una pequeñísima validación. Espero sirva a quienes buscan validar para VB .Net
Actualización
Gracias buen aporte
Excelente para validar la cedula y el RUC en PHP, felicitaciones me srivio mucho. Saludos
Publicar un comentario