L’algoritmo del codice fiscale, regola per regola
Il codice fiscale si costruisce in sei passaggi, che traducono in caratteri altrettanti dati anagrafici (cognome, nome, anno, mese, giorno con il sesso e comune di nascita), e si chiude con un settimo carattere calcolato sui quindici già scritti. Questa pagina è la specifica completa dei sette passaggi, in prosa e in tabelle. Il codice per implementarla sta invece nelle pagine per sviluppatori.
I sei passaggi, più il carattere calcolato
L’ordine è rigido e le lunghezze sono fisse: il risultato è sempre lungo sedici caratteri, qualunque sia la lunghezza del cognome o il nome del comune. I primi sei passaggi convertono un dato; il settimo non converte nulla, controlla.
| # | Blocco | Car. | Da che cosa si ricava |
|---|---|---|---|
| 1 | Cognome | 3 | consonanti in ordine, poi vocali, poi X di riempimento |
| 2 | Nome | 3 | come il cognome, salvo l’eccezione delle quattro consonanti |
| 3 | Anno | 2 | le ultime due cifre dell’anno di nascita |
| 4 | Mese | 1 | una lettera fra dodici, secondo la tabella dei mesi |
| 5 | Giorno e sesso | 2 | il giorno, aumentato di quaranta per il sesso femminile |
| 6 | Comune | 4 | il codice Belfiore del comune o dello Stato di nascita |
| 7 | Controllo | 1 | calcolato sui quindici caratteri già scritti |
Prima di iniziare, un passaggio preliminare che l’algoritmo dà per scontato: cognome e nome vanno ridotti alle sole lettere dell’alfabeto latino di base. Gli accenti si eliminano riconducendo la lettera alla forma semplice, gli apostrofi e gli spazi si scartano. D’Angelo si tratta come DANGELO, De Luca come DELUCA.
Passaggio 1: la regola del cognome
Si scorrono le lettere del cognome nell’ordine in cui compaiono e si raccolgono prima tutte le consonanti, poi tutte le vocali. Della sequenza così ottenuta si prendono i primi tre caratteri. Se ne restano meno di tre, si completa con la lettera X.
| Cognome | Consonanti | Vocali | Blocco |
|---|---|---|---|
| ROSSI | R, S, S | O, I | RSS |
| RUSSO | R, S, S | U, O | RSS |
| ESPOSITO | S, P, S, T | E, O, I, O | SPS |
| D’ANGELO | D, N, G, L | A, E, O | DNG |
| RE | R | E | REX |
Le vocali entrano in gioco soltanto quando le consonanti non bastano, e allora si aggiungono in coda nell’ordine originale. Rossi e Russo hanno vocali diverse ma tre consonanti a testa, quindi le vocali non vengono nemmeno consultate e i due cognomi producono lo stesso blocco.
Passaggio 2: la regola del nome e l’eccezione delle quattro consonanti
Il nome segue la stessa regola del cognome, con una sola deviazione, ed è l’unica irregolarità di tutto l’algoritmo: se il nome contiene quattro o più consonanti si prendono la prima, la terza e la quarta, saltando la seconda. Con tre consonanti o meno si torna alla regola ordinaria.
| Nome | Consonanti | Regola applicata | Blocco |
|---|---|---|---|
| GIOVANNI | G, V, N, N | 4 consonanti: 1ª, 3ª, 4ª | GNN |
| FRANCESCO | F, R, N, C, S, C | 6 consonanti: 1ª, 3ª, 4ª | FNC |
| ANDREA | N, D, R | 3 consonanti: regola del cognome | NDR |
| MARIO | M, R | 2 consonanti: si aggiungono le vocali | MRA |
| LUCA | L, C | 2 consonanti: si aggiungono le vocali | LCU |
La soglia è quattro consonanti nette, contate sul nome ripulito da accenti e spazi. Un nome composto va trattato come un’unica parola: le due parti si concatenano prima di contare.
Passaggi 3, 4 e 5: la data di nascita e il sesso
L’anno: due cifre
Si scrivono le ultime due cifre dell’anno di nascita, con lo zero iniziale quando serve: 1985 diventa 85, 2003 diventa 03. Il secolo non viene registrato da nessuna parte, ed è una scelta che l’algoritmo paga in fase di lettura inversa: dal codice l’anno completo non si ricava, si deduce.
Il mese: una lettera fra dodici
Il mese si converte in una lettera secondo una tabella fissa che non segue l’ordine alfabetico.
Nessuna lettera al di fuori di queste dodici è ammessa in nona posizione. La tabella completa dei mesi riporta anche le lettere escluse.
Il giorno, con il sesso incorporato
Si scrive il giorno su due cifre, con lo zero iniziale quando serve. Se il sesso è femminile, al giorno si sommano quaranta: il 1º gennaio diventa 01 per un uomo e 41 per una donna. L’intervallo maschile va da 01 a 31, quello femminile da 41 a 71, e i due non si sovrappongono mai.
È l’unico punto in cui l’algoritmo comprime due informazioni negli stessi caratteri, e lo fa senza perdite: dal valore si ricavano sia il giorno sia il sesso.
Passaggio 6: il comune di nascita
Quattro caratteri, una lettera seguita da tre cifre: è il codice Belfiore, detto anche codice catastale. Non si calcola, si cerca: la corrispondenza fra comune e codice è stabilita da un registro, ed è uno a uno.
Per chi è nato fuori dall’Italia il blocco riporta il codice dello Stato estero, che inizia sempre per Z. Nessun comune italiano ha un codice che inizia per quella lettera, quindi la distinzione è immediata. L’elenco dei codici Belfiore dei comuni e quello degli Stati esteri sono i due registri da cui pescare.
Passaggio 7: il carattere di controllo
A questo punto i quindici caratteri sono scritti e il sedicesimo si ricava da loro. Il procedimento è in tre mosse:
- A ogni carattere si assegna un valore. Il valore dipende dalla posizione: si usa una tabella per le posizioni dispari e un’altra per le pari, contando a partire da uno.
- Si sommano i quindici valori.
- Si divide la somma per ventisei e si guarda il resto: 0 corrisponde alla A, 1 alla B, e così fino a 25 che corrisponde alla Z.
Le due tabelle sono queste. In alto il valore per le posizioni dispari, in basso quello per le pari.
Cifre
Lettere
La tabella delle posizioni pari è semplice: la cifra vale se stessa e la lettera vale il proprio posto nell’alfabeto, contato da zero. Quella delle posizioni dispari non ha invece alcuna regolarità e va consultata voce per voce. La pagina dedicata al carattere di controllo mostra il calcolo su un codice che scegli tu, riga per riga.
Un calcolo svolto per intero
Mettiamo insieme i sette passaggi su un caso: uomo, nato il 1º agosto 1985 a Roma, di cognome Rossi e di nome Mario. Cognome RSS, nome MRA, anno 85, mese M, giorno 01 senza aggiunta di quaranta, comune H501. Restano da sommare i quindici valori.
| Pos. | Car. | Tabella | Valore |
|---|---|---|---|
| 1 | R | dispari | 8 |
| 2 | S | pari | 18 |
| 3 | S | dispari | 12 |
| 4 | M | pari | 12 |
| 5 | R | dispari | 8 |
| 6 | A | pari | 0 |
| 7 | 8 | dispari | 19 |
| 8 | 5 | pari | 5 |
| 9 | M | dispari | 18 |
| 10 | 0 | pari | 0 |
| 11 | 1 | dispari | 0 |
| 12 | H | pari | 7 |
| 13 | 5 | dispari | 13 |
| 14 | 0 | pari | 0 |
| 15 | 1 | dispari | 0 |
| Somma | 120 | ||
120 diviso ventisei dà resto 16, e il resto 16 corrisponde alla lettera Q. Il codice completo è RSSMRA85M01H501Q.
Incolla il codice per rileggerlo a ritroso e confrontare il risultato con i dati di partenza. Per il percorso inverso completo: decodifica del codice fiscale.
Che cosa l’algoritmo non è in grado di prevedere
La specifica è completa e deterministica: dati gli stessi cinque dati anagrafici, il risultato è sempre quello. Proprio per questo non copre il caso in cui due persone arrivino allo stesso codice.
Quando succede, l’Agenzia delle Entrate attribuisce a una delle due una variante in cui alcune cifre sono sostituite da lettere, partendo da destra, e ricalcola il carattere di controllo. L’omocodia dipende dall’ordine di attribuzione, cioè da un’informazione che sta negli archivi e non nei dati anagrafici: nessun calcolo può anticiparla.
La conseguenza pratica va tenuta a mente ogni volta che si usa un calcolatore, incluso quello di questo sito: il codice prodotto è quello che le regole prescrivono, non necessariamente quello attribuito. Per gli ambienti di collaudo, dove serve un codice formalmente corretto e non associato a nessuno, ci sono il generatore e un set di codici di prova già verificati.
Domande frequenti
Fonte: DM 23 dicembre 1976 (Ministero delle Finanze) per le regole di formazione e per le due tabelle di valori · ISTAT, elenco dei comuni italiani, per i codici Belfiore. Le tabelle e il calcolo svolto in questa pagina sono generati dalle stesse strutture usate dal decoder del sito, così che non possano divergere dal codice pubblicato. Fonti e metodo