Calcolo del Codice Fiscale con Excel

di LavoroImpresa

scritto il

Calcolare il codice fiscale è possibile ricreandone l'algoritmo in Excel, anche se resta escluso il valore legale: ecco un modello già pronto da realizzare o scaricare per il calcolo del CF.

Il codice fiscale è univoco e assegnato dall’Anagrafe Tributaria. L’unico codice valido è quello rilasciato dall’Agenzia delle Entrate , anche se è teoricamente possibile calcolarlo utilizzando uno specifico algoritmo. Non sempre però sistema è sufficiente a reperire la giusta stringa alfanumerica, a causa dei (rarissimi) casi di omocodia.

Calcolare il codice fiscale utilizzando Excel è pertanto possibile ma solo a scopi didattici: è necessario ottenere poi il riscontro legale dagli organi preposti. Il file Excel che andremo a realizzare sarà composto da un foglio di input/output in cui inserire i dati anagrafici del soggetto di cui si vuole ottenere il codice fiscale, e da una serie di fogli destinati a contenere le tabelle di base: comuni, mesi e codici di controllo.

=> Scarica l’esempio

Foglio Codice Fiscale

È è necessario che il file contenga i campi relativi a cognome, nome, luogo di nascita, data di nascita e sesso nonché un campo in cui sarà visualizzato il codice fiscale. Per prima cosa lavoriamo su un foglio che chiameremo CF e che conterrà lo schema del codice fiscale.

Il campo Data dovrà avere il formato del tipo gg/mm/aaaa. Per evitare l’inserimento di valori diversi da una data si dovranno impostare i criteri di convalida. Per fare ciò si dovrà accedere alla voce Convalida all ‘ interno del menu Dati. Nella finestra “Convalida dati” dovrà essere consentito l’inserimento di dati il cui valore è maggiore o uguale a 01/01/1900.

Operazione analoga dovrà essere effettuata per il campo contenente il sesso. In tal caso nei criteri di convalida dovrà essere selezionata la voce Elenco mentre nel campo origine il codice M;F.

Codice Fiscale: fai la verifica online

Tabella Comuni

Prima di realizzare l’algoritmo per lo sviluppo del codice si dovranno realizzare alcune tabelle di base da cui far estrapolare le informazioni necessarie.

La prima tabella contiene l’elenco completo dei Comuni italiani e dei codici catastali comunali. Per ottenere queste informazioni basterà accedere al sito dell’Agenzia del Territorio e scaricare un file Excel con i dati aggiornati. Con un copia-incolla riportiamo i dati nel nostro file in un foglio che chiameremo Comuni. Si dovranno ordinare i Comuni in ordine alfabetico e non dovranno essere presenti dati duplicati nella tabella (per i comuni omonimi, inserire nella descrizione anche la sigla della provincia)

Attenzione: la colonna con il nome dei Comuni deve essere la prima a sinistra). Tale condizione si rende necessaria per il corretto funzionamento della funzione CERCA.VERT. Come ultima operazione assoceremo alla tabella appena creata un nome: dopo avere selezionato la colonna “Comuni” (ad eccezione dell’intestazione), accediamo alla voci Nome, quindi Definisci, presenti nel menu Inserisci. Il nome da affidare all’area selezionata sarà COMUNI. Confermiamo con Aggiungi, quindi Ok.

A questo punto, nella casella del nome, posta in alto a destra, dovrà comparire la scritta COMUNI.

Ritornando nel foglio CF si dovrà selezionare il campo “Luogo di nascita” e limitare l’inserimento dei dati a quelli presenti nella tabella Comuni, accedendo al menu Dati, quindi Convalida. Nella maschera “Convalida dati” si dovrà selezionare la voce “Elenco” fra i criteri di convalida, mentre nel campo origine scriveremo il codice =COMUNI.

Caratteri dal 1° al 3°: cognome

Possiamo adesso scrivere l’algoritmo che permetterà di sviluppare il codice fiscale. Per prima cosa si dovrà individuare la funzione che provvederà a estrapolare i caratteri dal1° al 3°, ossia quelli relativi al cognome. Per default dovranno essere prelevate le prime 3 consonanti; se il cognome ha meno di 3 consonanti si utilizzeranno anche le vocali fino ad arrivare ai 3 caratteri necessari. Nei casi, ancorché rari, in cui il cognome abbia solo 2 caratteri, il terzo sarà composto dalla lettera X. In caso di cognomi composti da due parole, si dovrà considerare come se fosse unico ossia senza spazi (ad esempio Di Matteo diventerà Dimatteo).

