El tercer y el cuarto carácter de todo IBAN son los dígitos de control. Se calculan a partir de todos los demás caracteres con un método llamado MOD 97-10, definido en la norma ISO/IEC 7064. Cuando escribes un IBAN, el software repite el cálculo; si el resultado no cuadra, es que hay un error de tecleo.
Comprobar un IBAN en cuatro pasos
Toma el IBAN alemán de ejemplo DE89 3704 0044 0532 0130 00.
- Quita los espacios:
DE89370400440532013000. - Pasa los cuatro primeros caracteres al final:
370400440532013000DE89. - Sustituye cada letra por dos dígitos, de modo que A = 10, B = 11 y así sucesivamente hasta Z = 35. Aquí la D pasa a ser 13 y la E, 14:
370400440532013000131489. - Divide este número entre 97 y quédate con el resto. Si el resto es 1, el IBAN es válido.
En el ejemplo, 370400440532013000131489 dividido entre 97 da un resto de exactamente 1, así que los dígitos de control son correctos.
Calcular los dígitos de control
Para obtener los dígitos de control de un IBAN nuevo, sigue los mismos pasos con 00 en lugar de los dígitos de control:
- Escribe el código de país seguido de
00y del BBAN:DE00370400440532013000. - Reordena y convierte como antes:
370400440532013000131400. - Calcula el resto de la división entre 97. Aquí es 9.
- Resta ese resto de 98: 98 − 9 = 89. Si hace falta, completa con un cero a la izquierda hasta tener dos dígitos (por ejemplo, 7 pasa a ser 07).
Los dígitos de control son 89, lo que da DE89370400440532013000. Como el resultado del paso 4 siempre está entre 2 y 98, los dígitos de control de un IBAN válido nunca son 00, 01 ni 99.
Cómo trabajar con números largos
El número convertido tiene 17 dígitos en Noruega, 24 en Alemania y más de 40 en un IBAN maltés que contiene letras. La mayoría son demasiado largos para una calculadora normal o para un entero de 64 bits, que admite unos 19 dígitos. Puedes dividir el número en trozos: toma los nueve primeros dígitos, calcula el resto, escribe ese resto delante de los dígitos siguientes y repite.
| Paso | Número | Resto al dividir entre 97 |
|---|---|---|
| 1 | 370400440 | 23 |
| 2 | 23 + 5320130 = 235320130 | 70 |
| 3 | 70 + 0013148 = 700013148 | 38 |
| 4 | 38 + 9 = 389 | 1 |
El resto final es 1, el mismo resultado que con la división completa.
La misma comprobación en código
En JavaScript, procesando un dígito cada vez para no necesitar números grandes:
function isValidIban(input) {
const iban = input.replace(/\s+/g, '').toUpperCase();
if (!/^[A-Z]{2}\d{2}[A-Z0-9]{11,30}$/.test(iban)) return false;
const rearranged = iban.slice(4) + iban.slice(0, 4);
let remainder = 0;
for (const ch of rearranged) {
const value = parseInt(ch, 36); // 0-9 stay digits, A-Z become 10-35
remainder = (value > 9 ? remainder * 100 : remainder * 10) + value;
remainder %= 97;
}
return remainder === 1;
}
En Python, donde los enteros pueden ser tan grandes como haga falta:
def is_valid_iban(value: str) -> bool:
iban = "".join(value.split()).upper()
if not (iban.isascii() and iban.isalnum() and 15 <= len(iban) <= 34):
return False
rearranged = iban[4:] + iban[:4]
digits = "".join(str(int(ch, 36)) for ch in rearranged)
return int(digits) % 97 == 1
Estas funciones solo comprueban la estructura y los dígitos de control. Un validador de verdad comprueba también que el país usa IBAN y que la longitud es la de ese país, datos que encontrarás en los formatos por país de todos los países que cubrimos.
Para comprobar un solo IBAN a mano, pégalo en el validador de IBAN: te dice qué comprobación falla y, si solo están mal los dígitos de control, cuáles serían los correctos. Si prefieres no mantener este código tú mismo, iban-check es nuestra biblioteca de código abierto para JavaScript y TypeScript. Hace todas las comprobaciones según el registro IBAN de SWIFT y no tiene dependencias. Instálala desde npm con npm install iban-check.
Qué errores detecta
El método detecta bien los errores que se cometen al teclear. Si te equivocas en un solo dígito o intercambias dos dígitos contiguos, el resto cambia siempre, así que el error se detecta. Otros errores se cuelan más o menos una vez de cada cien.
La comprobación no puede saber si una cuenta existe. Un IBAN con dígitos de control correctos puede apuntar a un código de banco que no existe o a una cuenta que ya se cerró. Por eso los IBAN de nuestro generador superan la comprobación aunque ningún banco los haya emitido.
Dígitos de control nacionales
Algunos países añaden sus propios dígitos de control dentro del BBAN, calculados con reglas nacionales. El IBAN italiano empieza el BBAN con una letra llamada CIN, Francia y Mónaco lo terminan con la "clé RIB" de dos dígitos, España tiene dos dígitos de control entre el código de sucursal y el número de cuenta, y Bélgica lo termina con dos dígitos de control. Estos controles son independientes de los dígitos de control del IBAN: un IBAN puede superar el MOD-97 y fallar aun así un control nacional. En Dígitos de control nacionales en el IBAN se explica cada método, país por país.
Fuentes
- ISO/IEC 7064: el sistema de caracteres de control MOD 97-10.
- ISO 13616-1:2020: cómo lo usa el IBAN, incluida la conversión de las letras (A = 10 hasta Z = 35).
- IBAN Registry de SWIFT: los IBAN de ejemplo y la longitud de cada país.