Dígito verificador de la cédula


Hola, el otro día estaba buscando un código en javascript para comprobar el último dígito de la cédula de identidad (Ecuador), pero no lo encontré, así que decidí hacerlo yo mismo, es bastante simple, ojalá les sirva …

Este es el codigo javascript:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function check_cedula( form )
{
  var cedula = form.cedula.value;
  array = cedula.split( "" );
  num = array.length;
  if ( num == 10 )
  {
    total = 0;
    digito = (array[9]*1);
    for( i=0; i < (num-1); i++ )
    {
      mult = 0;
      if ( ( i%2 ) != 0 ) {
        total = total + ( array[i] * 1 );
      }
      else
      {
        mult = array[i] * 2;
        if ( mult > 9 )
          total = total + ( mult - 9 );
        else
          total = total + mult;
      }
    }
    decena = total / 10;
    decena = Math.floor( decena );
    decena = ( decena + 1 ) * 10;
    final = ( decena - total );
    if ( ( final == 10 && digito == 0 ) || ( final == digito ) ) {
      alert( "La c\xe9dula ES v\xe1lida!!!" );
      return true;
    }
    else
    {
      alert( "La c\xe9dula NO es v\xe1lida!!!" );
      return false;
    }
  }
  else
  {
    alert("La c\xe9dula no puede tener menos de 10 d\xedgitos");
    return false;
  }
}

Ejemplo de uso:

<form method="post">
  Cedula:
<input name="cedula" type="text" />
<input name="send" type="submit" value="Validar" onClick="return check_cedula(this.form);" />
</form>

El campo de la cédula se debe llamar exactamente así: “cedula”, si se quiere se puede modificar el código javascript para que reciba un campo “X”, pero eso queda para cada uno …