Il primo passo è quello di estrapolare tutte le consonanti dal cognome. La funzione =SOSTITUISCI è quella che si presta maggiormente ai nostri scopi. In questo modo riusciremo a sostituire tutte le vocali con un valore nullo rappresentato dalle virgolette (“”). Poiché tale funzione è case sensitive ossia distingue le lettere maiuscole da quelle minuscole sarà necessario utilizzare anche la funzione =MAIUSC grazie alla quale ogni stringa di testo sarà convertita in maiuscolo.

In definitiva nella cella M1 inseriremo la seguente funzione:
=SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI
(SOSTITUISCI(SOSTITUISCI(MAIUSC($E$3);
” “;””);”U”;””);”O”;””);”I”;””);”E”;””);”A”;””)

Si dovrà, adesso, creare una funzione analoga, necessaria a estrapolare le vocali (indispensabili qualora le consonanti del cognome siano inferiori a 3). Tuttavia, poiché in Excel 2003 è possibile internare fino a sette funzioni, sarà necessario realizzare blocchi di funzioni fino a completare tutte le consonanti. Pertanto, nella cella O3 si avrà la seguente funzione:

=SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI
(SOSTITUISCI(SOSTITUISCI(MAIUSC($E$3);
” “;””);”G”;””);”F”;””);”D”;””);”C”;””);”B”;””)

Nella colonna Q3 si avrà la seguente funzione:
=SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI
(SOSTITUISCI(SOSTITUISCI(MAIUSC(O3);” “;””);”M”;””);
“L”;””);”K”;””);”J”;””);”H”;””)

Nella colonna S3 si avrà la seguente funzione:
=SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI
(SOSTITUISCI(SOSTITUISCI(MAIUSC(Q3);” “;””);
“S”;””);”R”;””);”Q”;””);”P”;””);”N”;””)

Nella colonna U3 si avrà la seguente funzione:
=SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI
(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(MAIUSC(S3);
” “;””);”Z”;””);”W”;””);”X”;””);”W”;””);”V”;””);”T”;””)

Fatto questo, se le consonanti hanno una lunghezza pari o superiore a 3 restituisce i primi 3 caratteri, in caso alternativo inserisce le vocali. Nella cella W3 inseriremo la seguente funzione:

=SE(LUNGHEZZA(SE(LUNGHEZZA(M3)>=3;SINISTRA(M3;3);
SE(LUNGHEZZA(M3)=2;M3 & SINISTRA(U3;1);M3 & SINISTRA(U3;2))))=2;
SE(LUNGHEZZA(M3)>=3;SINISTRA(M3;3);SE(LUNGHEZZA(M3)=2;
M3 & SINISTRA(U3;1);M3 & SINISTRA(U3;2))) & “X”;
SE(LUNGHEZZA(M3)>=3;SINISTRA(M3;3);SE(LUNGHEZZA(M3)=2;
M3 & SINISTRA(U3;1);M3 & SINISTRA(U3;2))))

La funzione SINISTRA restituisce il primo carattere o i primi caratteri di una stringa di testo mentre la funzione LUNGHEZZA restituisce il numero di caratteri in una stringa di testo.

Caratteri 4° – 6°: nome

La definizione del nome nel codice fiscale segue lo stesso criterio del cognome. L’unica differenza è quella che, nei casi in cui il cognome abbia più di 3 consonanti, si prendono la prima, la terza e la quarta. Pertanto le funzioni create per il cognome possono essere adattate anche per il nome ad eccezione di quella che provvederà ad individuare i 3 caratteri finali che sarà la seguente:

=SE(LUNGHEZZA(SE(LUNGHEZZA(M5)>3;STRINGA.ESTRAI(M5;1;1)
& STRINGA.ESTRAI(M5;3;1) & STRINGA.ESTRAI(M5;4;1);
SE(LUNGHEZZA(M5)=3;M5;SE(LUNGHEZZA(M5)=2;
M5 & SINISTRA(U5;1);M5 & SINISTRA(U5;2)))))=2;
SE(LUNGHEZZA(M5)>3;STRINGA.ESTRAI(M5;1;1) &
STRINGA.ESTRAI(M5;3;1) & STRINGA.ESTRAI(M5;4;1);
SE(LUNGHEZZA(M5)=3;M5;SE(LUNGHEZZA(M5)=2;M5
& SINISTRA(U5;1);M5 & SINISTRA(U5;2))))
& “X”;SE(LUNGHEZZA(M5)>3;STRINGA.ESTRAI(M5;1;1)
& STRINGA.ESTRAI(M5;3;1) & STRINGA.ESTRAI(M5;4;1);
SE(LUNGHEZZA(M5)=3;M5;SE(LUNGHEZZA(M5)
=2;M5 & SINISTRA(U5;1);M5 & SINISTRA(U5;2)))))

