Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] No funciona buen Funcion comprobar cuenta corriente

Estas en el tema de No funciona buen Funcion comprobar cuenta corriente en el foro de Mysql en Foros del Web. Hola, estoy haciendo una funcion que comprueba si los digitos de control de una cuenta corriente pasada por parametro es correcta. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: ...
  #1 (permalink)  
Antiguo 03/04/2013, 04:16
Avatar de pepitogrillo13051993  
Fecha de Ingreso: febrero-2013
Mensajes: 20
Antigüedad: 11 años, 10 meses
Puntos: 0
Pregunta No funciona buen Funcion comprobar cuenta corriente

Hola, estoy haciendo una funcion que comprueba si los digitos de control de una cuenta corriente pasada por parametro es correcta.
Código MySQL:
Ver original
  1. DELIMITER //
  2. CREATE FUNCTION esCC(numcc CHAR(20)) RETURNS INT
  3.    
  4.     DECLARE correcte INT;
  5.     DECLARE contador INT;
  6.     DECLARE entidad CHAR(4);
  7.     DECLARE oficina CHAR(4);
  8.     DECLARE DC CHAR(2);
  9.     DECLARE num_cuenta CHAR(10);
  10.     DECLARE entidad1 CHAR(2);
  11.     DECLARE entidad2 CHAR(2);
  12.     DECLARE entidad3 CHAR(2);
  13.     DECLARE entidad4 CHAR(2);
  14.     DECLARE oficina1 CHAR(2);
  15.     DECLARE oficina2 CHAR(2);
  16.     DECLARE oficina3 CHAR(2);
  17.     DECLARE oficina4 CHAR(2);
  18.     DECLARE num_cuenta1 CHAR(2);
  19.     DECLARE num_cuenta2 CHAR(2);
  20.     DECLARE num_cuenta3 CHAR(2);
  21.     DECLARE num_cuenta4 CHAR(2);
  22.     DECLARE num_cuenta5 CHAR(2);
  23.     DECLARE num_cuenta6 CHAR(2);
  24.     DECLARE num_cuenta7 CHAR(2);
  25.     DECLARE num_cuenta8 CHAR(2);
  26.     DECLARE num_cuenta9 CHAR(2);
  27.     DECLARE num_cuenta10 CHAR(2);
  28.     DECLARE suma_enof INT;
  29.     DECLARE suma_numcuenta INT;
  30.     DECLARE resto1 INT;
  31.     DECLARE resto2 INT;
  32.     DECLARE primer_dc CHAR(2);
  33.     DECLARE segon_dc CHAR(2);
  34.     DECLARE dc1dc2 CHAR(2);
  35.  
  36.     SET entidad = SUBSTRING(numcc,1,4);
  37.     SET oficina = SUBSTRING(numcc,5,4);
  38.     SET DC = SUBSTRING(numcc,9,2);
  39.     SET num_cuenta = SUBSTRING(numcc,11,10);
  40.     SET contador = 1;
  41.  
  42.     WHILE contador <= 4 DO
  43.         IF contador = 1 THEN
  44.             SET entidad1 = SUBSTRING(entidad,1,1) * 4;
  45.         ELSEIF contador = 2 THEN
  46.             SET entidad2 = SUBSTRING(entidad,2,1) * 8;
  47.         ELSEIF contador = 3 THEN
  48.             SET entidad3 = SUBSTRING(entidad,3,1) * 5;
  49.         ELSE
  50.             SET entidad4 = SUBSTRING(entidad,4,1) * 10;
  51.         END IF;
  52.         SET contador = contador + 1;
  53.     END WHILE;
  54.  
  55.     SET contador = 1;
  56.  
  57.     WHILE contador <= 4 DO
  58.         IF contador = 1 THEN
  59.             SET oficina1 = SUBSTRING(oficina,1,1) * 9;
  60.         ELSEIF contador = 2 THEN
  61.             SET oficina2 = SUBSTRING(oficina,2,1) * 7;
  62.         ELSEIF contador = 3 THEN
  63.             SET oficina3 = SUBSTRING(oficina,3,1) * 3;
  64.         ELSE
  65.             SET oficina4 = SUBSTRING(oficina,4,1) * 6;
  66.         END IF;
  67.         SET contador = contador + 1;
  68.     END WHILE;
  69.  
  70.     SET contador = 1;
  71.     SET suma_enof = entidad1+entidad2+entidad3+entidad4+oficina1+oficina2+oficina3+oficina4;
  72.     SET resto1 = MOD(suma_enof1,11);
  73.     SET primer_dc = 11 - resto1;
  74.     IF primer_dc = 10 THEN
  75.         SET primer_dc = 1;
  76.     END IF;
  77.  
  78.     WHILE contador <= 10 DO
  79.         IF contador = 1 THEN
  80.             SET num_cuenta1 = SUBSTRING(num_cuenta,1,1) * 1;
  81.         ELSEIF contador = 2 THEN
  82.             SET num_cuenta2 = SUBSTRING(num_cuenta,2,1) * 2;
  83.         ELSEIF contador = 3 THEN
  84.             SET num_cuenta3 = SUBSTRING(num_cuenta,3,1) * 4;
  85.         ELSEIF contador = 4 THEN
  86.             SET num_cuenta4 = SUBSTRING(num_cuenta,4,1) * 8;
  87.         ELSEIF contador = 5 THEN
  88.             SET num_cuenta5 = SUBSTRING(num_cuenta,5,1) * 5;
  89.         ELSEIF contador = 6 THEN
  90.             SET num_cuenta6 = SUBSTRING(num_cuenta,6,1) * 10;
  91.         ELSEIF contador = 7 THEN
  92.             SET num_cuenta7 = SUBSTRING(num_cuenta,7,1) * 9;
  93.         ELSEIF contador = 8 THEN
  94.             SET num_cuenta8 = SUBSTRING(num_cuenta,8,1) * 7;
  95.         ELSEIF contador = 9 THEN
  96.             SET num_cuenta9 = SUBSTRING(num_cuenta,9,1) * 3;
  97.         ELSE
  98.             SET num_cuenta10 = SUBSTRING(num_cuenta,10,1) * 6;
  99.         END IF;
  100.         SET contador = contador + 1;
  101.     END WHILE;
  102.  
  103.     SET suma_numcuenta = num_cuenta1+num_cuenta2+num_cuenta3+num_cuenta4+num_cuenta5+num_cuenta6+num_cuenta7+num_cuenta8+num_cuenta9+num_cuenta10;
  104.     SET resto2 = MOD(suma_numcuenta,11);
  105.     SET segon_dc = 11 - resto2;
  106.     IF segon_dc = 10 THEN
  107.         SET segon_dc = 1;
  108.     END IF;
  109.     SET dc1dc2 = CONCAT(primer_dc,segon_dc);
  110.  
  111.     IF dc1dc2 = DC THEN
  112.         SET correcte = 1;
  113.     ELSE
  114.         SET correcte = 0;
  115.     END IF;
  116.    
  117.     RETURN correcte;
  118.  
  119. //
  120. DELIMITER ;
  121.  
  122. SELECT esCC('12345678061234567890');

