miércoles, 9 de abril de 2008

Clase Valida Rut

E realizado una clase con prototype.js, que permite validar el Rut
no es algo nuevo lo de validar el rut, es más es algo muy cencillo, lo que quiero mostrar es como usando prototype se pueden crear cosas muy intersesantes
var RUT=Class.create();

RUT.prototype={
initialize:function(rut){
this.Orut=new String(rut);
this.Dvs=new String("123456789K0");
this.error=false;
this.nerror=-1;
this.prepara()
this.valFormato();
},
prepara:function(){
var cr=this.Orut;
if(cr!=""){
cr=cr.replace(/[\.|\-|\s]+/g,"");
this.rut=cr.substr(0,cr.length-1);
this.dv=new String(cr.substr(cr.length-1,cr.length)).toUpperCase();
}
if(String(this.rut)=='undefined') this.rut="";
if(String(this.dv)=='undefined') this.dv='-1';
return this.rut;
},
clear:function(){ return this.rut; },
valFormato:function(){
if(this.rut.length==0){ this.error=true; return this.nerror=0; }
if(this.rut.length!=String(parseInt(this.rut)).length){ this.error=true; return this.nerror=1; }
if(this.Dvs.indexOf(this.dv)==-1){ this.error=true; return this.nerror=2; }
},
format:function(){
this.prepara();
var r=$A(new String(this.rut));
var temp="";
var c=0;
r.each(function(v,i){
temp+=r[r.length-(i+1)];
if(((++c)<r.length) && (c%3)==0) temp+=".";
});
r=$A(temp);
temp="";
r.each(function(v,i){
temp+=r[r.length-(i+1)];
});
return temp+"-"+this.dv;
},
Error:function(){
return this.error
},
getNError:function(){
return this.nerror;
},
getError:function(){
if(this.nerror==-1) return "No se han identificado errores";
var errores=new Array();
errores[errores.length]="Ingrese Rut";
errores[errores.length]="Rut '"+this.rut+"' contiene caracteres no validos";
errores[errores.length]="Digito Verificador '"+this.dv+"' no es un caracter correcto";
return errores[this.nerror];
},
getOriginal:function(){
return this.Orut;
},
get:function(){
return this.rut;
},
getDv:function(){
if(this.error){ return -1; }
var r=parseInt(this.rut);
var m=1;
var suma=0;
do{
suma+=(r%10)*(m=(m<7)?++m:2);
r=parseInt(r/10);
}while(r!=0);
return this.Dvs.charAt(10-(suma%11));
},
valida:function(){
if(this.error){ return false; }
return (this.getDv()==this.dv)?true:false;
}
}

Es sencillo la forma de uso de esta clase es de la siguiente mnanera


Los formatos que hacepta son

  1. 11111111-1

  2. 11.111.111-1

  3. 11.111.1111

  4. 111111111




Los Metodos que implementa son (%= sin parametros)

  1. format(): %, rotorna el rut formateado a xx.xxx.xxx-dv

  2. Error(): %, retorna true en caso de existir error de formato en el rut

  3. getNError(): %, retorna el número del error, -1 = no errores

  4. getError(): %, retorna un error descriptivo

  5. getOriginal(): %, retorna el rut original, el que es pasado como parametro

  6. get(): %, retorna el cuerpo del rut, ej: xx.xxx.xx-dv => retorna xxxxxxxx

  7. getDv(): %, retorna el dv correcto del rut

  8. valida(): %, retorna true si el rut es valido




var Rut=new RUT('11111111-1');
if(Rut.Error()){
alert(Rut.getError());
}
else{
if(Rut.valida()){
//Rut valido
}
else{
//Rut no valido
}
}



Espero que a alguien le sirva...
Saludos

2 comentarios:

Victor dijo...
Este comentario ha sido eliminado por el autor.
Victor dijo...

Hola disculpa pero no entiendo mucho de prototype y me preguntaba si podrias poner un ejemplo de como funciona ??

Gracias