La funzione STRINGA.ESTRAI restituisce uno specifico numero di caratteri da una stringa di testo a partire dalla posizione specificata.

Caratteri 7° – 11°: data di nascita

La data di nascita nel codice fiscale è costituita dalle ultime due cifre dell’anno, seguite da una lettera che rappresenta il mese, quindi dal giorno di nascita. Quest’ultimo valore è aumentato di 40 unità nel caso di soggetti di sesso femminile. Nella cella M9 inserire la seguente formula necessaria a estrapolare l’anno di nascita: =DESTRA(TESTO(E9;”gg/mm/aaaa”);2)

La funzione DESTRA restituisce l’ultimo carattere o gli ultimi caratteri di una stringa di testo. L’uso della funzione TESTO è stato necessario al fine di convertire la data indicata nell’omonimo campo in un formato non numerico. Per individuare il mese di nascita è necessario creare una tabella all’interno di un nuovo foglio che chiameremo MESI. La tabella dovrà essere composta da due colonne: Mese e Lettera.

Le corrispondenze fra mesi e lettere sono le seguenti:

Codice di controllo
Corrispondenza

Nella cella O9 del foglio CF inserire la seguente funzione:
=CERCA.VERT(STRINGA.ESTRAI(TESTO(E9;”gg/mm/aaaa”);
4;2);MESI!A2:B13;2;FALSO)

La funzione CERCA.VERT cerca un valore nella colonna più sinistra di una tabella e restituisce quello presente nella stessa riga di una colonna specificata.

Nella cella Q9 inserire la seguente funzione:
=SE(I9=”M”;SINISTRA(TESTO(E9;”gg/mm/aaaa”);
2);SE(I9=”F”;SINISTRA(TESTO(E9;”gg/mm/aaaa”);2)+40;””))

A questo punto si dovranno concatenare i valori ottenuti. Nella cella W9 inserire, pertanto, la seguente funzione: =SE(Q9=””;””;M9&O9&Q9)

Caratteri dal 12° al 15°: luogo di nascita

Il codice fiscale individua il luogo di nascita tramite il codice catastale comunale. L’elenco dei codici catastali comunali sono già stati inseriti nel foglio COMUNI. La funzione CERCA.VERT ci permetterà di rilevare correttamente il valore. Inserire nella cella W7 la seguente funzione:
=SE(E7=””;””;CERCA.VERT(E7;COMUNI!A2:C13867;2;FALSO))

Carattere 16°: codice di controllo

Come già accennato, l’ultimo carattere del codice fiscale ha la funzione di controllo. Viene calcolato utilizzando un semplice algoritmo: i valori di codice appena sviluppato messi in sequenza si distinguono in caratteri dispari (ossi il 1°, il 3°, il 5° e così via) e caratteri pari (il 2°, il 4°, il 6°) e si convertono in valori numerici sulla base di quanto indicato dalle seguenti tabelle:

Nelle tre tabella è importante che il numero 0 sia sostituito dal testo ZERO al fine di permettere il corretto funzionamento della funzione CERCA.VERT. In caso contrario sarà visualizzato un messaggio di errore. Vediamo, adesso, come procedere su Excel. Inserire un nuovo foglio chiamato CONTROLLO all’interno del quale inseriremo le tre tabelle. I valori che si ottengono dalla conversione dei caratteri alfanumerici si sommano fra di loro e il risultato va diviso per un coefficiente fisso pari a 26. Il resto della divisione fornirà il codice identificativo secondo quanto riportato dalla seguente tabella:

Per prima cosa procederemo con la conversione dei caratteri relativi al cognome. Nella cella Y3 del foglio CF inseriremo la seguente funzione:
=(CERCA.VERT(SINISTRA(W3;1);CONTROLLO!A3:B38;2;FALSO))
+ (CERCA.VERT(STRINGA.ESTRAI(W3;2;1);CONTROLLO!D3:E38;2;FALSO))
+ (CERCA.VERT(DESTRA(W3;1);CONTROLLO!A3:B38;2;FALSO))

