Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/04/2013, 04:16
Avatar de pepitogrillo13051993
pepitogrillo13051993
 
Fecha de Ingreso: febrero-2013
Mensajes: 20
Antigüedad: 11 años, 3 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!