SlideShare a Scribd company logo
1 of 6
/* 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;
     }
};

More Related Content

What's hot

modern javascript, unobtrusive javascript, jquery
modern javascript, unobtrusive javascript, jquerymodern javascript, unobtrusive javascript, jquery
modern javascript, unobtrusive javascript, jqueryAdam Zygadlewicz
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometrojubacalo
 
Practica 4 errores
Practica 4 erroresPractica 4 errores
Practica 4 erroresUVM
 
Node.JS
Node.JSNode.JS
Node.JSeibaan
 
c ++ informe Nº5 ucsm
c ++ informe Nº5 ucsmc ++ informe Nº5 ucsm
c ++ informe Nº5 ucsmIsaac Aquino
 
EJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOSEJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOSDarwin Durand
 
Java AWT Calculadora
Java AWT CalculadoraJava AWT Calculadora
Java AWT Calculadorajubacalo
 
Funcion num a letras
Funcion num a letrasFuncion num a letras
Funcion num a letrasRene Isidro
 
Convertir numero a letras.
Convertir numero a letras.Convertir numero a letras.
Convertir numero a letras.campeon87
 
Programación funcional en Haskell
Programación funcional en HaskellProgramación funcional en Haskell
Programación funcional en HaskellRoberto Bonvallet
 

What's hot (15)

modern javascript, unobtrusive javascript, jquery
modern javascript, unobtrusive javascript, jquerymodern javascript, unobtrusive javascript, jquery
modern javascript, unobtrusive javascript, jquery
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
 
Clojure lightning talk
Clojure lightning talkClojure lightning talk
Clojure lightning talk
 
Practica 4 errores
Practica 4 erroresPractica 4 errores
Practica 4 errores
 
Node.JS
Node.JSNode.JS
Node.JS
 
Lab2 sdmp
Lab2 sdmpLab2 sdmp
Lab2 sdmp
 
Co w
Co wCo w
Co w
 
c ++ informe Nº5 ucsm
c ++ informe Nº5 ucsmc ++ informe Nº5 ucsm
c ++ informe Nº5 ucsm
 
Taller1
Taller1Taller1
Taller1
 
EJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOSEJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOS
 
Java AWT Calculadora
Java AWT CalculadoraJava AWT Calculadora
Java AWT Calculadora
 
Coding manalagi
Coding manalagiCoding manalagi
Coding manalagi
 
Funcion num a letras
Funcion num a letrasFuncion num a letras
Funcion num a letras
 
Convertir numero a letras.
Convertir numero a letras.Convertir numero a letras.
Convertir numero a letras.
 
Programación funcional en Haskell
Programación funcional en HaskellProgramación funcional en Haskell
Programación funcional en Haskell
 

Viewers also liked

The 3rd Thing UC Davis Gets You
The 3rd Thing UC Davis Gets YouThe 3rd Thing UC Davis Gets You
The 3rd Thing UC Davis Gets YouJoeRedHead
 
Technology 2021
Technology 2021Technology 2021
Technology 2021jrtard01
 
Technology 2021
Technology 2021Technology 2021
Technology 2021jrtard01
 
HPR Integrated Design - BIM/IPD Proposal Presentation
HPR Integrated Design - BIM/IPD Proposal PresentationHPR Integrated Design - BIM/IPD Proposal Presentation
HPR Integrated Design - BIM/IPD Proposal PresentationJosh Progar
 
HPR Integrated Design - BIM/IPD Proposal Presentation
HPR Integrated Design - BIM/IPD Proposal PresentationHPR Integrated Design - BIM/IPD Proposal Presentation
HPR Integrated Design - BIM/IPD Proposal PresentationJosh Progar
 

Viewers also liked (7)

Writer Group
Writer GroupWriter Group
Writer Group
 
The 3rd Thing UC Davis Gets You
The 3rd Thing UC Davis Gets YouThe 3rd Thing UC Davis Gets You
The 3rd Thing UC Davis Gets You
 
Technology 2021
Technology 2021Technology 2021
Technology 2021
 
International Dairy trade
International Dairy trade International Dairy trade
International Dairy trade
 
Technology 2021
Technology 2021Technology 2021
Technology 2021
 
HPR Integrated Design - BIM/IPD Proposal Presentation
HPR Integrated Design - BIM/IPD Proposal PresentationHPR Integrated Design - BIM/IPD Proposal Presentation
HPR Integrated Design - BIM/IPD Proposal Presentation
 
HPR Integrated Design - BIM/IPD Proposal Presentation
HPR Integrated Design - BIM/IPD Proposal PresentationHPR Integrated Design - BIM/IPD Proposal Presentation
HPR Integrated Design - BIM/IPD Proposal Presentation
 

More from Rudy Medina

Espacios vectoriales
Espacios vectorialesEspacios vectoriales
Espacios vectorialesRudy Medina
 
Espacios vectoriales ita
Espacios vectoriales itaEspacios vectoriales ita
Espacios vectoriales itaRudy Medina
 
Módulos algebra de matrices (1)
Módulos algebra de matrices (1)Módulos algebra de matrices (1)
Módulos algebra de matrices (1)Rudy Medina
 
5 repaso de_matrices
5 repaso de_matrices5 repaso de_matrices
5 repaso de_matricesRudy Medina
 
07 nociones de algebra lineal
07 nociones de algebra lineal07 nociones de algebra lineal
07 nociones de algebra linealRudy Medina
 
1 algebra lineal y vectores aleatorios
1 algebra lineal y vectores aleatorios1 algebra lineal y vectores aleatorios
1 algebra lineal y vectores aleatoriosRudy Medina
 
Interconexiones de redes (networking)
Interconexiones de redes (networking)Interconexiones de redes (networking)
Interconexiones de redes (networking)Rudy Medina
 
Informe de sistema operativo
Informe de sistema operativoInforme de sistema operativo
Informe de sistema operativoRudy Medina
 
Creando una interfaz grafica
Creando una interfaz graficaCreando una interfaz grafica
Creando una interfaz graficaRudy Medina
 

More from Rudy Medina (14)

Espacios vectoriales
Espacios vectorialesEspacios vectoriales
Espacios vectoriales
 
Espacios vectoriales ita
Espacios vectoriales itaEspacios vectoriales ita
Espacios vectoriales ita
 
Módulos algebra de matrices (1)
Módulos algebra de matrices (1)Módulos algebra de matrices (1)
Módulos algebra de matrices (1)
 
5 repaso de_matrices
5 repaso de_matrices5 repaso de_matrices
5 repaso de_matrices
 
07 nociones de algebra lineal
07 nociones de algebra lineal07 nociones de algebra lineal
07 nociones de algebra lineal
 
1 algebra lineal y vectores aleatorios
1 algebra lineal y vectores aleatorios1 algebra lineal y vectores aleatorios
1 algebra lineal y vectores aleatorios
 
Interconexiones de redes (networking)
Interconexiones de redes (networking)Interconexiones de redes (networking)
Interconexiones de redes (networking)
 
Trabajo antena
Trabajo antenaTrabajo antena
Trabajo antena
 
Capitulo 7rudy
Capitulo 7rudyCapitulo 7rudy
Capitulo 7rudy
 
8
88
8
 
Trabajo final
Trabajo finalTrabajo final
Trabajo final
 
Informe de sistema operativo
Informe de sistema operativoInforme de sistema operativo
Informe de sistema operativo
 
Base de datos
Base de datosBase de datos
Base de datos
 
Creando una interfaz grafica
Creando una interfaz graficaCreando una interfaz grafica
Creando una interfaz grafica
 

Rut

  • 1. /* 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(); } }); }
  • 2. 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) {
  • 3. 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);
  • 4. 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; } },
  • 5. 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 = "";
  • 6. 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; } };