Validar IBAN

Post image

Validación de un IBAN

En mi trabajo he de validar números de IBAN ( International Bank Account Number) con mucha frecuencia.

Hasta ahora he utilizado un algoritmo que “alguien” había conseguido en internet, pero no me terminaba de convencer. En primer lugar porque no entendía muy bien alguna de las operaciones que hacía y, en segundo lugar, porque pensaba que se podría realizar con menos líneas de código.

Después de darle algunas vueltas, este es el resultado, bastante compacto, en mi opinión.

La función isValidIbanSpanish devuelve true o false en función de si el IBAN pasado como parámetro es válido o no lo es.

function isValidIbanSpanish(iban) {
  const LETRAS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

  function mod(num, a) {
    let res = 0;
    // Trabajar con números muy grandes en javascript puede dar resultados no fiables. Para hallar el módulo se hace paso a paso a través de esta función.
    // Recorrer todos los dígitos del IBAN
    // Multiplicar el resultado anterior por 10, sumar el dígito que toque y calcular el resto
    for (let i = 0; i < num.length; i++)
      res = (res * 10 + parseInt(num[i])) % a;
    return res;
  }

  // Pasar a mayúsculas y quitar espacios
  let _iban = iban.toUpperCase().trim().replace(/\s/g, "");
  if (_iban.length !== 24) return false;
  // Dígito de control del iban a comprobar
  const _dc = _iban.substring(2, 4);
  // Trasladar las dos primeras posiciones (las letras) al final.
  // Antes de hacerlo es  preciso convertirlas a números.
  //  Se busca su posición en el array LETRAS y se suma 10.
  let n1 = LETRAS.indexOf(_iban.substring(0, 1)) + 10;
  let n2 = LETRAS.indexOf(_iban.substring(1, 2)) + 10;
  _iban = _iban.substring(4) + n1 + n2 + "00";
  _mod = mod(_iban, 97);
  dc = 98 - _mod;
  dc = dc < 10 ? "0" + dc : dc;
  if (_dc === String(dc)) return true;
  else return false;
}

También te puede interesar: