domingo, 30 de marzo de 2008

Validar - Cedula de Identidad Chilena (RUT)

En el año 2002 tuve la voluntad jaja de ayudar a un alguien con una pequeña función (microcodigo) que lo único que hacia, era validar la CI Chilena (RUT)...

El tema es que se volvió muy popular y desde ese entonces, de vez en cuando me llegan correos de personas anónima (supongo que de gente que esta estudiando o comenzando) consultando acerca del mismo.

En principio es muy sencillo, Pero como en aquellos tiempos tenia practicas peores de la que hoy tengo, resulta que me avergüenza un tanto jejeje.

Desde ese punto de vista, claro que puede resultar un poco confuzo para quien lo lee.

""Este es el post original""
http://www.programacion.net/foros/5/msg/13012/ (Buenos tiempos)


El Algoritmo....

Esta es la clave, si alguien entiende que el dígito verificador de nuestra cédula de identidad obedece a una formula matematica muy sencilla, lo puede implementar como sea y en lo que se le de la gana.

Mi rut (12166027-K) ....


1._ Voy a tomar la primera parte de mi cédula, cada dígito partiendo desde el ultimo, lo voy a multiplicar por el valor de una lista que avanzara y se repite del [2-7]

2._ Luego hago la diferencia entre: 11 y el (modulo 11 del valor resultante)


* Existen diferentes formas de sacar el modulo, sin embargo no creo que exista un lenguaje de programación que no tenga implementado el modulo, así que no tiene mucho sentido calcularlo con sumas y restas jeje

La regla dice que si el resultado esta entre 1-9, ese el dígito verificador,
si es 11 el dígito verificador es 0
si es 10 el dígito verificador es K





Entonces

Resolviendo para ASP.Net (Webforms), validación personalizada tanto en el cliente (JavaScript) como en el servidor (C#) seria algo así .....





function validar_rut(source, arguments){                                                

    var cedula = arguments.Value; 
    var dv = cedula
        .charAt(cedula.length-1)
        .toUpperCase();
         
    var total = 0; 
    var mul = 2;

    for (i=cedula.length-3; i>=0 ; i--){
        total = total + parseInt(cedula.charAt(i)) * mul;
        mul = mul==7 ? 2 : mul+1;
    };

    var rDv = (11 - total % 11);
    rDv = rDv == 10 ? 'K' : rDv;
    rDv = rDv == 11 ? '0' : rDv;
    arguments.IsValid = (dv == rDv);

};

Cedula Identidad
<asp:CustomValidator    
    ID="cv_cedula_identidad" 
    runat="server" 
    ErrorMessage="Cedula no identidad no valida" 
    ClientValidationFunction="validar_rut" 
    ControlToValidate="txt_cedula_identidad" />                
<br />
<asp:TextBox    ID="txt_cedula_identidad" 
                runat="server" />
<br />
<br />
<asp:Button ID="btn_submit" 
            runat="server" 
            Text="Submit" 
            onclick="btn_submit_Click" />
<br />
<br />    


Suerte

2 comentarios:

jstuardo dijo...

Estimado, yo realicé un control ASP.NET que encapsula toda esa funcionalidad, tanto de lado cliente como de lado servidor y funciona de igual forma como cualquier otro control de validación.

Esta es la URL: http://www.desytec.com/base-del-conocimiento/14-programacion-de-un-validador-de-rut-en-aspnet.html

Salu2
Jaime

Rodolfo Barriga Salinas dijo...

Hola Jaime

muy bien, si debe ser la manera + formal de definir un control de validacion para dicha plataforma.. :-)

Salu2, Suerte.
Rodolfo B.