# IBAN

> International Bank Account Number

El identificador único e internacional de una cuenta bancaria. En Francia, 27 caracteres que contienen a la vez el banco, la oficina, el número de cuenta y un dígito de control.

_Categoría: technique_

---

## Definición

El **IBAN** (_International Bank Account Number_) es el identificador único e internacional de una cuenta bancaria, definido por la norma ISO 13616.

Su longitud varía según el país (de 15 a 34 caracteres), pero su función es la misma en todas partes: permitir que cualquier banco encamine un pago a la cuenta correcta sin ambigüedad.

## Anatomía de un IBAN francés

Un IBAN francés tiene 27 caracteres. Ejemplo: `FR76 3000 6000 0112 3456 7890 189`

- `FR` — código de país (2 letras, ISO 3166).
- `76` — dígitos de control internacionales (2 dígitos, algoritmo MOD 97-10).
- `30006` — código de banco (5 dígitos).
- `00001` — código de oficina (5 dígitos).
- `12345678901` — número de cuenta (11 caracteres).
- `89` — clave RIB nacional (2 dígitos).

Los 23 últimos caracteres constituyen el antiguo RIB francés: el IBAN es el RIB prefijado con el código de país y los dígitos de control internacionales.

## Longitudes de IBAN por país

Algunas referencias:

- **Alemania**: 22 caracteres (`DE89 3704 0044 0532 0130 00`).
- **Francia, España, Italia**: 27 caracteres.
- **Bélgica**: 16 caracteres.
- **Suiza**: 21 caracteres.
- **Malta**: 31 caracteres (el más largo de la zona SEPA).

De ahí el error de integración más frecuente: prever un campo de 27 caracteres creyendo que es universal. Hay que prever 34 caracteres como máximo.

## Validación: MOD 97-10

El algoritmo es sencillo:

1. Mover los 4 primeros caracteres al final de la cadena.
2. Sustituir cada letra por su posición en el alfabeto + 9 (A=10, B=11, … Z=35).
3. Calcular el resultado módulo 97.
4. Si el resultado es 1, el IBAN es estructuralmente válido.

Atención: estructuralmente válido no significa que la cuenta exista. Es la VoP la que comprueba además que el nombre corresponde al titular y que la cuenta está activa.

## IBAN vs BIC

- **IBAN** — identifica la cuenta (e indirectamente el banco, a través de los códigos de país y de banco).
- **BIC** — identifica el banco (su código SWIFT).

Desde 2016, el BIC ya no es obligatorio en SEPA: el IBAN por sí solo basta, ya que el banco destinatario puede deducirse de él. El BIC sigue siendo útil para las transferencias fuera de SEPA o como campo de coherencia en algunas API.

## Lo que el IBAN no hace

- **No revela el nombre del titular**: ese es el papel de la VoP.
- **No garantiza que la cuenta esté activa**: un IBAN válido puede corresponder a una cuenta cerrada.
- **No es confidencial en sentido estricto**: viaja en cada transferencia, pero sigue siendo sensible (riesgo de adeudos fraudulentos si no se verifica el mandato).
- **No es un RIB**: el RIB es el formato nacional francés que reúne IBAN, BIC, titular y dirección en forma imprimible.

## En el ecosistema PSD2

El IBAN es el identificador clave de todas las API de la PSD2: el `debtorAccount` de la autorización de pago, el `creditorAccount` de la petición de pago en STET y el Berlin Group, obligatorio en cualquier petición de transferencia.

```mermaid
flowchart LR
    subgraph IBAN_FR["IBAN francés — 27 caracteres"]
        FR["FR<br/>(país)"]
        K["76<br/>(clave MOD 97)"]
        BANK["30006<br/>(banco)"]
        BR["00001<br/>(oficina)"]
        ACC["12345678901<br/>(cuenta)"]
        RIB["89<br/>(clave RIB FR)"]
    end

    FR --> K --> BANK --> BR --> ACC --> RIB

    IBAN_FR -->|"Encaminamiento"| PAYMENT["Pago SEPA<br/>(SCT, SCT Inst, SDD)"]
```

## Ejemplos concretos

- **Campo de formulario**: `maxlength=34`, eliminación de los espacios y paso a mayúsculas en el front, validación MOD 97-10 en el servidor antes de la llamada a la API. El error clásico: validar solo la longitud.
- **Visualización**: agrupar en bloques de 4 caracteres separados por espacios — estándar ISO y mucho más legible.
- **Bibliotecas**: `iban` (npm), `python-stdnum`, `iban4j` (Java) gestionan la validación y el formato — nunca reimplementar el MOD 97-10 a mano.
- **Wise, Revolut, N26**: sus IBAN de clientes suelen ser belgas o lituanos (licencia local). Perfectamente válidos en SEPA para un cliente francés, aunque algunos empleadores todavía los rechacen — una práctica ilegal según el reglamento SEPA.
- **IBAN virtuales**: Treezor, Swan o Stripe Treasury generan IBAN virtuales vinculados a una cuenta matriz, para rastrear por cliente o por uso — muy utilizado en el cobro.
- **Seguridad**: nunca registrar un IBAN en claro; tratarlo como un dato sensible.

## Fuentes

- [ISO 13616 — International Bank Account Number (IBAN)](https://www.iso.org/standard/81090.html) — ISO
- [IBAN Registry](https://www.swift.com/standards/data-standards/iban-international-bank-account-number) — SWIFT

---

Fuente: https://openfinanceguide.com/es/glossary/iban
