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
- 11111111-1
- 11.111.111-1
- 11.111.1111
- 111111111
Los Metodos que implementa son (%= sin parametros)
- format(): %, rotorna el rut formateado a xx.xxx.xxx-dv
- Error(): %, retorna true en caso de existir error de formato en el rut
- getNError(): %, retorna el número del error, -1 = no errores
- getError(): %, retorna un error descriptivo
- getOriginal(): %, retorna el rut original, el que es pasado como parametro
- get(): %, retorna el cuerpo del rut, ej: xx.xxx.xx-dv => retorna xxxxxxxx
- getDv(): %, retorna el dv correcto del rut
- 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