DavidePastore / codice-fiscale

A PHP library to calculate and check the italian tax code (codice fiscale).
GNU General Public License v2.0
100 stars 19 forks source link

Handling surnames with less than 3 consonants #72

Open darnel opened 1 year ago

darnel commented 1 year ago

I'm using your library for formal validation of CF and for checking against name and surname. I set up Subject with name and surname and fill the rest parameters with fictional values. Then first 6 characters of calculated value are compared to user input. I tried to check names and surnames with diacritics and less consonants. For this fictional input:

Surname = Rúgáí Name = Vörosmärty Place of birth = Fobello (VC) D641 Gender = M Date of birth = 1980-01-01

result is: RGUVSM80A01D641N

I cross checked these at three other online pages found by google and all calculates: RGXVSM80A01D641W.

From algorithm description at wikipedia

If the surname has less than three consonants, then vowels will replace the blank spaces, in the same order they appear in the surname

I believe your algorithm works correctly - adding the vowel after consonants - but three consistent but different results makes me confused.

Thank you for confirmation and for your library.

str0el commented 1 year ago

I've tested two online pages by letting them calculate the CF of a person with a similar surname (only 3 letters, consonant - diacritic vowel - consonant) and both gave me an "X" for the third letter, which is wrong. I own the correct CF. They do not seem to handle diacritics correctly. Your result of RGU is correct because ú has to be interpreted as U.