Comment fonctionnent les chiffres de contrôle de l'IBAN

La méthode MOD-97 étape par étape, avec un exemple à suivre sur papier et quelques lignes de code.

Mis à jour le

Les troisième et quatrième caractères de tout IBAN sont des chiffres de contrôle. Ils sont calculés à partir de tous les autres caractères avec une méthode appelée MOD 97-10, définie par la norme ISO/IEC 7064. Quand vous saisissez un IBAN, le logiciel refait le calcul ; si le résultat est faux, l'IBAN contient une faute de frappe.

Vérifier un IBAN en quatre étapes

Prenons l'IBAN allemand d'exemple DE89 3704 0044 0532 0130 00.

  1. Supprimez les espaces : DE89370400440532013000.
  2. Déplacez les quatre premiers caractères à la fin : 370400440532013000DE89.
  3. Remplacez chaque lettre par deux chiffres, avec A = 10, B = 11 et ainsi de suite jusqu'à Z = 35. Ici, D devient 13 et E devient 14 : 370400440532013000131489.
  4. Divisez ce nombre par 97 et gardez le reste. Si le reste vaut 1, l'IBAN est valide.

Dans l'exemple, la division de 370400440532013000131489 par 97 laisse un reste d'exactement 1 : les chiffres de contrôle sont donc corrects.

Calculer les chiffres de contrôle

Pour créer les chiffres de contrôle d'un nouvel IBAN, suivez les mêmes étapes en mettant 00 à la place des chiffres de contrôle :

  1. Écrivez le code pays suivi de 00 et du BBAN : DE00370400440532013000.
  2. Réorganisez et convertissez comme plus haut : 370400440532013000131400.
  3. Calculez le reste de la division par 97. Ici, il vaut 9.
  4. Soustrayez ce reste de 98 : 98 − 9 = 89. Complétez à deux chiffres si nécessaire (par exemple, 7 devient 07).

Les chiffres de contrôle sont 89, ce qui donne DE89370400440532013000. Comme le résultat de l'étape 4 est toujours compris entre 2 et 98, les chiffres de contrôle d'un IBAN valide ne sont jamais 00, 01 ou 99.

Calculer avec de grands nombres

Le nombre converti compte 17 chiffres pour la Norvège, 24 pour l'Allemagne et plus de 40 pour un IBAN maltais qui contient des lettres. La plupart sont trop longs pour une calculatrice ordinaire ou pour un entier 64 bits, qui contient environ 19 chiffres. Vous pouvez découper le nombre en morceaux. Prenez les neuf premiers chiffres, calculez le reste, écrivez ce reste devant les chiffres suivants, et recommencez :

Étape Nombre Reste de la division par 97
1 370400440 23
2 23 + 5320130 = 235320130 70
3 70 + 0013148 = 700013148 38
4 38 + 9 = 389 1

Le reste final est 1, comme avec la division complète.

Le même contrôle en code

En JavaScript, en traitant un chiffre à la fois pour se passer des grands nombres :

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, où les entiers peuvent être aussi grands que nécessaire :

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

Ces fonctions ne vérifient que la structure et les chiffres de contrôle. Un vrai validateur vérifie aussi que le pays utilise l'IBAN et que la longueur correspond à ce pays ; la liste des formats par pays donne ces informations pour chaque pays que nous prenons en charge.

Pour vérifier un seul IBAN à la main, collez-le dans le validateur d'IBAN : il indique quel contrôle échoue et, quand seuls les chiffres de contrôle sont faux, ceux qui conviendraient. Si vous préférez ne pas maintenir ce code vous-même, iban-check est notre bibliothèque open source pour JavaScript et TypeScript. Elle effectue tous les contrôles selon le registre IBAN de SWIFT et n'a aucune dépendance. Installez-la depuis npm avec npm install iban-check.

Ce que le contrôle détecte

La méthode repère bien les erreurs que l'on commet en tapant. Une erreur sur un seul chiffre ou l'inversion de deux chiffres voisins change forcément le reste : ces fautes sont donc toujours détectées. Les autres erreurs passent à travers dans environ un cas sur cent.

Le contrôle ne dit pas si un compte existe. Un IBAN aux chiffres de contrôle corrects peut tout de même renvoyer à un code banque qui n'existe pas, ou à un compte clôturé. C'est pourquoi les IBAN de notre générateur passent le contrôle alors qu'aucune banque ne les a émis.

Clés de contrôle nationales

Certains pays ajoutent leurs propres chiffres de contrôle dans le BBAN, calculés selon des règles nationales. Dans l'IBAN italien, le BBAN commence par une lettre appelée CIN ; en France et à Monaco, il se termine par la clé RIB à deux chiffres ; l'Espagne place deux chiffres de contrôle entre le code guichet et le numéro de compte, et la Belgique termine le BBAN par deux chiffres de contrôle. Ces contrôles sont distincts des chiffres de contrôle de l'IBAN : un IBAN peut passer le contrôle MOD-97 et échouer quand même au contrôle national. L'article Les clés de contrôle nationales de l'IBAN explique chaque méthode, pays par pays.

Sources

  • ISO/IEC 7064 : le système de caractères de contrôle MOD 97-10.
  • ISO 13616-1:2020 : la façon dont l'IBAN l'utilise, y compris la conversion des lettres (A = 10 à Z = 35).
  • Registre IBAN de SWIFT : les IBAN d'exemple et la longueur de chaque pays.

Besoin d'un IBAN de test ?

Générez un IBAN valide pour l'un des 91 pays proposés, copiez-le au format qui vous convient et voyez ce que signifie chaque segment.

Ouvrir le générateur