Extendiendo Mootools para calcular el rut

Visita este artí­culo en http://www.estadobeta.com/2007/09/26/extendiendo-mootools-para-calcular-el-rut/

Por vladimir en artículos, javascript, tips
Nota previa : este artículo está orientado a una situación Chilena, pero perfectamente se puede adaptar para otros casos de uso.

El RUT (Chile) es el identificador único de todo ciudadano chileno, y su cálculo o verificación está más que difundido. Todo programador, por novato que sea, se ve enfrentado en algún momento a la verificación de este. El tema es cómo hacerlo de forma fácil. Una de las respuestas es el uso de mootools.

Para ello utilizaré una de las excelentes funciones de Manuel Ortega para la verificación de RUT. Esta entrega el dígito verificador dado un string de numeros. Por lo tanto, lo que se haga en mootools ha de separar el rut entregado y contrastarlo con el resultado de la función para ver si coinciden o no.

Sigue leyendo para ver cómo.

La Clase Elements

Elements es una de las clases nativas de mootools, y esta extiende/basa una ya implementada en Prototype. Con Elements se pueden efectuar algunas acciones interesantes:

  • agregar una clase CSS a un elemento : $('mielementohtml').addClass('miclasecss');
  • modificar un atributo CSS a un elemento : $('mielementohtml').setStyle('width', 300);

Entonces, todo se resume a crear una función extendiendo la clase Elements y que nos dé lo que deseamos con todo y la función del RUT. Para hacerlo basta con un Element.extend({ lafuncion: function(){ ...elcodigo...} }); (ver aquí para más información).

…y la función es…

Code (javascript)
  1.  
  2. Element.extend({
  3.     esRut:function(mensaje){
  4.         function dv(T){var M=0,S=1;for(;T;T=Math.floor(T/10))
  5.                         S=(S+T%10*(9-M++%6))%11;return S?S-1:‘k’;}
  6.        
  7.         mensaje = $pick(mensaje,false);
  8.         cadenas = this.getValue().split("-");
  9.         errMsg = ‘El RUT que ingreso no ha pasado la prueba del digito verificador’;
  10.         if (cadenas.length != 2){
  11.             if (mensaje) alert( errMsg );
  12.             return false;
  13.         }
  14.         var numeros = cadenas[0].replace(/\./g,"")//sacando cualquier "." que venga entre medio
  15.         if (cadenas[1].toLowerCase() != dv(numeros)){
  16.             if (mensaje) alert( errMsg );
  17.             return false;
  18.         }
  19.         return true;
  20.     }
  21. });
  22.  

Vamos por partes :

  • la función del RUT, está incorporada dentro de la función de la extensión y se llama dv (dígito verificador).
  • $pick es parte del core de mootools y sirve para darle un valor por defecto a una variable en caso de que esta no tenga ningún valor asignado. En este caso, si el paramentro mensaje no viene dado, entonces mensaje se “inicializa” en false.
  • getValue() también es una extensión de Elements y lo que hace es obtener el valor (.value) de cualquier elemento html (input, textarea, select). Por tanto, this.getValue().split(”-”) no es otra cosa más que dividir el string entregado en dos, a partir del guión, no importanto que tipo de objeto contiene el string.

El resto es deducible con un poco de lectura y conocimiento base. ¿Y cómo ocupamos esta extensión? es la mejor parte! suponiendo que el elemento html que contiene el RUT se denomina mirut, sólo bastará hacer lo siguiente:

$('mirut').esRut() -> validará el valor de mirut y entregará un true|false según sea el caso.

o bien :

$('mirut').esRut(true) -> validará el valor de mirut y entregará un true|false según sea el caso, y lanzará una alerta con un mensaje alusivo.

Ver el ejemplo funcionando.

Este artículo fue escrito por Vladimir Prieto Muñoz, Desarrollador Web y colaborador de EstadoBeta.

3 comentarios para “Extendiendo Mootools para calcular el rut”

  1. GravatarRodrigo Dice:

    Excelente… pero… es RUN!, o no? De todas formas, se valida de la misma forma, es solo un error común semántico.

  2. GravatarRodrigo Dice:

    PD: Que bueno que se sume un autor más a EstadoBeta, como un fiel lector más; bienvenido!

  3. Gravatardorulk Dice:

    Siempre es bueno una alternativa mas, ya que es cosa de ver la cantidad de sitios chilenos que tienen una pésima validación del rut(si es que la tienen), aún cuando existen estos excelentes aportes que entregan personas como Vladimir, gracias.

Deja un comentario

XHTML: puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>