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. |
Interesante.
Una pregunta, si en lugar de: Cita:
¿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. :) |
podria ser algo asi (falta optimizar)
|
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. |
re: Calcular un digito de chequeo
Es decir, siempre la secuencia va a ser : 2 1 2 1 2 1 2 1
|
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. |
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??
|
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).
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