Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Calcular un digito de chequeo (https://www.clubdelphi.com/foros/showthread.php?t=63296)

GrupoDatasoft 08-02-2009 02:06:03

Calcular un digito de chequeo
 
Hola a todos, estoy haciendo una aplicación para recaudo en bancos, el banco me exige una rutina para calcular el digito de chequeo correspondiente a cada cliente, pero no tengo ni idea de como implementarlo a delphi, trabajo con delphi 5 y tablas paradox, alguien me puede ayudar?
la rutina es la siguiente:

Codigo del cliente: 0156674 (maximo de 7 digitos)

1 5 6 6 7 4
x2 x1 x2 x1 x2 x1

2 5 12 6 14 4

Se suman los resultados así:

2 + 5 + (1+2) + 6 + (1+4) + 4 = 25, este resultado siempre debe restarse de 30 y el resultado es el digito de chequeo que corresponde a este codigo de cliente. Como ven los resultados de 2 digitos como el 12 se tienen que sumar entre si es decir: 12 se suma (1+2). Bueno, el algoritmo lo entiendo muy bien porque es fácil, lo que no sé es como aplicar eso en delphi a partir del código del cliente que se encuentra en un dbedit y calcular el digito de chequeo de este cliente y poner el resultado en otro dbedit. Agradezco enormemente a quien me pueda ayudar con este caso porque de verdad es muy importante para mí poder resolver esto. Gracias a todos los que me den una pista de como hacerlo.

Al González 08-02-2009 02:25:28

Interesante.

Una pregunta, si en lugar de:
Cita:

Empezado por GrupoDatasoft (Mensaje 337425)
Codigo del cliente: 0156674 (maximo de 7 digitos)

1 5 6 6 7 4
x2 x1 x2 x1 x2 x1

el código de cliente fuera: 2156674

¿La primera operación sería:
(2 X 2) + (1 X 1) + (5 X 2) + (6 X 1) + (6 X 2) + (7 X 1) + (4 X2)

o bien:
(2 X 1) + (1 X 2) + (5 X 1) + (6 X 2) + (6 X 1) + (7 X 2) + (4 X1)

?

Otra pregunta: Entiendo que los ceros se descartan, pero al suprimir un cero intermedio, ¿con los dígitos restantes se mantiene la secuencia de factores 2-1-2-1...? ¿O podría llegar a quedar "2-1-2-2-1..."?

Saludos.

Al González. :)

droguerman 08-02-2009 02:47:13

podria ser algo asi (falta optimizar)
Código Delphi [-]
var
  texto : string;
  i : integer;
  suma : integer;
  resultado : integer;
 begin
  texto := IntToStr(numero);
  suma := 0;
  for i:= 1 to length(texto) do
  begin
      suma := suma + StrToInt( texto[i] ) * (1+(i mod 2));
  end;
 resultado := 30-suma;
end;

GrupoDatasoft 08-02-2009 05:39:48

re:Calcular un digito de chequeo
 
la operacion seria asi:
si el codigo del cliente fuera:
2156674

entonces:
(2 X 2) + (1 X 1) + (5 X 2) + (6 X 1) + (6 X 2) + (7 X 1) + (4 X2)

los ceros intermedios no se descartan, ellos se multiplican por su primo correspondiente, solo se descarta si el cero es al principio.

GrupoDatasoft 08-02-2009 05:40:35

re: Calcular un digito de chequeo
 
Es decir, siempre la secuencia va a ser : 2 1 2 1 2 1 2 1

GrupoDatasoft 08-02-2009 05:49:57

re:Calcular un digito de chequeo
 
Exactamente lo que me piden en el banco es lo siguiente:

TAL CUAL:

DEPOSITO NACIONAL CON REFERENCIA
RUTINA MODULO 5


El código del cliente es un campo de 8 caracteres; el cálculo se hace tomando a partir del primer digito significativo (no cero) de izquierda a derecha y multiplicando sucesivamente por 2 y por 1, se suman luego los resultados de estas multiplicaciones y se aproxima a la centena más próxima por arriba o por abajo.

Código de cliente 081802
8 1 8 0 2
X2 X1 X2 X1 X2
16 1 16 0 4

(1+6) + 1 + (1+6) + 0 + 4 = 19 Este valor se resta de 20 y el dígito es 1.

Código de cliente 0156674
1 5 6 6 7 4
X2 X1 X2 X1 X2 X1
2 5 12 6 14 4

2 + 5 + (1+ 2) + 6 + (1+4) + 4 = 25 se resta de 30 o se le resta 20 el dígito es 5
Cuando la sumatoria de las multiplicaciones termina en 5 es indiferente restarlo la decena más próxima por arriba o restarle las más prósima por abajo el dígito será el mismo 5.
Los documentos pueden contener como primer carácter una letra en cuyo caso se sonsiderara el primer dígito numérico a la iaquierda para efectuar las multiplicaciones respectivas.

GrupoDatasoft 08-02-2009 05:50:59

Calcular un digito de chequeo
 
Exactamente eso es lo que debo aplicar en delphi, y no tengo idea de como hacerlo, alguna idea que me pueda ayudar??

droguerman 09-02-2009 17:53:53

El código que te envie hace eso, la parte (1 + (i mod 2) ) realiza la multiplicación por 1 o por 2 según el cado, el error de la resta deberia ser algo como (falta optimizar otra vez).

Código Delphi [-]
  if resultado mod 10 > 5 then
    resultado := suma mod 10
 else 
   resultado := suma - (suma div 10)*10;

saludos


La franja horaria es GMT +2. Ahora son las 16:16: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