Saludos

  1. #1 por Raul - Mayo 30th, 2007 a las 15:53

    Tu procedimiento no funciona tiene un error de objeto no valido te recomiendo que la revises.

  2. #2 por don pool - Mayo 30th, 2007 a las 21:08

    Hola Raul,

    Aparentemente el problema estaba en las líneas 11, 19 y 29:

    11 for( i=0; i&lt; (num-1); i++ )
    19 if ( mult &gt; 9 )
    29 if ( ( final == 10 &amp;&amp; digito == 0 ) || ( final == digito ) )

    donde parece que el parser del blog convirtíó los símbolos < , > y && por las secuencias de escape &lt;, &gt; y &amp;&amp; respectivamente!

    He corregido la sintaxis errónea y seguro con eso corre el código!

    Gracias por visitar el weBlog … si estás interesado en contribuir, eres bienvenido!

    Salu2
    Paul

  3. #3 por Anita - Noviembre 1st, 2007 a las 12:42

    Hola, funciona, funciona… si vale todo :) gracias por tu ayuda.

  4. #4 por don pool - Noviembre 1st, 2007 a las 13:26

    Qué bueno Anita que te haya servido…

    Gracias por visitar el weBlog … si estás interesada en contribuir, eres bienvenida!

  5. #5 por Alexis - Junio 26th, 2008 a las 16:22

    Gracias parse, la verda hice el código en asp pero me dio pereza transformar a js. Por suerte existe el internet!

  6. #6 por Coral - Septiembre 16th, 2008 a las 20:22

    Hola.. por fa, podrian hacer el mismo programita, pero para visual basic .net 2003?? ayuda por fis

  7. #7 por don pool - Septiembre 19th, 2008 a las 10:41

    Desgraciadamente no trabajo con .Net, me oriento hacia la tecnología de Software Libre, sin embargo, el código es bastante genérico (y dado que es JS está basado en C) y estoy seguro que lo podrías transformar fácilmente a cualquier lenguaje!

    Salu2
    paul

  8. #8 por Victor - Diciembre 30th, 2008 a las 18:22

    Hola, sabes que recientemente fui alumno tuyo, y para mi sorpresa he ingresado a ésta página hace como unos 6 meses, mucho tiempo antes del curso, que curioso, no? Lo que hace Google, necesité ése código alguna vez y ahora lo necesito de nuevo para un trabajo, ahí te va una imagen de mis favoritos:

    http://img216.imageshack.us/my.php?image=imagen3xx2.jpg

    Saludos,

  9. #9 por Homero - Enero 10th, 2009 a las 16:48

    Hola un super favor… necesito la programacion de este programa “DIGITO VERIFICADOR” pero en el programa Visual Fox con formularios…Agradeceria si me ayudan

  10. #10 por don pool - Enero 16th, 2009 a las 16:35

    Hola Víctor,

    Sí, la verdad que el mundo es cada vez más pequeño [y caliente ;) ]… Es un aliento el saber que de algo le sirve a los demás las soluciones nuestras!!!

    Un abrazo!

  11. #11 por don pool - Enero 16th, 2009 a las 16:36

    Desgraciadamente Homero no tenemos ni la más mínima experiencia en Visual Fox, y como lo decía en un post anterior: “el código es bastante genérico (y dado que es JS está basado en C) y estoy seguro que lo podrías transformar fácilmente a cualquier lenguaje!” …

    Mucha Suerte

  12. #12 por MILTON - Abril 26th, 2009 a las 13:59

    amigo programador me puedes ayudar enviandome en lenguaje c este codigo de verificacion gracias

  13. #13 por don pool - Abril 27th, 2009 a las 11:16

    El JavaScript es uno de los tantos hijos de C, así que pienso que no sea muy difícil convertirlo a C, quizá un par de declaraciones de variables… Por ahora estoy hiper ocupado en un proyecto, por lo que no me queda tiempo para mucho más que responderte! …

  14. #14 por JOFFRE PILCO - Abril 27th, 2009 a las 19:02

    Talvez me puedes dar el codigo de validacion de la cedula para c++ , pero con punteros.

  15. #15 por don pool - Mayo 2nd, 2009 a las 15:35

    Estoy seguro de que basándote en mi código de JavaScript, podrás desarrollar tu solución C++ con punteros! Hace muchísimo tiempo que no programo en C / c++ por lo que sería una tarea de recordaaaaar antes de implementar!

  16. #16 por Fernando - Mayo 25th, 2009 a las 11:47

    Se agradece la ayuda, mejor ubieses puesto el algoritmo para que lo hagan en cualquier lenguaje, pero repito buen aporte no sabia el algortimo pero de tu progra lo saco

  17. #17 por don pool - Mayo 27th, 2009 a las 15:50

    ¡ Esa es la manera ! … basarse en lo que está hecho para adaptar tu propia solución. Sin embargo tu sugerencia es buena! veré si tengo un tiempito para poner el algoritmo!

  18. #18 por German David de la Rosa fabra - Junio 5th, 2009 a las 10:17

    cedula requerida

  19. #19 por gustavo - Agosto 19th, 2009 a las 08:27

    hola que tal me podrias explicar para como llamo a la funcion check_cedula( form ) y que es form por favor ayuda

  20. #20 por don pool - Agosto 20th, 2009 a las 13:54

    Hola Gustavo,

    He modificado el código de la parte inferio (el formulario) para permitir que se ejecute el método de check_cedula() al momento de hacer clic en enviar… En resumen, si la función devuelve true, el botón enviar funcionará, caso contrario no.

    Por otro lado, form es el nombre de la variable que recibe la función y que representaría el formulario que contiene el campo de nombre “cedula” a ser verificado. Al enviar el dato en el botón de submit, se referencia a this.form que representa: this=el botón y form=el formulario al cual pertenece el botón (this).

    Espero haber podido aclarar tu duda!

    Un abrazo!
    paul

  21. #21 por David - Octubre 15th, 2009 a las 23:50

    No se si me pueda ayudar… lo que pasa es que me enviaron ah hacer un trabajo de comunicacion… en enviaron a ver la tasa de BER de una BPSK que esta con ruido colorido o con el canal de Rayleigh… ya tengo la mayor parte aplicando el canal de Rayleigh pero no podemos utilizar equalizacion… que puedo utilizar en vez de eso??

  22. #22 por evelyn - Octubre 19th, 2009 a las 18:56

    hola mira la verdad no se si funciona con todo muchas gracias pero quiero saber si lo puedes hacer para visual basic 6.0 por favor mil gracias

  23. #23 por don pool - Octubre 21st, 2009 a las 12:08

    Hola David, bueno, la verdad no quisiera parecer ignorante, pero no tengo idea de lo que me hablas, quizá equivocaste el lugar donde formular tu pregunta! desde ya SUERTE con tu requerimiento!

  24. #24 por don pool - Octubre 21st, 2009 a las 12:14

    Hola Evelyn, como respondí en posts anteriores, realmente no será difícil que adaptes el código a cualquier otro lenguaje! En cuanto tenga un tiempito trataré de publicar aquí el algoritmo para que se les facilite adaptar el código!

  25. #25 por ROCIO - Noviembre 9th, 2009 a las 15:01

    por favor me puedes ayudar porque necesito el digito verificador de la cedula en codigo c
    gracias

  26. #26 por serbala - Noviembre 16th, 2009 a las 18:16

    hola, que tal
    soy nuevo en la programacion y no se como correr ese programa que hiciste me podrias decir como lo veo en ejecucion?

  27. #27 por don pool - Noviembre 17th, 2009 a las 16:16

    Hola Rocío, Si bien alguna vez incluso dí clases de C y C++, ya no recuerdo mucho, me he dedicado a las aplicaciones web. Sin embargo el JavaScript es uno de los tantos descendientes de C, así que creo que no sea muy complicado que transformes el código a C. SUERTE!

  28. #28 por don pool - Noviembre 17th, 2009 a las 16:22

    Hola serbala, en realidad este no es un programa, es una función escrita con JavaScript y está construida con la finalidad de controlar el formato de los números de cédula en los cuadros de texto de un formulario HTML. El artículo indica incluso el código para el formulario para que puedas probarlo!

  29. #29 por Juan Carlos Villavicencio - Diciembre 4th, 2009 a las 12:26

    Compatriotas Ecuatorianos, el codigo dice q la cedula (2222222222) es valida y asi mismo con 3333333333, 4444444444, con 5, con 6, etc. os recomiendo agregar 9 excepciones para que no se burlen de nuesros sitios web.

  30. #30 por don pool - Diciembre 5th, 2009 a las 20:05

    Hola Juan Carlos,

    Por un lado debo indicar que el algoritmo no tiene la capacidad de “validar” la cédula, lo único que hace es aplicar el algoritmo definido por el propio Registro Civil para comprobar si el último dígito del número de cédula proporcionado corresponde con la suma de control calculada en base a los 9 primeros dígitos. Quizá un número aparentemente válido como 0927456384 podría ser igual de inválido (y lo es) que los que mencionas dado que lo que en verdad representaría sería la existencia de una persona a quien se le haya asignado dicho número de cédula y en este ejemplo ninguna persona posee dicho número de cédula.

    Por otro lado, concuerdo en que es más que obvio que los números que indicas no deberían ser aprobados por el algoritmo, es más SÍ, debería agregarse las excepciones a la función tal cual lo sugieres. Sin embargo, debo indicar que luego de las pruebas respectivas (mira/prueba aquí) no son 9 los casos que habría que controlar, sino sólo 5 y son: 0000000000, 2222222222, 4444444444, 5555555555, 7777777777, 9999999999.

    Por último, he decidido dejar el algoritmo tal cual está, con el principal fin de mantenerlo lo más simple posible y evitar al máximo las confusiones al entenderlo por parte de algunos usuarios poco familiarizados con el lenguaje. En reemplazo pongo a continuación el “parche” para quienes deseen “activar” este control adicional:

    Reemplazar la línea 29 por la siguiente:

        if ( ( ( final == 10 && digito == 0 ) || ( final == digito ) ) && ( cedula != '0000000000' && cedula != '2222222222' && cedula != '4444444444' && cedula != '5555555555' && cedula != '7777777777' && cedula != '9999999999' ) ) {

    Gracias por tu observación y Salu2!

  31. #31 por jomrec - Enero 31st, 2010 a las 13:01

    He visto en diferentes foros ,personas solicitando la informacion de como se hace un programa para el digito verificador del rut.
    Lamentablemente a algunos programadores se les a olvidado que tambien alguna vez han sido principiantes y toda la informacion que entregan ,lo hacen pensando en ellos(sin querer) y los que solicitan las consultas quedan marcando ocupados…

    A continuacion les indico como hacer un pequeño programita en visual basic..para validar el rut….

    en un formulario se pegan dos textbox y despues habran el formulario ,pegandole esto:

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    KeyAscii = 0
    If Text1.Text = “” Then Exit Sub
    dv = RutDigito(Text1.Text)
    End If
    End Sub
    Public Function RutDigito(ByVal Rut As Long) As String
    Dim Digito As Integer
    Dim Contador As Integer
    Dim Multiplo As Integer
    Dim Acumulador As Integer

    Contador = 2
    Acumulador = 0
    While Rut 0
    Multiplo = (Rut Mod 10) * Contador
    Acumulador = Acumulador + Multiplo
    Rut = Rut \ 10
    Contador = Contador + 1
    If Contador = 8 Then
    Contador = 2
    End If
    Wend
    Digito = 11 – (Acumulador Mod 11)
    RutDigito = CStr(Digito)
    If Digito = 10 Then RutDigito = “K”
    If Digito = 11 Then RutDigito = “0″
    Text2.Text = RutDigito

    End Function
    y listo….

  32. #32 por don pool - Febrero 1st, 2010 a las 14:48

    Hola jomrec, gracias por tu importante colaboración. Sin embargo hay que notar que tu solución está orientada al cálculo del número del RUT chileno (si no me equivoco) y el artículo original solucionaba el cálculo del dígito verificador de la Cédula de Identidad/Ciudadanía ecuatoriana. Pero de todas formas dejo publicada tu solución para cualquiera que la requiera!

    Salu2
    paul

  33. #33 por Davicho - Mayo 22nd, 2010 a las 12:03

    Estimado amigo,

    Soy nuevo en esto del JavaScript y he creado una pagina con los campos nombre, apellido y cedula pero no se donde poner el codigo de la validacion y como llamarlo, se que se puede guardar eso como archivo.js para luego llamarlo y q se haga la validacion, me podrias indicar como se hace???
    Seguro de contar con tu apoyo me despido esperando tu respuesta por correo.
    David

  34. #34 por don pool - Mayo 22nd, 2010 a las 19:27

    Hola Davicho,

    El código JavaScript está programado para trabajar con un campo de formulario llamado “cedula”, así que la forma más sencilla de lograr que funcione será bautizar con ese nombre al campo respectivo en tu formulario.

    Todo el código de la función check_cedula() deberás ponerlo en el mismo archivo que tiene el formulario entre etiquetas <script language="Javascript"> y </script> preferiblemente en la sección <head> del código HTML de la página.

    Como mencionas, otra alternativa al punto anterior es poner el código tal cual (sin las etiquetas <script></script>) en un archivo con extensión .js y cargarlo en la página así: <script src="archivo.js" />, igualmente en la sección <head> del código HTML de la página.

    Por último hay que programar el evento que ejecutará la función, el cual puede ser onClick del botón que envía el formulario (tomando del artículo original) sería algo así:

    <input name="send" type="submit" value="Validar" onClick="return check_cedula(this.form);" />

    Espero te sirva para hacerlo funcionar!

    Salu2
    paul

  35. #35 por Tania - Junio 4th, 2010 a las 15:01

    Estimado Paul:

    Necesito que por favor me ayude no me acuerdo como hacer el calculo pero manualmente se multiplican los digitos pares e impares por 2 y luego se resta si me puedes ayudar por favor

    Tania

  36. #36 por don pool - Junio 5th, 2010 a las 19:03

    Hola Tania,

    El cálculo es el siguiente:

    Tomas los 9 dígitos de la cédula y multiplicas por 2 los dígitos de posición impar, los de posición par se conservan igual. Si alguna multiplicación te da un valor mayor a 9, le restas 9 al resultado de la multiplicación. Sumas todos los dígitos resultantes y calculas el número que falta para redondear la siguiente decena del resultado obtenido. Ese número es el dígito verificador.

    Ejm:

    2 2 4 1 3 0 0 6 0
    x2 | x2 | x2 | x2 | x2
    ----------------------
    4 2 8 1 6 0 0 6 0
    4+3+8+1+6+0+0+6+0 = 28
    28 para llegar al 30 son [2]

    2 sería el dígito verificador. Espero haber podido ayudarte!

    Salu2
    paul

  37. #37 por Pablo - Junio 14th, 2010 a las 12:31

    Me salvaste la vida hermano! Gracias!!

  38. #38 por don pool - Junio 15th, 2010 a las 15:10

    :)

  39. #39 por William - Junio 17th, 2010 a las 16:47

    Hola amigo don pool, revisando en la web en verdad eres una persona colaboradora como nos caracteriza a los ecuatorianos ya que despues de mas de 3 años aún sigues respondiendo

    Asi q igualmente t molestaré, como la mayoria q escribimos somos nuevos en esto del java script, mi pregunta es la siguiente: Tengo realizado un formulario con CI, nombre y telf, ya con su respectivo boton de submit, ahora podría yo agregar este script dentro de mi plantilla para verificar si es correcto el número de CI cuando presionen en “submit” salte el aviso que es incorrecto?. Disculpa la molestia.

  40. #40 por don pool - Junio 17th, 2010 a las 17:36

    Hola William,

    Primero gracias por el apoyo moral de tu parte, siempre es bueno recibir comentarios favorables!!!

    Sobre tu pregunta, sí, es perfectamente factible. Si te fijas en la respuesta #34 de este mismo post, verás que explico con bastante claridad (creo yo) la implementación del ejercicio sobre un formulario pre-existente. Revísalo y haz las pruebas respecitvas, si aún tienes dudas o no te sale, aquí estaré al menos otros tres años más para ayudar en lo que se pueda! ;) Siempre es bueno que tú mismo llegues a la solución y no que yo o cualquier otro te guíe paso a paso a la solución.

    En cualquier caso, me comentas cómo te fue!

    Salu2
    Paul

  41. #41 por ANGIE - Junio 30th, 2010 a las 21:40

    hola alguien me puede ayudar con el programa verificador de la cedula pero en lenguaje c GRACIAS

  42. #42 por IVAN__ - Julio 2nd, 2010 a las 23:21

    hola q tal…
    me ayudaste un monton…
    gracias por el aporte…..
    como dice wiliam eres super gente…

  43. #43 por don pool - Julio 3rd, 2010 a las 12:20

    Me alegro Iván, gracias por tu comentario!

    Salu2
    paul

  44. #44 por don pool - Julio 3rd, 2010 a las 12:22

    Hola Angie,

    Como lo he escrito en posts anteriores, no creo que sea muy difícil adaptarlo para otros lenguajes. Espero tener un tiempito libre para hacerlo, o si alguien lo hizo ya que lo publique!

    Salu2
    paul

  45. #45 por Vane - Julio 24th, 2010 a las 17:03

    funciona en php

(No será publicado)
  1. No hay trackbacks