Created
August 3, 2013 01:35
-
-
Save farandal/6144702 to your computer and use it in GitHub Desktop.
Validación RUT JQuery validation plugin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Copyright (c) 2009 José Joaquín Núñez ([email protected]) 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; | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment