/admision/js/jquery.rut.js

https://github.com/chaskas/DUOC · JavaScript · 252 lines · 214 code · 24 blank · 14 comment · 73 complexity · e10004c76cef7a1c6ae50734b9079d6e MD5 · raw file

  1. /* Copyright (c) 2009 Josй Joaquнn Nъсez (josejnv@gmail.com) http://joaquinnunez.cl/blog/
  2. * Licensed under GPL (http://www.opensource.org/licenses/gpl-2.0.php)
  3. * Use only for non-commercial usage.
  4. *
  5. * Version : 0.5
  6. *
  7. * Requires: jQuery 1.2+
  8. */
  9. (function($)
  10. {
  11. jQuery.fn.Rut = function(options)
  12. {
  13. var defaults = {
  14. digito_verificador: null,
  15. on_error: function(){},
  16. on_success: function(){},
  17. validation: true,
  18. format: true,
  19. format_on: 'change'
  20. };
  21. var opts = $.extend(defaults, options);
  22. this.each(function(){
  23. if(defaults.format)
  24. {
  25. jQuery(this).bind(defaults.format_on, function(){
  26. jQuery(this).val(jQuery.Rut.formatear(jQuery(this).val(),defaults.digito_verificador==null));
  27. });
  28. }
  29. if(defaults.validation)
  30. {
  31. if(defaults.digito_verificador == null)
  32. {
  33. jQuery(this).bind('blur', function(){
  34. var rut = jQuery(this).val();
  35. if(jQuery(this).val() != "" && !jQuery.Rut.validar(rut))
  36. {
  37. defaults.on_error();
  38. }
  39. else if(jQuery(this).val() != "")
  40. {
  41. defaults.on_success();
  42. }
  43. });
  44. }
  45. else
  46. {
  47. var id = jQuery(this).attr("id");
  48. jQuery(defaults.digito_verificador).bind('blur', function(){
  49. var rut = jQuery("#"+id).val()+"-"+jQuery(this).val();
  50. if(jQuery(this).val() != "" && !jQuery.Rut.validar(rut))
  51. {
  52. defaults.on_error();
  53. }
  54. else if(jQuery(this).val() != "")
  55. {
  56. defaults.on_success();
  57. }
  58. });
  59. }
  60. }
  61. });
  62. }
  63. })(jQuery);
  64. /**
  65. Funciones
  66. */
  67. jQuery.Rut = {
  68. formatear: function(Rut, digitoVerificador)
  69. {
  70. var sRut = new String(Rut);
  71. var sRutFormateado = '';
  72. sRut = jQuery.Rut.quitarFormato(sRut);
  73. if(digitoVerificador){
  74. var sDV = sRut.charAt(sRut.length-1);
  75. sRut = sRut.substring(0, sRut.length-1);
  76. }
  77. while( sRut.length > 3 )
  78. {
  79. sRutFormateado = "." + sRut.substr(sRut.length - 3) + sRutFormateado;
  80. sRut = sRut.substring(0, sRut.length - 3);
  81. }
  82. sRutFormateado = sRut + sRutFormateado;
  83. if(sRutFormateado != "" && digitoVerificador)
  84. {
  85. sRutFormateado += "-"+sDV;
  86. }
  87. else if(digitoVerificador)
  88. {
  89. sRutFormateado += sDV;
  90. }
  91. return sRutFormateado;
  92. },
  93. quitarFormato: function(rut)
  94. {
  95. var strRut = new String(rut);
  96. while( strRut.indexOf(".") != -1 )
  97. {
  98. strRut = strRut.replace(".","");
  99. }
  100. while( strRut.indexOf("-") != -1 )
  101. {
  102. strRut = strRut.replace("-","");
  103. }
  104. return strRut;
  105. },
  106. digitoValido: function(dv)
  107. {
  108. if ( dv != '0' && dv != '1' && dv != '2' && dv != '3' && dv != '4'
  109. && dv != '5' && dv != '6' && dv != '7' && dv != '8' && dv != '9'
  110. && dv != 'k' && dv != 'K')
  111. {
  112. return false;
  113. }
  114. return true;
  115. },
  116. digitoCorrecto: function(crut)
  117. {
  118. largo = crut.length;
  119. if ( largo < 2 )
  120. {
  121. return false;
  122. }
  123. if(largo > 2)
  124. {
  125. rut = crut.substring(0, largo - 1);
  126. }
  127. else
  128. {
  129. rut = crut.charAt(0);
  130. }
  131. dv = crut.charAt(largo-1);
  132. jQuery.Rut.digitoValido(dv);
  133. if(rut == null || dv == null)
  134. {
  135. return 0;
  136. }
  137. dvr = jQuery.Rut.getDigito(rut);
  138. if (dvr != dv.toLowerCase())
  139. {
  140. return false;
  141. }
  142. return true;
  143. },
  144. getDigito: function(rut)
  145. {
  146. var dvr = '0';
  147. suma = 0;
  148. mul = 2;
  149. for(i=rut.length -1;i >= 0;i--)
  150. {
  151. suma = suma + rut.charAt(i) * mul;
  152. if (mul == 7)
  153. {
  154. mul = 2;
  155. }
  156. else
  157. {
  158. mul++;
  159. }
  160. }
  161. res = suma % 11;
  162. if (res==1)
  163. {
  164. return 'k';
  165. }
  166. else if(res==0)
  167. {
  168. return '0';
  169. }
  170. else
  171. {
  172. return 11-res;
  173. }
  174. },
  175. validar: function(texto)
  176. {
  177. texto = jQuery.Rut.quitarFormato(texto);
  178. largo = texto.length;
  179. // rut muy corto
  180. if ( largo < 2 )
  181. {
  182. return false;
  183. }
  184. // verifica que los numeros correspondan a los de rut
  185. for (i=0; i < largo ; i++ )
  186. {
  187. // numero o letra que no corresponda a los del rut
  188. if(!jQuery.Rut.digitoValido(texto.charAt(i)))
  189. {
  190. return false;
  191. }
  192. }
  193. var invertido = "";
  194. for(i=(largo-1),j=0; i>=0; i--,j++)
  195. {
  196. invertido = invertido + texto.charAt(i);
  197. }
  198. var dtexto = "";
  199. dtexto = dtexto + invertido.charAt(0);
  200. dtexto = dtexto + '-';
  201. cnt = 0;
  202. for ( i=1,j=2; i<largo; i++,j++ )
  203. {
  204. if ( cnt == 3 )
  205. {
  206. dtexto = dtexto + '.';
  207. j++;
  208. dtexto = dtexto + invertido.charAt(i);
  209. cnt = 1;
  210. }
  211. else
  212. {
  213. dtexto = dtexto + invertido.charAt(i);
  214. cnt++;
  215. }
  216. }
  217. invertido = "";
  218. for (i=(dtexto.length-1),j=0; i>=0; i--,j++)
  219. {
  220. invertido = invertido + dtexto.charAt(i);
  221. }
  222. if (jQuery.Rut.digitoCorrecto(texto))
  223. {
  224. return true;
  225. }
  226. return false;
  227. }
  228. };