viernes, 19 de junio de 2009

Validador de Rut (Javascript)

En un post anterior publiqué un validador de RUT hecho con PHP y ahora es el turno de Javascript.

Es similar al anterior con PHP:
function validaRut(rut){
 var rexp = new RegExp(/^([0-9])+\-([kK0-9])+$/);
 if(rut.match(rexp)){
     var RUT = rut.split("-");
     var elRut = RUT[0].toArray();
     var factor = 2;
     var suma = 0;
     var dv;
     for(i=(elRut.length-1); i>=0; i--){
         factor = factor > 7 ? 2 : factor;
         suma += parseInt(elRut[i])*parseInt(factor++);
     }
     dv = 11 -(suma % 11);
     if(dv == 11){
         dv = 0;
     }else if (dv == 10){
         dv = "k";
     }

     if(dv == RUT[1].toLowerCase()){
         alert("El rut es válido!!");
         return true;
     }else{         
         alert("El rut es incorrecto");
         return false;
     }
 }else{     
     alert("Formato incorrecto");
     return false;
 }
}

Pueden ver un demo aquí

Para más información sobre el RUT y el algoritmo de creación y validación pueden consultar la wikipedia: http://es.wikipedia.org/wiki/RUT.

16 comentarios:

  1. Anónimo12:12 p.m.

    y como puedo llamarlo?

    ResponderEliminar
  2. Anónimo5:42 p.m.

    y hacerlo en 2 campos de texto uno para el rut
    y el otro para el dv .....
    sin mas se dsespide nelson

    =========================================

    programador_junior@hotmail.com

    ResponderEliminar
  3. genial men te pasaste!!

    ResponderEliminar
    Respuestas
    1. Sé que esta es una conversación antigua, pero en caso que a alguien le sirva aquí hay una versión optimizada de la misma función... es más difícil de leer para un humano pero la gracia que tiene es que se ejecuta más rápido y ocupa muchos menos bytes:

      function validaRut(b){if(b.match(/^([0-9])+\-([kK0-9])+$/)){b=b.split("-");var a=b[0].split(""),c=2,d=0;for(i=a.length-1;0<=i;i--)c=7<c?2:c,d+=parseInt(a[i])*parseInt(c++);a=11-d%11;return(11==a?0:10==a?"k":a)==b[1].toLowerCase()}return!1};

      Ah, y no genera los alerts sino que sólo retorna true o false dependiendo de si el parámetro era un RUT válido o no

      Eliminar
  4. Anónimo3:29 p.m.

    En la línea:

    var elRut = RUT[0].toArray();

    Produce un error.

    ResponderEliminar
    Respuestas
    1. Anónimo12:10 p.m.

      Es una función del prototype.js
      Reemplazá la línea por:

      var elRut = RUT[0].split('');

      y listo. ;)

      Eliminar
  5. Efectivamente, el método toArray() es propio de prototype. Mi grave error es no haber indicado la dependencia. Sin embargo el último anónimo indicó una limpia solución.

    ResponderEliminar
  6. y como hacerlo con un campo de texto dentro de un formulario?

    ResponderEliminar
  7. Debes asociar la función mediante un evento (blur por ejemplo) gatillado desde el campo de texto.

    La otra opción es desde el evento submit del formulario que contiene al input.

    ResponderEliminar
  8. Muchísimas gracias eres todo un maestro y sobretodo también agradezco al señor anónimo que dio una respuesta con el vector :D

    ResponderEliminar
  9. Buen aporte lo voy a probar... saludos

    ResponderEliminar
  10. Anónimo12:19 p.m.

    Estimado, por qué cuando se llena con 0 éste marca el rut como válido?..
    existe el rut 00.000.000-0???

    ResponderEliminar
    Respuestas
    1. Realiza el cálculo ;).

      El validador trabaja en base al algoritmo definido para ello el cual es, en último término, un validador cuantitativo.

      El que el rut exista o no, no es parte de su propósito, para ello habría que consultar al Registro Civil y ahí nos metemos en otro nivel de validación, es decir, la cualitativa.

      Eliminar
  11. sube el frame del html po viejo

    ResponderEliminar
  12. Anónimo4:42 p.m.

    profe es usted?? si es asi me salvo la existencia

    ResponderEliminar