Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-02-2009
GrupoDatasoft GrupoDatasoft is offline
Miembro
 
Registrado: ago 2008
Ubicación: Bogotá - Colombia
Posts: 13
Poder: 0
GrupoDatasoft Va por buen camino
Talking 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.
Responder Con Cita
  #2  
Antiguo 08-02-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Interesante.

Una pregunta, si en lugar de:
Cita:
Empezado por GrupoDatasoft Ver Mensaje
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.
Responder Con Cita
  #3  
Antiguo 08-02-2009
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
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;
__________________
self.free;

Última edición por droguerman fecha: 08-02-2009 a las 02:51:30.
Responder Con Cita
  #4  
Antiguo 08-02-2009
GrupoDatasoft GrupoDatasoft is offline
Miembro
 
Registrado: ago 2008
Ubicación: Bogotá - Colombia
Posts: 13
Poder: 0
GrupoDatasoft Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 08-02-2009
GrupoDatasoft GrupoDatasoft is offline
Miembro
 
Registrado: ago 2008
Ubicación: Bogotá - Colombia
Posts: 13
Poder: 0
GrupoDatasoft Va por buen camino
re: Calcular un digito de chequeo

Es decir, siempre la secuencia va a ser : 2 1 2 1 2 1 2 1
Responder Con Cita
  #6  
Antiguo 08-02-2009
GrupoDatasoft GrupoDatasoft is offline
Miembro
 
Registrado: ago 2008
Ubicación: Bogotá - Colombia
Posts: 13
Poder: 0
GrupoDatasoft Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 08-02-2009
GrupoDatasoft GrupoDatasoft is offline
Miembro
 
Registrado: ago 2008
Ubicación: Bogotá - Colombia
Posts: 13
Poder: 0
GrupoDatasoft Va por buen camino
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??
Responder Con Cita
  #8  
Antiguo 09-02-2009
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
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
__________________
self.free;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calcular último dígito del IMEI Emilio PHP 4 14-04-2008 11:15:56
Dígito Verhoeff Antonio Rosas E OOP 1 04-10-2007 23:51:19
Comparar un number dígito a dígito kuan-yiu SQL 2 25-06-2007 17:26:47
Modificar un str dígito a dígito fortran Varios 11 22-12-2003 16:44:46
como calcular el digito de control d una cuenta bancaria User_Baja_2 Varios 3 31-05-2003 15:35:16


La franja horaria es GMT +2. Ahora son las 21:17:46.


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
Copyright 1996-2007 Club Delphi