Un'agenzia immobiliare sta registrando un contratto d'affitto. L'inquilino ha dettato il codice fiscale al telefono, qualcuno l'ha trascritto su un foglio, un'altra persona lo ha digitato nel gestionale. Al momento dell'invio il sistema lo rifiuta: codice non valido. Nessuno ha notato niente di strano a occhio, eppure il programma si è accorto in un istante che due cifre erano state scambiate. Il merito è tutto dell'ultimo carattere.
Il sedicesimo carattere del codice fiscale si chiama carattere di controllo. Non contiene informazioni sulla persona: è una lettera calcolata a partire dai quindici caratteri precedenti, con un procedimento fisso. Chi riceve un codice può rifare lo stesso calcolo e vedere se il risultato coincide. Se non coincide, da qualche parte c'è un errore.
Il procedimento in breve
Il calcolo si fa in quattro mosse. Si separano i primi quindici caratteri in due gruppi, quelli in posizione dispari (1ª, 3ª, 5ª e così via fino alla 15ª) e quelli in posizione pari (dalla 2ª alla 14ª). A ogni carattere si assegna un valore numerico, usando due tabelle diverse per i dispari e per i pari. Si sommano tutti i valori. Infine si divide il totale per 26 e si guarda il resto: quel resto, tradotto in lettera, è il carattere di controllo.
Sembra un gioco da enigmisti, ma i valori delle tabelle sono stabiliti dalla normativa e non si possono cambiare. Vediamole.
Le tabelle da usare
Caratteri in posizione pari
Questa è la più semplice. Le cifre valgono quanto il loro numero (0 vale 0, 9 vale 9). Le lettere valgono la loro posizione nell'alfabeto partendo da zero: A vale 0, B vale 1, C vale 2, fino a Z che vale 25.
Caratteri in posizione dispari
Qui non c'è una logica evidente, e conviene tenere la tabella sotto mano. Ogni cifra vale quanto la lettera corrispondente (0 come A, 1 come B e così via fino a 9 come J).
| Carattere | Valore | Carattere | Valore | Carattere | Valore |
|---|---|---|---|---|---|
| A o 0 | 1 | J o 9 | 21 | S | 12 |
| B o 1 | 0 | K | 2 | T | 14 |
| C o 2 | 5 | L | 4 | U | 16 |
| D o 3 | 7 | M | 18 | V | 10 |
| E o 4 | 9 | N | 20 | W | 22 |
| F o 5 | 13 | O | 11 | X | 25 |
| G o 6 | 15 | P | 3 | Y | 24 |
| H o 7 | 17 | Q | 6 | Z | 23 |
| I o 8 | 19 | R | 8 |
Dal resto alla lettera
Il resto della divisione per 26 è un numero da 0 a 25. Si converte in lettera con la stessa corrispondenza dei caratteri pari: 0 è A, 1 è B, 20 è U, 25 è Z.
L'esempio completo: RSSMRA80A01H501U
Prendiamo il codice di Mario Rossi, nato a Roma il 1° gennaio 1980, e facciamo finta di non conoscere l'ultima lettera. Partiamo dai quindici caratteri RSSMRA80A01H501.
Primo passo, i caratteri in posizione dispari, con la tabella dei dispari:
- posizione 1, R = 8
- posizione 3, S = 12
- posizione 5, R = 8
- posizione 7, 8 = 19
- posizione 9, A = 1
- posizione 11, 1 = 0
- posizione 13, 5 = 13
- posizione 15, 1 = 0
Somma dei dispari: 8 + 12 + 8 + 19 + 1 + 0 + 13 + 0 = 61.
Secondo passo, i caratteri in posizione pari, con la tabella semplice:
- posizione 2, S = 18
- posizione 4, M = 12
- posizione 6, A = 0
- posizione 8, 0 = 0
- posizione 10, 0 = 0
- posizione 12, H = 7
- posizione 14, 0 = 0
Somma dei pari: 18 + 12 + 0 + 0 + 0 + 7 + 0 = 37.
Terzo passo, il totale: 61 + 37 = 98. Quarto passo, la divisione: 98 diviso 26 fa 3, con resto 20 (perché 26 × 3 = 78 e 98 − 78 = 20). Il resto 20 corrisponde alla lettera U. Il codice completo è quindi RSSMRA80A01H501U, esattamente quello atteso.
Cosa intercetta e cosa no
Il controllo è molto efficace contro gli errori di battitura più comuni. Prendiamo lo scambio di due cifre vicine, il classico "80" digitato "08": il codice RSSMRA08A01H501 produrrebbe come carattere di controllo una K, non una U. Chi ha in mano la U finale capisce subito che qualcosa non va. Allo stesso modo, RSSMRA80A01H501X viene scartato perché la X non corrisponde al calcolo.
Non è però una garanzia assoluta, e qui molti si fanno illusioni. Il carattere di controllo dice solo che i sedici caratteri sono coerenti tra loro. Non dice che il codice esiste davvero, né che appartiene alla persona che te lo ha dato. Chiunque conosca l'algoritmo può generare un codice formalmente perfetto per dati inventati. E ci sono errori che per ragioni matematiche passano inosservati: guardando le tabelle, per esempio, si nota che una cifra e la lettera corrispondente (0 e A, 1 e B) hanno sempre lo stesso valore. In quei casi però di solito interviene un altro controllo, quello sulla struttura, perché in ogni posizione è previsto o un numero o una lettera.
E con i codici omocodici?
Quando due persone avrebbero lo stesso codice, l'Agenzia delle Entrate distingue il secondo sostituendo alcune cifre con lettere. Cambiando i caratteri cambia anche il calcolo, quindi il carattere di controllo va rifatto. Nel caso di Mario Rossi, la prima variante sostituisce l'ultimo 1 con una M e diventa RSSMRA80A01H50MM: anche il sedicesimo carattere è diventato M. Se vuoi capire come funziona la sostituzione, trovi i dettagli nella guida all'omocodia e puoi generare le varianti con lo strumento dedicato alle omocodie.
Vuoi sapere al volo se un codice fiscale è formalmente corretto? Lo strumento rifà il calcolo del carattere di controllo e ti dice dove sta l'errore.
Verifica un codice fiscaleQuando conviene rifare il calcolo
A mano, praticamente mai: è utile farlo una volta per capire il meccanismo, poi ci pensano i programmi. Ma sapere come funziona serve a interpretare i messaggi di errore. Se un portale ti dice che il codice non è valido, il problema quasi sempre sta in un carattere digitato male, non nel codice in sé. Rileggilo confrontandolo con la tessera sanitaria, carattere per carattere, facendo attenzione alle coppie che si confondono (O e 0, I e 1, B e 8). Se invece il codice che hai sulla tessera risulta non valido al controllo, allora la cosa è seria e va verificata con l'Agenzia delle Entrate. Per ripassare il significato degli altri quindici caratteri c'è la guida su come leggere un codice fiscale, e se il problema è un dato anagrafico sbagliato trovi le istruzioni in codice fiscale sbagliato: cosa fare.
Domande frequenti
Il carattere di controllo può essere un numero?
No. È sempre una lettera, perché il resto della divisione per 26 viene convertito in una delle 26 lettere dell'alfabeto.
Se il carattere di controllo è giusto, il codice è sicuramente corretto?
È formalmente corretto, cioè i caratteri sono coerenti tra loro. Non significa che sia stato attribuito a quella persona né che i dati anagrafici siano quelli giusti.
Perché posizioni pari e dispari hanno tabelle diverse?
Usare pesi diversi rende il controllo più sensibile agli scambi di caratteri vicini: se due caratteri si invertono, passano da una tabella all'altra e la somma cambia quasi sempre.
Nei codici omocodici il carattere di controllo cambia?
Sì. Sostituendo cifre con lettere cambiano i valori da sommare, quindi il carattere finale viene ricalcolato su ogni variante.