Validate a identification number of Chile  

Send By: Gabriel Florit
Web : N.A.
Email: tirolf@yahoo.com
Date: 20/08/01

Tip accessed 738 times

 



ALGORITMO



Cada dígito de la Cédula tiene que ser multiplicado por 2, 3... 7 en forma inversa. Al llegar a 7 se comienza de nuevo con el 2.
Por ejemplo el C.I. 10.928.741:

 1       *       3       =        3
 0       *       2       =        0
 9       *       7       =       63
 2       *       6       =       12
 8       *       5       =       40
 7       *       4       =       28
 4       *       3       =       12
 1       *       2       =        2



Ahora se suman los resultados y se dividen por 11


                                160 : 11 =14
                                 50
                                  6



lo que queda (6) se le resta al 11 y esto nos dará el Dígito Verificador


 11-6=5



o sea: 10.928.741-5

Nota si el resultado es 1 se cambia por 'K'


Función para validarlo




 Function ValRut(Rut: String):String;
 var
    Cuenta, Suma, totalrut, Revisa : Integer;
 begin
    Suma:=2;
    TotalRut:=0;
    For Cuenta:=Length(Trim(rut)) downto 1 do
      begin
         if Suma>7 then Suma:=2;

 Totalrut:=Totalrut+((StrToInt(copy(rut,cuenta,1)))*suma);
         Suma:=Suma+1;
      end;
    Revisa:=Round((frac(Totalrut/11)*10)+0.5);
    Revisa:=11-revisa;
    If Revisa=1 then Result:='K'
       else Result:=IntToStr(Revisa);

 end;



Ejemplo de llamada:


 procedure TForm1.BitBtn1Click(Sender: TObject);
 begin
    Edit2.Text:=ValRut(Edit1.text);
 end;





A update:


 Function ValRut(Rut: String):String;
 var
    Cuenta, Suma, totalrut, Revisa : Integer;
 begin
    Suma:=2;
    TotalRut:=0;
    For Cuenta:=Length(Trim(rut)) downto 1 do
      begin
         if Suma>7 then Suma:=2;
         Totalrut:=Totalrut+((StrToInt(copy(rut,cuenta,1)))*suma);
         Suma:=Suma+1;
      end;
    Revisa:=Round((frac(Totalrut/11)*10)+0.5);
    Revisa:=11-revisa;
    If Revisa=10 then Result:='K'
       else
         begin
           If Revisa=11 then Result:='0'
              else Result:=IntToStr(Revisa);
         end;

 end;




Updated at 20/08/2001 (Update)