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.
- Togli gli spazi:
DE89370400440532013000. - Sposta i primi quattro caratteri in fondo:
370400440532013000DE89. - 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. - 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:
- Scrivi il codice paese seguito da
00e dal BBAN:DE00370400440532013000. - Riordina e converti come sopra:
370400440532013000131400. - Calcola il resto della divisione per 97. Qui è 9.
- 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
- ISO/IEC 7064: il sistema di caratteri di controllo MOD 97-10.
- ISO 13616-1:2020: come lo usa l'IBAN, compresa la conversione delle lettere (da A = 10 a Z = 35).
- IBAN Registry di SWIFT: gli IBAN di esempio e la lunghezza di ogni paese.