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:

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:

Cedula:

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

68 Comments:

  1. Gracias amigo me ayudo mucho!! pues funciona sin errores!!

  2. Perfecto, gracias. Me ayudaste bastante en el proyecto de mi facultad….
    🙂

  3. Gracias!!! Bro me ayudaste full…

  4. gracias por el codigo man voy a probarlo y luego te aviso que tal me fue…
    saluditos

  5. En realidad eres una persona muy colaboradora, felicitaciones por ser así.
    Mi pregunta es si se puede aplicar tu programa en access, porque necesito verificar que las cédulas de mis clientes sean correctas.

  6. funciona en php

  7. 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

  8. Me alegro Iván, gracias por tu comentario!

    Salu2
    paul

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

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

  11. 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

  12. 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.

  13. Me salvaste la vida hermano! Gracias!!

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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….

  20. 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!

  21. 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.

  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!

  23. 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!

  24. 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?

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

  26. 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!

  27. 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!

  28. 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

  29. 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??

  30. 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

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

  32. German David de la Rosa fabra

    cedula requerida

  33. ¡ 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!

  34. 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

  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!

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

  37. 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! …

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

  39. 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

  40. 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!

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

  42. 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,

  43. 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

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

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

  46. Qué bueno Anita que te haya servido…

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

  47. Hola, funciona, funciona… si vale todo 🙂 gracias por tu ayuda.

  48. 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

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

No se admiten más comentarios