La Unión Europea emprendió el proyecto de «SEPA» «Single European Payments» (Zona Única de Pagos en Euros) que persigue la implantación de servicios de pago comunes a toda la Unión que sustituyan a los actuales servicios de pago nacionales. Esta circunstancia conlleva, entre otras cosas, la desaparición de los antiguos C.C.C. (Códigos de Cuenta Corriente) de 20 dígitos, al incorporarse el IBAN a la numeración, de manera que las cuentas bancarias se identificarán con una secuencia alfanumérica de 24 caracteres formada por 5 grupos de 4 dígitos precedidos por 2 letras identificativas del país y 2 dígitos de control.
El Reglamento (CE) 260/2012, establece el día 1 de febrero de 2014 como fecha final de migración a SEPA y momento a partir del cual todas las transferencias y adeudos realizados en España serán idénticos a los realizados en cualquier país de la zona SEPA.
Si como es nuestro caso, necesitamos obtener el IBAN de un gran numero de clientes, en lugar de contactar con ellos y solicitarlo de uno en uno, es más operativo el cálculo del IBAN a partir de los 20 dígitos del número de cuenta.
La siguiente función para Oracle en PL/SQL hace justo eso.
FUNCTION CUENTA_BANCARIA_IBAN(numCuenta VARCHAR2) RETURN varchar2 IS sIBAN varchar2(24); nIBANConversion number; BEGIN IF numCuenta IS NULL THEN RETURN ''; ELSE nIBANConversion := TO_NUMBER(concat(numCuenta, '142800')); sIBAN := replace(concat('ES',TO_CHAR(98-MOD(nIBANConversion,97),'00')), ' ', ''); sIBAN := concat(sIBAN, numCuenta); RETURN sIBAN; END IF; END;
OJO!!! Solo está diseñado para obtener códigos a partir de cuentas bancarias españolas.
Buenas, muchas gracias por tu aporte. Me hacía falta una función para SQL Server, y he podido «traducir» la tuya a este lenguaje. La copio a continuación por si puede ser de utilidad:
CREATE FUNCTION dbo.CCC_TO_IBAN(@numCuenta NVARCHAR(50))
RETURNS NVARCHAR(50)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @sIBAN nvarchar(24);
DECLARE @nIBANConversion numeric(30);
IF ((@numCuenta IS NULL) OR (LEN(@numCuenta) 20))
BEGIN
RETURN '';
END
SET @nIBANConversion = CONVERT(numeric(30),(@numCuenta + '142800'));
SET @sIBAN = REPLACE('ES' + RIGHT('00' + convert(nvarchar(2),(98 -(@nIBANConversion % 97))), 2), ' ', '');
SET @sIBAN = @sIBAN + @numCuenta;
RETURN @sIBAN;
END;
Por si interesa, les dejo un enlace a un gadget que convierte su número de cuenta a formato CCC e IBAN.
http://informatica-pfont.blogspot.com.es/2011/02/calculo-ccc-iban.html
Espero que les sea de utilidad.