/* Copyright (c) 2009 Jos� Joaqu�n N��ez (josejnv@gmail.com) http://joaquinnunez.cl/blog/
* Licensed under GPL (http://www.opensource.org/licenses/gpl-2.0.php)
* Use only for non-commercial usage.
*
* Version : 0.5
*
* Requires: jQuery 1.2+
*/
(function($)
{
jQuery.fn.Rut = function(options)
{
var defaults = {
digito_verificador: null,
on_error: function(){},
on_success: function(){},
validation: true,
format: true,
format_on: 'change'
};
var opts = $.extend(defaults, options);
return this.each(function(){
if(defaults.format)
{
jQuery(this).bind(defaults.format_on, function(){
jQuery(this).val(jQuery.Rut.formatear(jQuery(this).val(),defaults.digito_verificador==null));
});
}
if(defaults.validation)
{
if(defaults.digito_verificador == null)
{
jQuery(this).bind('blur', function(){
var rut = jQuery(this).val();
if(jQuery(this).val() != "" && !jQuery.Rut.validar(rut))
{
defaults.on_error();
}
else if(jQuery(this).val() != "")
{
defaults.on_success();
}
});
}
else
{
var id = jQuery(this).attr("id");
jQuery(defaults.digito_verificador).bind('blur', function(){
var rut = jQuery("#"+id).val()+"-"+jQuery(this).val();
if(jQuery(this).val() != "" && !jQuery.Rut.validar(rut))
{
defaults.on_error();
}
else if(jQuery(this).val() != "")
{
defaults.on_success();
}
});
}
}
});
}
})(jQuery);
/**
Funciones
*/
jQuery.Rut = {
formatear: function(Rut, digitoVerificador)
{
var sRut = new String(Rut);
var sRutFormateado = '';
sRut = jQuery.Rut.quitarFormato(sRut);
if(digitoVerificador){
var sDV = sRut.charAt(sRut.length-1);
sRut = sRut.substring(0, sRut.length-1);
}
while( sRut.length > 3 )
{
sRutFormateado = "." + sRut.substr(sRut.length - 3) + sRutFormateado;
sRut = sRut.substring(0, sRut.length - 3);
}
sRutFormateado = sRut + sRutFormateado;
if(sRutFormateado != "" && digitoVerificador)
{
sRutFormateado += "-"+sDV;
}
else if(digitoVerificador)
{
sRutFormateado += sDV;
}
return sRutFormateado;
},
quitarFormato: function(rut)
{
var strRut = new String(rut);
while( strRut.indexOf(".") != -1 )
{
strRut = strRut.replace(".","");
}
while( strRut.indexOf("-") != -1 )
{
strRut = strRut.replace("-","");
}
return strRut;
},
digitoValido: function(dv)
{
if ( dv != '0' && dv != '1' && dv != '2' && dv != '3' && dv != '4'
&& dv != '5' && dv != '6' && dv != '7' && dv != '8' && dv != '9'
&& dv != 'k' && dv != 'K')
{
return false;
}
return true;
},
digitoCorrecto: function(crut)
{
largo = crut.length;
if ( largo < 2 )
{
return false;
}
if(largo > 2)
{
rut = crut.substring(0, largo - 1);
}
else
{
rut = crut.charAt(0);
}
dv = crut.charAt(largo-1);
jQuery.Rut.digitoValido(dv);
if(rut == null || dv == null)
{
return 0;
}
dvr = jQuery.Rut.getDigito(rut);
if (dvr != dv.toLowerCase())
{
return false;
}
return true;
},
getDigito: function(rut)
{
var dvr = '0';
suma = 0;
mul = 2;
for(i=rut.length -1;i >= 0;i--)
{
suma = suma + rut.charAt(i) * mul;
if (mul == 7)
{
mul = 2;
}
else
{
mul++;
}
}
res = suma % 11;
if (res==1)
{
return 'k';
}
else if(res==0)
{
return '0';
}
else
{
return 11-res;
}
},
validar: function(texto)
{
texto = jQuery.Rut.quitarFormato(texto);
largo = texto.length;
// rut muy corto
if ( largo < 2 )
{
return false;
}
// verifica que los numeros correspondan a los de rut
for (i=0; i < largo ; i++ )
{
// numero o letra que no corresponda a los del rut
if(!jQuery.Rut.digitoValido(texto.charAt(i)))
{
return false;
}
}
var invertido = "";
for(i=(largo-1),j=0; i>=0; i--,j++)
{
invertido = invertido + texto.charAt(i);
}
var dtexto = "";
dtexto = dtexto + invertido.charAt(0);
dtexto = dtexto + '-';
cnt = 0;
for ( i=1,j=2; i<largo; i++,j++ )
{
if ( cnt == 3 )
{
dtexto = dtexto + '.';
j++;
dtexto = dtexto + invertido.charAt(i);
cnt = 1;
}
else
{
dtexto = dtexto + invertido.charAt(i);
cnt++;
}
}
invertido = "";
for (i=(dtexto.length-1),j=0; i>=0; i--,j++)
{
invertido = invertido + dtexto.charAt(i);
}
if (jQuery.Rut.digitoCorrecto(texto))
{
return true;
}
return false;
}
};
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.