Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Validar RUT, como implementarlo (https://www.clubdelphi.com/foros/showthread.php?t=48565)

Lenny 27-09-2007 22:38:20

Validar RUT, como implementarlo
 
Hola a todos... primero que nada... agradecimientos por la web y sus usuarios... e aprendido mucho siguiendo vuestros comentarios, mas que una herramienta es mi escuela esta web... en fin... la duda...

Soy un novatisimo en esto... pero me encanta y espero seguir en esto por mucho, pero me encontrado con un problema, ya han tratado el tema antes, e buscado en los hilos y no encuentro solucion, me refiero al famoso RUT chileno (DNI en otros paises, es lo mismo).
la idea es validar si el rut es correcto o no y lo unico que e encontrado en la web es esto:

Código Delphi [-]
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;



el problema es que no se como usarlo, si es que hay que declararlo, donde... etc... sorry... se que es tonto y de novatos... pero necesito me ayuden... la idea es que exista un edit o un maskedit en el cual escrivo un rut que seria algo asi: 11.268.924-4, y que al guardarlo a travez de un Button verifique si el RUT es correcto o no, de ser incorrecto me de un aviso... si pudieran adjuntar un ejemplo si no es mucho pedir... estaria mas que agradesido...

de antemano muchisimas gracias...

poliburro 27-09-2007 22:45:31

Lo ideal es que indicaras el método de cálculo del RUT chileno, para idear un algoritmo que lo genere. O en su defecto el algoritmo de generacíón y entre todos podríamos perfeccionarlo

Lenny 27-09-2007 22:49:13

Gracias por el pronto interes... esto es lo que e encontrado:

ALGORITMO 1

1. Multiplicar cada dígito del RUT se por 2, 3, ..., 7, 2, 3, ... de atrás hacia adelante.
2. Sumar las multiplicaciones parciales.
3. Calcular el resto de la división por 11
4. El Dígito Verificador es 11 menos el resultado anterior. Si es 10, se cambia por 'k'.


EJEMPLO. RUT: 11.222.333

1. 1 1 2 2 2 3 3 3 <-- RUT
* 3 2 7 6 5 4 3 2 <-- 2, 3, 4, 5, 6, 7, 2, 3, ...
--------------------------------------
3 2 14 12 10 12 9 6

2. SUMA: 3 + 2 + 14 + 12 + 10 + 12 + 9 + 6 = 68

3. 68 : 11 = 6
- 66
----
2 <-- RESTO

4. 11 - 2 = 9 <-- DÍGITO VERIFICADOR

______________________________________________________

ALGORITMO 2, versión alternativa

1. Multiplicar cada dígito del RUT se por 9, 8, ..., 4, 9, 8, ... de atrás hacia adelante.
2. Sumar las multiplicaciones parciales.
3. Calcular el resto de la división por 11
4. El Dígito Verificador es el resultado anterior. Si es 10, se cambia por 'k'.


EJEMPLO. RUT: 11.222.333

1. 1 1 2 2 2 3 3 3 <-- RUT
* 8 9 4 5 6 7 8 9 <-- 9, 8, 7, 6, 5, 4, 9, 8, ...
--------------------------------------
8 9 8 10 12 21 24 27

2. SUMA: 8 + 9 + 8 + 10 + 12 + 21 + 24 + 27 = 119

3. 119 : 11 = 10
- 110
-----
9 <-- RESTO

4. 9 <-- DÍGITO VERIFICADOR


______________________________________________________

ALGORITMO 3, propiedades de la división por 11

1. Multiplicar cada dígito del RUT se por 9, 8, ..., 4, 9, 8, ... de atrás hacia adelante.
2. Sumar las multiplicaciones parciales.
3. Suma alternada de la lista reversa de los dígitos del resultado anterior.
4. El Dígito Verificador es el resultado anterior. Si es 10, se cambia por 'k'.


EJEMPLO. RUT: 11.222.333

1. 1 1 2 2 2 3 3 3 <-- RUT
* 8 9 4 5 6 7 8 9 <-- 9, 8, 7, 6, 5, 4, 9, 8, ...
--------------------------------------
8 9 8 10 12 21 24 27

2. SUMA: 8 + 9 + 8 + 10 + 12 + 21 + 24 + 27 = 119

3. SUMA ALTERNADA: 119 -> 9 - 1 + 1 = 9

4. 9 <-- DÍGITO VERIFICADOR

Espero sirva de algo, ya que e visto en la red a muchos interesados en este asunto y nunguna solucion... gracias nuevamente por el interes, me ayudarian bastante.

rruz 27-09-2007 22:54:21

Validar Rut Chile
 
Hola aqui tienes unas funciones que te pueden ayudar

Código Delphi [-]

Function  RutId(Rut: Longint): Char;
Function  RutValido(Rut: Longint;Digito_Id:Char): Boolean;
Function  RutCompletoStr(Rut: Longint):String;


Function  RutCompletoStr(Rut: Longint):String;
Begin 
Result:=FormatFloat('#,',Rut)+'-'+RutId(Rut);
End;

Function  RutId(Rut: Longint): Char;
Var Suma      : Integer; RutStr    : String;
NumTemp   : Byte;
Multiplo  : Byte;
i         : Integer;
DigitoTemp: String[2];
Begin  Result    :='?';

if (Rut>0) Then Begin 
Suma    :=0; 
RutStr  :=IntToStr(Rut); 
Multiplo:=2;  
for i:=Length(RutStr) downto 1 do 
Begin         
NumTemp :=StrToInt(RutStr[i]);         
Suma    :=Suma+(Multiplo*NumTemp);         
inc(Multiplo);        
 if Multiplo>7 then Multiplo:=2;
End;

i:=11-(Suma mod 11);

Case i of 11 : DigitoTemp:='0';
10 : DigitoTemp:='K';
else DigitoTemp:=IntToStr(i);
End;

Result:=DigitoTemp[1];

End;
End;

Function RutValido(Rut: Longint;Digito_Id:Char): Boolean;
Begin 
Result:=RutId(Rut)=UpCase(Digito_Id); 
End;
Saludos

Lenny 27-09-2007 22:57:48

muchas gracias... pero... pecando de ignorante... como lo uso en la form??? tomando en cuenta que es un edit donde escrivo el RUT, y un boton que lo guarda en paradox... me pueden explicar??? a prueba de tontos please... :p
si devo declararlo en algun lugar... donde devo avilitarlo... etc... etc... sorry si les colmo la paciencia, con un ejemplo estaria mas que agradesido... gracias de antemano...

Delphius 28-09-2007 08:10:55

Hola Lenny,

Tal parece que si eres un iniciado. En forma simple, una unidad (unit) cualquiera está divida en dos secciones: interface e implementation. Todo lo que declares en la primera podrá ser "visto" y accedido desde afuera. Es decir que desde otra unit puede tener acceso y hacer uso de los procedimientos, funciones, variables, tipos, clases y constantes. En implementation estará el código de todo lo que declares en la sección interface. Podría darte mayores detalles, pero prefiero dejar hablar a un maestro en el tema que lo explica bien: Ian Marteens, en su libro la Cara Oculta de Delphi 4. Si buscas en internet vas a encontrar el pdf muy fácil. Te recomiendo su lectura.

En tu caso, te recomiendo el capítulo 3 y siguientes. Sobre todo la página 62 y 63. No tengo delphi a mano, disculpa... sino te preparaba un ejemplo sencillo de como se procede.

Espero que se me entienda con lo que he dicho.
Saludos,


La franja horaria es GMT +2. Ahora son las 22:53:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi