|
Navegar
| Enviar un nuevo recorte
| Crear un Paquete
Función para calcular el IBAN
|
Type:
Funciones |
Category:
Manipulación de Base de Datos
|
License:
GNU General Public License |
Language:
SQL
|
Description:
Función para calcular el IBAN desde la cuenta bancaria.
|
Versiones del Recorte::
Descargar una versión texto de este código pulsando en "Descargar Versión"
útlimo recorte de la versión: :1.00
set term ^;
commit work^
execute procedure ur_borra_procedimiento('CALCULAR_IBAN')^
commit work^
CREATE PROCEDURE CALCULAR_IBAN (
PAIS CHAR(2),
CUENTA VARCHAR(30) )
RETURNS (
IBAN VARCHAR(34) )
AS
DECLARE VARIABLE caracteres varchar(26);
declare variable posicion smallint;
declare variable posicion1 smallint;
declare variable posicion2 smallint;
declare variable encontrado smallint;
declare variable encontrado1 smallint;
declare variable encontrado2 smallint;
declare variable paisnum varchar(4);
declare variable cuentapais varchar(36);
declare variable cuentaaux varchar(9);
declare variable valormod integer;
declare variable cantidad smallint;
BEGIN
pais = UPPER(pais);
/* Tabla de conversión de caracteres de paises */
caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
paisnum = '';
/* Encontrar posición de la primera y segunda letra del pais en la tabla */
posicion = 0;
encontrado1 = 0;
encontrado2 = 0;
posicion1 = 1;
posicion2 = 1;
while ((posicion <= 26) and (encontrado1 = 0 or encontrado2=0)) do
begin
posicion = posicion + 1;
if (SUBSTR(pais,1,1) = SUBSTR(caracteres,posicion,posicion)) then
begin
encontrado1 = 1;
posicion1 = posicion;
end
if (SUBSTR(pais,2,2) = SUBSTR(caracteres,posicion,posicion)) then
begin
encontrado2 = 1;
posicion2 = posicion;
end
end
if (encontrado1 = 1) then
begin
posicion1 = posicion1 + 9;
paisnum = :paisnum || :posicion1;
end
if (encontrado2 = 1) then
begin
posicion2 = posicion2 + 9;
paisnum = :paisnum || :posicion2;
end
/* Colocamos codigo numerico de pais a la derecha de la cuenta */
cuentapais = :cuenta || :paisnum || '00';
posicion = 1;
encontrado = 0;
cantidad = 9;
valormod = null;
while (encontrado = 0) do
begin
cuentaaux = substr(:cuentapais,:posicion,posicion+:cantidad-1);
if (valormod is not null) then cuentaaux = cast(valormod as varchar(2)) || :cuentaaux;
posicion = :posicion + :cantidad;
execute procedure UT_MODULUS(cast(cuentaaux as integer),97)
RETURNING_VALUES :valormod;
if (strlen(cast(:valormod as varchar(2))) = 1) then
cantidad = 8;
else cantidad = 7;
if (posicion > strlen(:cuentapais)) then encontrado = 1;
end
valormod = 98 - valormod;
if (strlen(cast(valormod as varchar(2))) = 1) then
iban = :pais || '0' || cast(valormod as varchar(2)) || :cuenta;
else iban = :pais || cast(valormod as varchar(2)) || :cuenta;
SUSPEND;
END^
commit work^
Si ha modificado una versión de este recorte sustancialmente y crea que debe compartirlo con otros, por favor, hágalo..
|
|