Al ejecutar el SELECT me devuelve 0 y me debería devolver 1, porque esa cuenta corriente es correcta. No se que pasa, por favor ayudenme!
  #2 (permalink)  
Antiguo 03/04/2013, 06:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: No funciona buen Funcion comprobar cuenta corriente

No parece un trabajo para mysql... hay infinidad de algoritmos en javascript y en php...

PHP
https://www.google.es/search?q=validar+cuenta+corriente+php

Javascript
https://www.google.es/search?q=validar+cuenta+corriente+javascript

ASP
https://www.google.es/search?q=valid...+corriente+asp

C++
https://www.google.es/search?q=valid...riente+c%2B%2B


http://www.programacion.com/articulo...cuenta_ccc_135

en cualquier caso te serviran de guia para corregir tu script.


Analizando veo que tu al calcular los digitos de control haces

SET primer_dc = 11 - resto1;
IF primer_dc = 10 THEN
SET primer_dc = 1;
END IF;

mientras que los scripts hacen

$primer_digito_control = 11 - $resto;
if($primer_digito_control == 11) $primer_digito_control = 0;
if($primer_digito_control == 10) $primer_digito_control = 1;

tanto en el primero como en el segundo digito...

Creo que ahi tienes el error puesto que la unica posibilidad de que el digito sea 0 es que resto sea cero ... pero 11-resto nunca da cero.

Sort
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 03/04/2013 a las 07:11

Etiquetas: mysql-error, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:57.