Archive for the 'banche' Tag

Come funziona IBAN

Thursday, January 31st, 2008

Come dicevo poco tempo fa, ultimamente mi è venuta la curiosità di capire come funzioni il codice IBAN – il codice alfanumerico che dal 1° gennaio 2008 deve essere utilizzato per identificare i conti bancari.
In realtà il codice IBAN è piuttosto semplice: non è altro che l’unione delle vecchie coordinate bancarie, a cui vengono aggiunti degli identificativi internazionali.

Nazione + CD + CIN + ABI + CAB + Numero Conto

Quindi, ad esempio, un codice IBAN valido sarà:

IT 60 X 05428 11101 000000123456

CD e CIN sono dei caratteri di controllo (checksum). Un checksum è una cifra che viene calcolata applicando una funzione matematica ad una serie di dati e serve ad verificare che siano corretti. Ad esempio, prendiamo un numero di 4 cifre come “4321” e calcoliamo un checksum che sia “1 se la somma delle cifre è pari, 0 se è dispari”. Essendo 4+3+2+1=10 (pari), il checksum sarà “1”. Ora, supponiamo di scrivere per sbaglio il nostro numero come “4351”. Avremo 4+3+5+1=13 (dispari), che non corrisponderà più al checksum: il meccanismo ci ha permesso di accorgerci di un errore.

Ovviamente CD e CIN sono calcolati in maniera meno banale, per garantire una maggiore sicurezza. Vediamo in dettaglio come.

CIN

Il CIN (Control Internal Number) è una lettera dell’alfabeto che rappresenta un checksum per ABI, CAB e Numero di conto corrente. E’ specifico per gli IBAN che riguardano l’Italia (ed esisteva anche prima). Si calcola così:

  1. Si ottiene una stringa concatenando ABI, CAB e Numero di conto (davanti al numero di conto si aggiungono tanti zeri quanti sono necessari a far sì che la stringa sia di 22 caratteri)
  2. Si converte ogni carattere in posizione dispari (primo, terzo, quinto…) in una cifra tra 0 e 25, in base a una tabella (vedi sotto)
  3. Si converte ogni carattere alfabetico in posizione pari (secondo, quarto…) in una cifra tra 0 e 25 (A=0, B=1, …, K=10, …, Z=25)
  4. Si sommano le cifre così ottenute
  5. Si divide per 26: al resto della divisione (mod26) si fa corrispondere una lettera dell’alfabeto (0=A, 1=B, …, 25=Z)

La tabella di conversione per i caratteri dispari funziona nel modo seguente: A/0 => 1, B/1 => 0, C/2 => 5, D/3 => 7, E/4 => 9, F/5 => 13, G/6 => 15, H/7 => 17, I/8 => 19, J/9 => 21, K => 2, L => 4, M => 18, N => 20, O => 11, P => 3, Q => 6, R => 8, S => 12, T => 14, U => 16, V => 10, W => 22, X => 25, Y=> 24, Z => 23.

E’ da notare che i caratteri in posizione pari vanno convertiti solo se sono lettere: se sono già numeri non è necessaria alcuna conversione.

Supponiamo ad esempio di avere come ABI 05428, come CAB 11101 e come Numero di conto 000000123456. Associamo le cifre ai vari caratteri:

0 5 4 2 8 1 1 1 0 1 0 0 0 0 0 0 1 2 3 4 5 6
1 5 9 2 19 1 0 1 1 1 1 0 1 0 1 0 0 2 7 4 13 6

La somma delle cifre così ottenute è 75, che diviso per 26 fa 2 col resto di 23. Al 23 corrisponde la lettera X, che infatti è il nostro CIN.

CD

La cifra di controllo (CD: Check Digit) è quella che si trova subito dopo l’identificativo della nazione e serve come checksum dell’intero IBAN. Il meccanismo per calcolarlo è lo stesso per ogni paese:

  1. Si inizia ponendo la CD (che è ignota) pari a 00
  2. Si spostano i primi 4 caratteri dell’IBAN (identificativo della nazione e CD) dalla sinistra alla destra della stringa
  3. Si convertono tutti i caratteri alfabetici in numeri compresi tra 10 e 35 (A=10, B=11, …, Z=35)
  4. Si divide per 97 e si considera il resto della divisione (mod97)
  5. Si sottrae il risultato a 98, ottenendo la CD

Sempre utilizzando l’IBAN dell’esempio precedente, spostiamo i primi 4 caratteri ottenendo:

X0542811101000000123456IT00

Sostituiamo le lettere ai numeri corrispondenti:

330542811101000000123456182900

Effettuando l’operazione di mod97 avremo 38, che sottratto a 98 ci fornisce la CD, ovvero 60. Attenzione: a differenza del CIN, non bisogna sommare le cifre tra loro prima dell’operazione di mod97: per quanto possa sembrare strano, la divisione va fatta proprio sul lunghissimo numero ottenuto al punto 3. Una buona calcolatrice scientifica non dovrebbe comunque avere problemi ad eseguire l’operazione. Se non volete mollare il browser, Wolfram Alpha può aiutarvi a fare 330542811101000000123456182900 mod 97.

UPDATE 5/7/08: Ho modificato leggermente il post cercando di chiarire alcuni punti.

UPDATE 24/6/10: Ho aggiunto il link a Wolfram Alpha per il calcolo.

Controllo o non controllo?

Tuesday, January 29th, 2008

La simpatica Cariparma – presso la quale ho appena chiuso il mio conto – mi invia una lettera per avvisarmi che da Gennaio le transazioni bancarie saranno basate sul codice IBAN e amorevolmente mi spiega anche come questo codice funziona.

Leggendo la lettera di spiegazione, ho l’impressione che qualcosa non vada. La rileggo con più attenzione. All’inizio dice (i grassetti sono miei):

Il codice IBAN è composto da una serie di caratteri alfanumerici (numeri e lettere senza caratteri di controllo: punti, virgole o barre) …

Poco più sotto:

… nei 27 caratteri di cui è composto sono compresi anche dei caratteri di controllo

Chiarissimo :|

Al di là delle spiegazioni auto-contraddittorie, però, la lettera mi ha spinto ad informarmi un po’ meglio sul funzionamento dell’IBAN: aspettatevi un post a breve ;)