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

  1. #1 by Angelica on 26 dUTC diciembre dUTC 2010 - 14:03

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

  2. #2 by Ksaweryn on 20 dUTC noviembre dUTC 2010 - 20:15

    Perfecto, gracias. Me ayudaste bastante en el proyecto de mi facultad….
    :-)

  3. #3 by Evilman on 13 dUTC octubre dUTC 2010 - 16:50

    Gracias!!! Bro me ayudaste full…

  4. #4 by Edgar on 11 dUTC septiembre dUTC 2010 - 16:01

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

  5. #5 by Patricio on 2 dUTC septiembre dUTC 2010 - 13:08

    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. #6 by Vane on 24 dUTC julio dUTC 2010 - 17:03

    funciona en php

  7. #7 by don pool on 3 dUTC julio dUTC 2010 - 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

  8. #8 by don pool on 3 dUTC julio dUTC 2010 - 12:20

    Me alegro Iván, gracias por tu comentario!

    Salu2
    paul

  9. #9 by IVAN__ on 2 dUTC julio dUTC 2010 - 23:21

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

  10. #10 by ANGIE on 30 dUTC junio dUTC 2010 - 21:40

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

  11. #11 by don pool on 17 dUTC junio dUTC 2010 - 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

  12. #12 by William on 17 dUTC junio dUTC 2010 - 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.

  13. #13 by don pool on 15 dUTC junio dUTC 2010 - 15:10

    :)

  14. #14 by Pablo on 14 dUTC junio dUTC 2010 - 12:31

    Me salvaste la vida hermano! Gracias!!

  15. #15 by don pool on 5 dUTC junio dUTC 2010 - 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

  16. #16 by Tania on 4 dUTC junio dUTC 2010 - 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

  17. #17 by don pool on 22 dUTC mayo dUTC 2010 - 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

  18. #18 by Davicho on 22 dUTC mayo dUTC 2010 - 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

  19. #19 by don pool on 1 dUTC febrero dUTC 2010 - 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

  20. #20 by jomrec on 31 dUTC enero dUTC 2010 - 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….

  21. #21 by don pool on 5 dUTC diciembre dUTC 2009 - 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!

  22. #22 by Juan Carlos Villavicencio on 4 dUTC diciembre dUTC 2009 - 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.

  23. #23 by don pool on 17 dUTC noviembre dUTC 2009 - 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!

  24. #24 by don pool on 17 dUTC noviembre dUTC 2009 - 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!

  25. #25 by serbala on 16 dUTC noviembre dUTC 2009 - 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?

  26. #26 by ROCIO on 9 dUTC noviembre dUTC 2009 - 15:01

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

  27. #27 by don pool on 21 dUTC octubre dUTC 2009 - 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!

  28. #28 by don pool on 21 dUTC octubre dUTC 2009 - 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!

  29. #29 by evelyn on 19 dUTC octubre dUTC 2009 - 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

  30. #30 by David on 15 dUTC octubre dUTC 2009 - 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??

  31. #31 by don pool on 20 dUTC agosto dUTC 2009 - 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

  32. #32 by gustavo on 19 dUTC agosto dUTC 2009 - 8:27

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

  33. #33 by German David de la Rosa fabra on 5 dUTC junio dUTC 2009 - 10:17

    cedula requerida

  34. #34 by don pool on 27 dUTC mayo dUTC 2009 - 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!

  35. #35 by Fernando on 25 dUTC mayo dUTC 2009 - 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

  36. #36 by don pool on 2 dUTC mayo dUTC 2009 - 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!

  37. #37 by JOFFRE PILCO on 27 dUTC abril dUTC 2009 - 19:02

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

  38. #38 by don pool on 27 dUTC abril dUTC 2009 - 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! …

  39. #39 by MILTON on 26 dUTC abril dUTC 2009 - 13:59

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

  40. #40 by don pool on 16 dUTC enero dUTC 2009 - 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

  41. #41 by don pool on 16 dUTC enero dUTC 2009 - 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!

  42. #42 by Homero on 10 dUTC enero dUTC 2009 - 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

  43. #43 by Victor on 30 dUTC diciembre dUTC 2008 - 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,

  44. #44 by don pool on 19 dUTC septiembre dUTC 2008 - 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

  45. #45 by Coral on 16 dUTC septiembre dUTC 2008 - 20:22

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

  46. #46 by Alexis on 26 dUTC junio dUTC 2008 - 16:22

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

  47. #47 by don pool on 1 dUTC noviembre dUTC 2007 - 13:26

    Qué bueno Anita que te haya servido…

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

  48. #48 by Anita on 1 dUTC noviembre dUTC 2007 - 12:42

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

  49. #49 by don pool on 30 dUTC mayo dUTC 2007 - 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

  50. #50 by Raul on 30 dUTC mayo dUTC 2007 - 15:53

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

Los Comentarios están cerrados