Così facendo si otterrà la somma dei valori che compongono il cognome. Analogamente alla funzione appena scritta si dovrà procedere con il nome. Pertanto nella cella Y5 si scriverà la seguente funzione:
=(CERCA.VERT(SINISTRA(W5;1);CONTROLLO!$D$3:$E$38;2;FALSO))
+ (CERCA.VERT(STRINGA.ESTRAI(W5;2;1);CONTROLLO!$A$3:$B$38;2;FALSO))
+ (CERCA.VERT(DESTRA(W5;1);CONTROLLO!$D$3:$E$38;2;FALSO))

Nella cella Y9 si scriverà la seguente funzione:
=(CERCA.VERT(SE(SINISTRA(W9;1)=”0″;”ZERO”;SINISTRA(W9;1));
CONTROLLO!$A$3:$B$38;2;FALSO)) + (CERCA.VERT(SE(STRINGA.ESTRAI(W9;2;1)=”0″;
“ZERO”;STRINGA.ESTRAI(W9;2;1));CONTROLLO!$D$3:$E$38;2;FALSO))
+ (CERCA.VERT(SE(STRINGA.ESTRAI(W9;3;1)=”0″;”ZERO”;
STRINGA.ESTRAI(W9;3;1));CONTROLLO!$A$3:$B$38;2;FALSO))
+ (CERCA.VERT(SE(STRINGA.ESTRAI(W9;4;1)=”0″;”ZERO”;
STRINGA.ESTRAI(W9;4;1));CONTROLLO!$D$3:$E$38;2;FALSO))
+ (CERCA.VERT(SE(DESTRA(W9;1)=”0″;”ZERO”;DESTRA(W9;1));
CONTROLLO!$A$3:$B$38;2;FALSO))

Nella cella Y7 si scriverà la seguente funzione:
=(CERCA.VERT(SE(SINISTRA(W7;1)=”0″;”ZERO”;
SINISTRA(W7;1));CONTROLLO!$D$3:$E$38;2;FALSO))+
(CERCA.VERT(SE(STRINGA.ESTRAI(W7;2;1)=”0″;”ZERO”;
STRINGA.ESTRAI(W7;2;1));CONTROLLO!$A$3:$B$38;2;FALSO)) + (CERCA.VERT(SE(STRINGA.ESTRAI(W7;3;1)=”0″;”ZERO”;STRINGA.ESTRAI(W7;3;1));
CONTROLLO!$D$3:$E$38;2;FALSO)) + (CERCA.VERT(SE(DESTRA(W7;1)=”0″;
“ZERO”;DESTRA(W7;1));CONTROLLO!$A$3:$B$38;2;FALSO))

La somma dei valori appena ottenuti si dovrà dividere per 26. Il resto dell’operazione dovrà essere confrontato con la tabella inserita nel foglio CONTROLLO e dalla quale sarà individuato la lettera che rappresenta il codice di controllo.

Nella cella W11 inserire la seguente funzione:
=CERCA.VERT(SE(TESTO(RESTO(Y3+Y5+Y7+Y9;26);”#”)=”0″;
“ZERO”;SE(TESTO(RESTO(Y3+Y5+Y7+Y9;26);”#”)=””;”ZERO”;
TESTO(RESTO(Y3+Y5+Y7+Y9;26);”#”)));CONTROLLO!G3:H28;2;FALSO)

Abbiamo così ottenuto l’algoritmo completo per lo sviluppo del codice fiscale. L’ultima operazione è quella di mettere in sequenza i valori ottenuti. Inserire nella cella E11 la seguente funzione:
=CERCA.VERT(SE(TESTO(RESTO(Y3+Y5+Y7+Y9;26);”#”)=”0″;
“ZERO”;TESTO(RESTO(Y3+Y5+Y7+Y9;26);”#”));
CONTROLLO!G3:H28;2;FALSO)

In particolare sono state utilizzate le funzioni RESTO che restituisce il resto di una divisione tra dividendo e divisore e la funzione TESTO che converte un valore numerico in testo. Quest’ultima funzione è necessaria per trasformare in testo il valore numerico del resto della divisione in modo da essere correttamente utilizzato dalla funzione CERCA.VERT.