Codice fiscale per sviluppatori
Aggiornato il 30 luglio 2026
Validare un codice fiscale non si riduce a una regex: la forma non dice nulla sulla validità, il carattere di controllo si calcola con due tabelle diverse a seconda della posizione, e un codice regolarissimo può contenere lettere dove ti aspetti delle cifre. Qui trovi l’algoritmo completo in quattro forme, i vettori di prova e i codici catastali dei comuni in JSON. Tutto il codice pubblicato è stato eseguito e confrontato con l’implementazione che gira su questo sito.
Tre cose che quasi tutte le implementazioni sbagliano
1. L’omocodia: lettere dove dovrebbero esserci cifre
Quando due persone genererebbero lo stesso codice, l’Agenzia delle Entrate sostituisce una o più cifre con lettere, partendo da destra. Lo schema [A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z] rifiuta questi codici, che sono invece pienamente validi. Come funziona l’omocodia
2. Il carattere di controllo usa due tabelle, non una
Le posizioni dispari e quelle pari hanno valori diversi per lo stesso carattere: la A vale 1 in posizione dispari e 0 in posizione pari. Chi ne implementa una sola ottiene un risultato sbagliato in circa venticinque casi su ventisei. Il calcolo passo per passo
3. I codici catastali non sono un insieme chiuso
I comuni vengono soppressi e fusi, ma i loro codici restano validi nei codici fiscali già attribuiti. Chi confronta il codice catastale con l’elenco dei comuni attualmente esistenti finisce per rifiutare chi è nato in un comune poi accorpato. Vanno inoltre ammessi i codici che iniziano per Z, riservati agli Stati esteri. I codici Belfiore
Le implementazioni
Validatore in JavaScript
Modulo completo senza dipendenze: normalizzazione, forma, omocodia, carattere di controllo e decodifica di data, sesso e comune. Con i test.
ApriPythonValidatore in Python
Lo stesso algoritmo in Python 3 idiomatico: type hint, dataclass, libreria standard soltanto. Con gli stessi test.
ApriRegexRegex per il codice fiscale
Lo schema corretto, la variante con gruppi nominati e, soprattutto, perché nessuna espressione regolare può validare un codice fiscale.
ApriExcelCalcolo in Excel
Approccio a colonne di appoggio, con la tabella del carattere di controllo e l’elenco onesto di ciò che in Excel non conviene fare.
ApriVettori di prova
I primi tre sono i vettori pubblicati più citati per il carattere di controllo; gli ultimi due coprono il calcolo diretto e l’omocodia. Ogni implementazione di queste pagine li riproduce tutti.
| Codice fiscale | Che cosa esercita |
|---|---|
| MRTMTT25D09F205Z | maschile, Milano (F205) |
| FOXDRA26C24H872Y | maschile, Sangiano in provincia di Varese (H872) |
| MLLSNT82P65Z404U | femminile (giorno 65 = 25 + 40), nato all’estero (Z404) |
| RSSMRA85M01H501Q | Rossi Mario, 1° agosto, Roma (H501) |
| RSSMRA85M01H5LMT | lo stesso codice in variante omocodica di secondo livello |
Ti serve un codice sintetico da usare in un ambiente di collaudo? Codici fiscali di prova.
I dati dei comuni, in JSON
Sono i due file che questo sito serve al proprio decoder. Sono statici, senza autenticazione e senza limiti di chiamata: puoi scaricarli, includerli in un progetto o interrogarli direttamente. Derivano dall’elenco ufficiale ISTAT delle unità amministrative territoriali e coprono tutti i 7.896 comuni italiani.
Un avvertimento che ti risparmia un’ora di debug: contengono i comuni italiani e soltanto quelli. I codici che iniziano per Z, attribuiti agli Stati esteri, non ci sono, e nemmeno i codici dei comuni soppressi. Una ricerca che non trova la chiave non significa quindi che il codice sia sbagliato.
Oggetto piatto: chiave il codice catastale di quattro caratteri, valore una stringa con i campi separati da |. Tre campi per una voce attiva, sei per un comune soppresso. Copre 7.896 comuni attivi, 197 Stati esteri e 2.440 comuni soppressi, così che anche un codice letto da un codice fiscale d’epoca si risolva in un nome.
{
"A001": "Abano Terme|PD|abano-terme",
"H501": "Roma|RM|roma",
"Z404": "Stati Uniti d'America||stati-uniti-d-america",
"D583": "Figline Valdarno|FI||S|2014|M321"
}Le prime due voci sono comuni attivi, la terza uno Stato estero (nessuna sigla di provincia), la quarta un comune soppresso nel 2014 e confluito in M321. I successori sono a loro volta codici catastali, risolvibili nello stesso file senza una seconda richiesta.
Formato tabellare compatto per la ricerca. I nomi delle regioni sono raccolti una sola volta in r e referenziati per indice; ogni riga di c è [codice, nome, slug, sigla, indiceRegione, capoluogo, popolazione], dove l’ultimo campo vale 1 per i capoluoghi di provincia.
{
"r": ["Abruzzo", "Basilicata", "Calabria", "…", "Veneto"],
"c": [
["A001", "Abano Terme", "abano-terme", "PD", 19, 0, 20479],
["F205", "Milano", "milano", "MI", 8, 1, 1362863]
]
}I due file sono rigenerati dal tracciato ISTAT e la generazione del sito si interrompe se il tracciato cambia, se un codice è malformato o se il conteggio delle righe scende sotto una soglia di sicurezza. Restano comunque un dato derivato: per usi in cui la fonte conta, parti dall’originale. Fonti e metodo
Domande frequenti
Approfondisci
Decodificare
Verificare e calcolare
Riferimenti
Casi particolari
Avvertenza
Questo strumento decodifica la struttura formale di un codice fiscale e ne verifica il carattere di controllo. Non conferma che il codice sia stato effettivamente attribuito a una persona: quella verifica è possibile solo attraverso il servizio ufficiale dell’Agenzia delle Entrate. Fonti e metodo