Italian fiscal code calculation algorithm
Project made as exercise for " Course of algorithms and advanced programming" at Polytechnic of Turin technical university. Text and software by Alberto Realis-Luc
How it is made an Italian fiscal code?
The Italian fiscal code is an alphanumeric string of 16 characters. In Italy it used as unique ID to identify individuals. Every person has one because the fiscal code is generated by an algorithm
that takes as the only inputs: name, surname, date of birth, gender and place of birth of his owner.
The first 15 characters are generated with the data of the owner and the last one it is a sort of check-sum. A fiscal code is made of 7 parts:
- three alphabetic characters derived from the surname
- three alphabetic characters derived from the names
- two digits for the year of birth
- one alphabetic character for the month of birth
- two digits for the day of birth and the gender
- one alphabetic character and three digits for the place of birth
- one alphabetic character as control check-sum
Surname
The three letters of the surname part are the first three consonants of the surname.
If there are less than three consonants in the surname, after the consonants the algorithm starts to take also the vowels.
If there are still missing letters the letter 'X' will be added.
The surnames composed by more than one word will be considered as just one word.
Name
Here the procedure is similar to the one for the surname with the difference that the first and third and forth consonants are taken, if there are less than 4 consonants then the procedure
continues exactly like for the surname.
Also here, if the person has more than one name, all the names are considered as one word: all together without spaces.
Year of birth
The two digits for the year of birth are simply his last two digits.
Month of birth
The month of birth is represented by a single letter according to the following table:
| No | Month | Letter |
| 1 | January | A |
| 2 | February | B |
| 3 | March | C |
| 4 | April | D |
| 5 | May | E |
| 6 | June | H |
| 7 | July | L |
| 8 | August | M |
| 9 | September | P |
| 10 | October | R |
| 11 | November | S |
| 12 | December | T |
Day of birth and gender
Day of birth and gender are encoded in two digits. For men those two digits are simply their day of birth and for women the algorithm is adding 40 to their day of birth.
Place of birth
The place of birth can be one of the 8100 Italian municipalities or a foreign country. Every place is identified with a code made of one letter and three numbers. Those codes are determined by the Italian Land Registry. The software downloadable at the end of this page contains a file with a list of all those codes for the 8100 Italian municipalities. Regarding the foreign countries there are the codes also for nations not existing anymore like Czechoslovakia or the former East Germany beacuse the year of birth is considered.
Checksum letter
The last charater is the checksum value, it is always a single letter. The algorithm converts the previous 15 characters in numbers, according to the following table, performing the following steps:
- Convert numbers and letters in even position.
- Convert numbers and letters in odd position.
- Sum all the obtained values.
- Divide the previus sum by 26.
- Determine the reminder of the previous division.
- Look-up in the table the correspondent check-sum letter.
| Conversion even and odd characters | Values of the checksum letter | |||
| Character | Even value | Odd value | Remainder | Checksum letter |
| A or 0 (zero) | 0 | 1 | 0 | A |
| B or 1 | 1 | 0 | 1 | B |
| C or 2 | 2 | 5 | 2 | C |
| D or 3 | 3 | 7 | 3 | D |
| E or 4 | 4 | 9 | 4 | E |
| F or 5 | 5 | 13 | 5 | F |
| G or 6 | 6 | 15 | 6 | G |
| H or 7 | 7 | 17 | 7 | H |
| I or 8 | 8 | 19 | 8 | I |
| J or 9 | 9 | 21 | 9 | J |
| K | 10 | 2 | 10 | K |
| L | 11 | 4 | 11 | L |
| M | 12 | 18 | 12 | M |
| N | 13 | 20 | 13 | N |
| O | 14 | 11 | 14 | O |
| P | 15 | 3 | 15 | P |
| Q | 16 | 6 | 16 | Q |
| R | 17 | 8 | 17 | R |
| S | 18 | 12 | 18 | S |
| T | 19 | 14 | 19 | T |
| U | 20 | 16 | 20 | U |
| V | 21 | 10 | 21 | V |
| W | 22 | 22 | 22 | W |
| X | 23 | 25 | 23 | X |
| Y | 24 | 24 | 24 | Y |
| Z | 25 | 23 | 25 | Z |
Downloads
- Italian fiscal code generator: CodiceFiscale.zip
Generator of fiscal codes for Windows
Here there is a simple and lightweight generator of Italian tax ID codes for Windows: CodiceFiscale.exe, it is written as Win32 application.
No installation needed, just run it. It needs only the file comuni.txt in the same folder from where it will read the municipalities codes.
As soon as a fiscal code is calculated, it is automatically copied on the clipboard, so you can directly past it where required.
Calculation of fiscal codes on command line
A simple program written in C to calculate the fiscal code, compiled for Linux and Windows.
The program cf (cf.exe for Windows) works, also here, reading the codes of municipalities from the file
comuni.txt that so has to be kept in the same folder. It works in 3 possible ways:
- without any argument, it will use the provided default
comuni.txtfile as list of birth places:
./cf - with the path to the list of birth places file as the only one any argument:
./cf ./data/listMuniciplaities.txt - specifying the file of list of birth places as first argument and then the person's data as following arguments:
./cf comuni.txt Rossi,Mario,15/05/1972,M,Roma
Spaces are allowed in the surnames, names and in the names of birth places, no other format is allowed.
Do not use characters with accents, use only normal characters without accents instead.
Also here, on Windows the so generated fiscal code is also copied to the clipboard ready to be pasted where needed.
This small program doesn't pretend anything, it was just an interesting exercise (especially on string and data management) for the university course of:
"Algorithms and Advanced Programming".
Source Code
The source code is available on: GitHub.

