Dado que a partir del 1 de febrero de 2014 se cambia el formato para efectuar pagos por vía telemática y hay que aplicar la normativa SEPA; la AEB ha publicado la nueva normativa para dichos soportes informáticos y se puede consultar el formato de los nuevos CSB19 (CSB 19.14) en
Adeudos Directos SEPA en fichero electrónico – Esquema Básico.
El protocolo de validación lo encontré en
Código Internacional de Cuenta Bancaria (IBAN) y me he hecho la rutina. Este es el código:
Código:
AnsiString CalIban(AnsiString Cuenta)
{
AnsiString cAux;
Cuenta = Cuenta + "142800";
cAux = FormatFloat("0", StrToInt(Cuenta.SubString(1, 9)) % 97);
Cuenta = Cuenta.SubString(10, Cuenta.Length());
while (!Cuenta.IsEmpty())
{
if (StrToInt(cAux) < 10)
{
cAux = cAux + Cuenta.SubString(1, 8);
Cuenta = Cuenta.SubString(9, Cuenta.Length());
}
else
{
cAux = cAux + Cuenta.SubString(1, 7);
Cuenta = Cuenta.SubString(8, Cuenta.Length());
}
cAux = FormatFloat("0", StrToInt(cAux) % 97);
}
return "ES" + FormatFloat("00", 98 - StrToInt(cAux));
}
//---------------------------------------------------------------------------
El
142800 que aparece en las primeras líneas es el resultado de aplicar la tabla de conversión a las letras
ES y añadir un
00 necesario para que tenga la longitud adecuada, de acuerdo con la norma.
Devuelve las cuatro primeras posiciones del IBAN, que en el caso de España son ESxx siendo xx un número entre 1 y 98. El IBAN completo en el caso de España tiene 24 posiciones: las calculadas con esta rutina (ESxx) más las 20 del CCC, que mantiene su fórmula de cálculo (
Letra DNI,Nº AÑOS, DIGITO CONTROL CUENTA , D.CONTROL EAN 13)
Si hubiera que calcular el IBAN para otros paises hay que tener en cuenta:
1. El código nacional según la norma ISO 3166-1 que podemos encontrar en
ISO 3166-1 decoding table.
2. Dado que hay paises que en las cuentas bancarias admiten letras (caso de Francia) hay que usar la tabla de conversión que aparece en
Código Internacional de Cuenta Bancaria (IBAN)