Pasar al contenido principal

Trabajando con IBAN

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;
}