Come funzionano le cifre di controllo dell'IBAN

Il metodo MOD-97 passo per passo, con un esempio svolto da seguire su carta e qualche riga di codice.

Aggiornato il

Il terzo e il quarto carattere di ogni IBAN sono le cifre di controllo. Si calcolano da tutti gli altri caratteri con un metodo chiamato MOD 97-10, definito dalla norma ISO/IEC 7064. Quando digiti un IBAN, il software ripete il calcolo; se il risultato non torna, nell'IBAN c'è un errore di battitura.

Verificare un IBAN in quattro passaggi

Prendi l'IBAN tedesco di esempio DE89 3704 0044 0532 0130 00.

  1. Togli gli spazi: DE89370400440532013000.
  2. Sposta i primi quattro caratteri in fondo: 370400440532013000DE89.
  3. Sostituisci ogni lettera con due cifre, dove A = 10, B = 11 e così via fino a Z = 35. Qui D diventa 13 ed E diventa 14: 370400440532013000131489.
  4. Dividi questo numero per 97 e tieni il resto. Se il resto è 1, l'IBAN è valido.

Nell'esempio, 370400440532013000131489 diviso 97 dà resto esattamente 1, quindi le cifre di controllo sono corrette.

Calcolare le cifre di controllo

Per creare le cifre di controllo di un nuovo IBAN, segui gli stessi passaggi mettendo 00 al posto delle cifre di controllo:

  1. Scrivi il codice paese seguito da 00 e dal BBAN: DE00370400440532013000.
  2. Riordina e converti come sopra: 370400440532013000131400.
  3. Calcola il resto della divisione per 97. Qui è 9.
  4. Sottrai il resto da 98: 98 − 9 = 89. Se serve, aggiungi uno zero davanti per arrivare a due cifre (per esempio 7 diventa 07).

Le cifre di controllo sono 89, e l'IBAN completo è DE89370400440532013000. Siccome il risultato del passaggio 4 è sempre compreso tra 2 e 98, le cifre di controllo di un IBAN valido non sono mai 00, 01 o 99.

Lavorare con numeri lunghi

Il numero convertito ha 17 cifre per la Norvegia, 24 per la Germania e più di 40 per un IBAN maltese che contiene lettere. Quasi sempre sono troppe per una calcolatrice normale o per un intero a 64 bit, che ne contiene circa 19. Puoi spezzare il numero. Prendi le prime nove cifre, calcola il resto, scrivi quel resto davanti alle cifre successive e ripeti:

Passaggio Numero Resto della divisione per 97
1 370400440 23
2 23 + 5320130 = 235320130 70
3 70 + 0013148 = 700013148 38
4 38 + 9 = 389 1

Il resto finale è 1, lo stesso risultato della divisione completa.

Lo stesso controllo nel codice

JavaScript, elaborando una cifra alla volta, così non servono numeri grandi:

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;
}

Python, dove gli interi possono essere grandi quanto serve:

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

Queste funzioni controllano solo la struttura e le cifre di controllo. Un validatore completo controlla anche che il paese usi l'IBAN e che la lunghezza sia quella prevista per quel paese: le lunghezze di tutti i paesi che supportiamo sono nei formati per paese.

Per controllare a mano un singolo IBAN, incollalo nel validatore IBAN: ti mostra quale controllo non è superato e, quando sono sbagliate solo le cifre di controllo, quelle giuste. Se preferisci non mantenere questo codice da solo, iban-check è la nostra libreria open source per JavaScript e TypeScript. Esegue tutti i controlli secondo il registro IBAN di SWIFT e non ha dipendenze. Installala da npm con npm install iban-check.

Cosa intercetta il controllo

Il metodo funziona bene con gli errori che si fanno digitando. Una singola cifra sbagliata o lo scambio di due cifre vicine cambiano sempre il resto, quindi vengono sempre rilevati. Gli altri errori sfuggono più o meno una volta su cento.

Il controllo non può dire se un conto esiste. Un IBAN con cifre di controllo corrette può comunque rimandare a un codice banca inesistente o a un conto chiuso. Per questo gli IBAN del nostro generatore superano il controllo anche se nessuna banca li ha emessi.

Cifre di controllo nazionali

Alcuni paesi aggiungono proprie cifre di controllo dentro il BBAN, calcolate con regole nazionali. Nell'IBAN italiano il BBAN inizia con una lettera chiamata CIN, Francia e Monaco lo chiudono con la "clé RIB" di due cifre, la Spagna ha due cifre di controllo tra il codice filiale e il numero di conto e il Belgio termina con due cifre di controllo. Questi controlli sono separati dalle cifre di controllo dell'IBAN: un IBAN può superare il MOD-97 e fallire comunque un controllo nazionale. Le cifre di controllo nazionali nell'IBAN spiega ogni metodo, paese per paese.

Fonti

Ti serve un IBAN di test?

Genera un IBAN valido per uno qualsiasi dei 91 paesi, copialo nel formato che ti serve e guarda cosa significa ogni segmento.

Apri il generatore