# IBAN

> International Bank Account Number

L'identifiant unique et international d'un compte bancaire. En France, 27 caractères qui contiennent à la fois la banque, le guichet, le numéro de compte et une clé de contrôle.

_Catégorie: technique_

---

## Définition

L'**IBAN** (_International Bank Account Number_) est l'identifiant unique et international d'un compte bancaire, défini par la norme ISO 13616.

Sa longueur varie selon les pays (de 15 à 34 caractères), mais son rôle est partout le même : permettre à n'importe quelle banque d'acheminer un paiement vers le bon compte sans ambiguïté.

## Anatomie d'un IBAN français

Un IBAN français fait 27 caractères. Exemple : `FR76 3000 6000 0112 3456 7890 189`

- `FR` — code pays (2 lettres, ISO 3166).
- `76` — clé de contrôle internationale (2 chiffres, algorithme MOD 97-10).
- `30006` — code banque (5 chiffres).
- `00001` — code guichet (5 chiffres).
- `12345678901` — numéro de compte (11 caractères).
- `89` — clé RIB nationale (2 chiffres).

Les 23 derniers caractères constituent l'ancien RIB français : l'IBAN, c'est le RIB préfixé du code pays et de la clé de contrôle internationale.

## Longueurs d'IBAN par pays

Quelques repères :

- **Allemagne** : 22 caractères (`DE89 3704 0044 0532 0130 00`).
- **France, Espagne, Italie** : 27 caractères.
- **Belgique** : 16 caractères.
- **Suisse** : 21 caractères.
- **Malte** : 31 caractères (le plus long en zone SEPA).

D'où l'erreur d'intégration la plus fréquente : prévoir un champ de 27 caractères en croyant que c'est universel. Il faut prévoir 34 caractères au maximum.

## Validation : MOD 97-10

L'algorithme est simple :

1. Déplacer les 4 premiers caractères à la fin de la chaîne.
2. Remplacer chaque lettre par sa position dans l'alphabet + 9 (A=10, B=11, … Z=35).
3. Calculer le résultat modulo 97.
4. Si le résultat vaut 1, l'IBAN est structurellement valide.

Attention : structurellement valide ne veut pas dire compte existant. C'est la VoP qui vérifie en plus que le nom correspond au titulaire et que le compte est actif.

## IBAN vs BIC

- **IBAN** — identifie le compte (et indirectement la banque via les codes pays et banque).
- **BIC** — identifie la banque (son code SWIFT).

Depuis 2016, le BIC n'est plus obligatoire en SEPA : l'IBAN seul suffit, la banque destinataire pouvant en être déduite. Le BIC reste utile pour les virements hors SEPA ou comme champ de cohérence dans certaines API.

## Ce que l'IBAN ne fait pas

- **Ne révèle pas le nom du titulaire** : c'est le rôle de la VoP.
- **Ne garantit pas que le compte est actif** : un IBAN valide peut correspondre à un compte fermé.
- **N'est pas confidentiel au sens strict** : il transite dans tout virement, mais reste sensible (risque de prélèvements frauduleux si le mandat n'est pas vérifié).
- **N'est pas un RIB** : le RIB est le format national français qui réunit IBAN, BIC, titulaire et adresse sous forme imprimable.

## Dans l'écosystème PSD2

L'IBAN est l'identifiant clé de toutes les API DSP2 : `debtorAccount` du PAO, `creditorAccount` du PR dans STET et Berlin Group, obligatoire dans toute requête de virement.

```mermaid
flowchart LR
    subgraph IBAN_FR["IBAN français — 27 caractères"]
        FR["FR<br/>(pays)"]
        K["76<br/>(clé MOD 97)"]
        BANK["30006<br/>(banque)"]
        BR["00001<br/>(guichet)"]
        ACC["12345678901<br/>(compte)"]
        RIB["89<br/>(clé RIB FR)"]
    end

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

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

## Exemples concrets

- **Champ de formulaire** : `maxlength=34`, suppression des espaces et passage en majuscules côté front, validation MOD 97-10 côté serveur avant l'appel API. L'erreur classique : ne valider que la longueur.
- **Affichage** : grouper par blocs de 4 caractères séparés par des espaces — standard ISO et bien plus lisible.
- **Bibliothèques** : `iban` (npm), `python-stdnum`, `iban4j` (Java) gèrent validation et formatage — ne jamais réimplémenter MOD 97-10 à la main.
- **Wise, Revolut, N26** : leurs IBAN clients sont souvent belges ou lituaniens (agrément local). Parfaitement valides en SEPA pour un client français, même si certains employeurs les refusent encore — une pratique illégale au sens du règlement SEPA.
- **IBAN virtuels** : Treezor, Swan ou Stripe Treasury génèrent des IBAN virtuels rattachés à un compte parent, pour tracer par client ou par usage — très utilisé pour la collecte.
- **Sécurité** : ne jamais logger un IBAN en clair ; à traiter comme une donnée sensible.

## Sources

- [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

---

Source: https://openfinanceguide.com/fr/glossary/iban
