Publicado en Internet, Tecnología

Validar IBAN en JavaScript

IBAN

Si a estas alturas no has adaptado todavía tus aplicaciones web a la nueva normativa es porque te ha pillado el toro, sin discusión. Pero más allá de este pequeño detalle, si necesitas comprobar el IBAN con y no logras dar con la tecla, no te preocupes, intentar dividir un número de 26 cifras en es una tarea bastante compleja, como ya habrás descubierto si has caído aquí. Por suerte hay una forma diferente de calcular el módulo que con el operador ‘%’. Vamos allá.

// Función que devuelve los números correspondientes a cada letra
function getNumIBAN(letra){
   var letras = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   return letras.search(letra) + 10;
}

// Función que calcula el módulo sin hacer ninguna división
function mod(dividendo, divisor){
   var cDividendo = '';
   var cResto = '';
   
   for (var i in dividendo){
      var cChar = dividendo[i];
      var cOperador = cResto + '' + cDividendo + '' + cChar;
     
      if (cOperador < parseInt(divisor)){
         cDividendo += '' + cChar;
      }else{
         cResto = cOperador % divisor;
         if (cResto == 0){
            cResto = '';
         }
         cDividendo = '';
      }
   }
   cResto += '' + cDividendo;
   if (cResto == ''){
      cResto = 0;
   }
   return cResto;
}

// El típico trim que inexplicamente JavaScript no trae implementado
function trim(texto){
   return texto.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

// Función que comprueba el IBAN
function validaIBAN(IBAN){
   IBAN = IBAN.toUpperCase();
   IBAN = trim(IBAN); // Quita espacios al principio y al final
   IBAN = IBAN.replace(/\s/g, ""); // Quita espacios del medio
   var num1,num2;
   var isbanaux;
   if (IBAN.length != 24){ // En España el IBAN son 24 caracteres
      return false;
   }else{
      num1 = getNumIBAN(IBAN.substring(0, 1));
      num2 = getNumIBAN(IBAN.substring(1, 2));
      isbanaux = IBAN.substr(4) + String(num1) + String(num2) + IBAN.substr(2,2);
      resto = mod(isbanaux,97);
      return (resto==1);
   }
}

Con esto deberías tener suficiente, siempre se pueden hacer más comprobaciones para afinar un poco, como validar que los dos primeros caracteres sean letras y el resto números, o adaptar comprobaciones de longitud y posición para cada país, pero eso ya se lo dejo a cada uno, que aquí lo complicado es lo del módulo.

Para terminar, voy a dejar la explicación de la normativa, supongo que ya la conoceréis de sobra pero nunca está demás leerlo sin parafernalia lingüística:

El IBAN está compuesto por 2 letras que son el código del país, 2 números que hacen de dígitos de control y hasta un máximo de 30 posiciones más para la cuenta, la cantidad exacta depende del país. En España son 20 dígitos para la cuenta, así que tendremos los IBAN de 24 caracteres en total.

La manera de comprobar que un IBAN es correcto es siguiendo los siguientes pasos (ejemplo: ES38 0081 0283 4100 0111 1416):

  • Transformar las letras en números según la siguiente serie: A = 10, B = 11, C = 12, etc. Por lo tanto para España sería E = 14 y S = 28
  • Pasar tanto los códigos de las letras del país como los dígitos de control al final de la numeración, quedando así: 0081 0283 4100 0111 1416 142838
  • Obtener el resto de dividir éste último número entre 97 (mod 97)
  • Si el resto es 1, el IBAN es correcto, en otro caso no lo es

Espero que os sirva y ante cualquier duda ya sabéis, comentarios aquí abajo.

4 comentarios sobre “Validar IBAN en JavaScript

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *