En febrero de 2014 entra en vigor SEPA (Zona Única de Pago en Euros), una apuesta europea para garantizar que todas las transacciones se efectuen en euros.
A nosotros, esto nos supone dejar de trabajar con el formato CCC y comenzar a trabajar con el formato IBAN.
Adjunto funciones necesarias para poder trabajar correctamente:
Función para validar un código IBAN
/**
* @brief Función que recibe un código IBAN y lo valida.
*
* @param iban
* Código IBAN a validar.
*
* @return boolean
*/
function [module]_validate_iban($iban) {
$account = strtoupper(trim($iban));
$charmap = array (
'A' => 10,
'B' => 11,
'C' => 12,
'D' => 13,
'E' => 14,
'F' => 15,
'G' => 16,
'H' => 17,
'I' => 18,
'J' => 19,
'K' => 20,
'L' => 21,
'M' => 22,
'N' => 23,
'O' => 24,
'P' => 25,
'Q' => 26,
'R' => 27,
'S' => 28,
'T' => 29,
'U' => 30,
'V' => 31,
'W' => 32,
'X' => 33,
'Y' => 34,
'Z' => 35,
);
if (strlen($account) != 24) {
return FALSE;
}
else {
$letra1 = substr($account, 0, 1);
$letra2 = substr($account, 1, 1);
if (isset($charmap[$letra1]) && isset ($charmap[$letra2])) {
$num1 = $charmap[$letra1];
$num2 = $charmap[$letra2];
}
else {
return FALSE;
}
$final = substr($account, 2, 2);
$temp = substr($account, 4, strlen($account)) . $num1 . $num2 . $final;
if (bcmod($temp, 97) == 1) {
return TRUE;
}
else {
return FALSE;
}
}
}
Función para obtener el dígito de control del código IBAN a partir de un código CCC
/**
* @brief Función que recibe un CCC y devuelve el campo IBAN
*
* @param codigo_pais
* Código de país. 2 caracteres en mayúsculas.
* @param ccc
* Código cuenta corriente del que calcular este campo.
*/
function [module]_calculate_iban($codigo_pais, $ccc) {
$charmap = array (
'A' => 10,
'B' => 11,
'C' => 12,
'D' => 13,
'E' => 14,
'F' => 15,
'G' => 16,
'H' => 17,
'I' => 18,
'J' => 19,
'K' => 20,
'L' => 21,
'M' => 22,
'N' => 23,
'O' => 24,
'P' => 25,
'Q' => 26,
'R' => 27,
'S' => 28,
'T' => 29,
'U' => 30,
'V' => 31,
'W' => 32,
'X' => 33,
'Y' => 34,
'Z' => 35,
);
$dividendo = $ccc . $charmap[substr($codigo_pais, 0 , 1)] . $charmap[substr($codigo_pais, 1 , 1)] . '00';
$digito_control = 98 - bcmod($dividendo, 97);
if (strlen($digito_control) == 1) {
$digito_control = 0 . $digito_control;
}
return $codigo_pais . $digito_control;
}