davidepastore/codice-fiscale
PHP library to calculate and validate the Italian tax code (Codice Fiscale). Build a Subject (name, surname, birth date, gender, Belfiore code), generate the code, support omocodia levels, and list all possible variants (128 levels).
A PHP library to calculate and check the italian tax code (codice fiscale).
Read this in Italian.
You can install the library using composer:
$ composer require davidepastore/codice-fiscale
Use the calculator to calculate the codice fiscale.
use CodiceFiscale\Calculator;
use CodiceFiscale\Subject;
$subject = new Subject(
array(
"name" => "Mario",
"surname" => "Rossi",
"birthDate" => "1985-12-10",
"gender" => "M",
"belfioreCode" => "A562"
)
);
$calculator = new Calculator($subject);
$codiceFiscale = $calculator->calculate();
echo $codiceFiscale; //"RSSMRA85T10A562S"
You can also add an array for additional configuration for the Calculator. Available array keys are:
Calculator should consider.use CodiceFiscale\Calculator;
use CodiceFiscale\Subject;
$subject = new Subject(
array(
"name" => "Mario",
"surname" => "Rossi",
"birthDate" => "1985-12-10",
"gender" => "M",
"belfioreCode" => "A562"
)
);
$calculator = new Calculator($subject, array(
"omocodiaLevel" => $omocodiaLevel
));
$codiceFiscale = $calculator->calculate();
echo $codiceFiscale; //"RSSMRA85T10A56NH"
You can also calculate all codici fiscali that a subject could have (using all 128 available levels).
use CodiceFiscale\Calculator;
use CodiceFiscale\Subject;
$subject = new Subject(
array(
"name" => "Mario",
"surname" => "Rossi",
"birthDate" => "1985-12-10",
"gender" => "M",
"belfioreCode" => "A562"
)
);
$calculator = new Calculator($subject);
$codiciFiscali = $calculator->calculateAllPossibilities();
print_r($codiciFiscali);
/*
Array
(
[0] => RSSMRA85T10A562S
[1] => RSSMRA85T10A56NH
[2] => RSSMRA85T10A5S2E
[3] => RSSMRA85T10A5SNT
[4] => RSSMRA85T10AR62N
[5] => RSSMRA85T10AR6NC
[6] => RSSMRA85T10ARS2Z
[7] => RSSMRA85T10ARSNO
[8] => RSSMRA85T1LA562V
[9] => RSSMRA85T1LA56NK
[10] => RSSMRA85T1LA5S2H
[11] => RSSMRA85T1LA5SNW
[12] => RSSMRA85T1LAR62Q
[13] => RSSMRA85T1LAR6NF
[14] => RSSMRA85T1LARS2C
[15] => RSSMRA85T1LARSNR
[16] => RSSMRA85TM0A562D
[17] => RSSMRA85TM0A56NS
[18] => RSSMRA85TM0A5S2P
[19] => RSSMRA85TM0A5SNE
[20] => RSSMRA85TM0AR62Y
[21] => RSSMRA85TM0AR6NN
[22] => RSSMRA85TM0ARS2K
[23] => RSSMRA85TM0ARSNZ
[24] => RSSMRA85TMLA562G
[25] => RSSMRA85TMLA56NV
[26] => RSSMRA85TMLA5S2S
[27] => RSSMRA85TMLA5SNH
[28] => RSSMRA85TMLAR62B
[29] => RSSMRA85TMLAR6NQ
[30] => RSSMRA85TMLARS2N
[31] => RSSMRA85TMLARSNC
[32] => RSSMRA8RT10A562E
[33] => RSSMRA8RT10A56NT
[34] => RSSMRA8RT10A5S2Q
[35] => RSSMRA8RT10A5SNF
[36] => RSSMRA8RT10AR62Z
[37] => RSSMRA8RT10AR6NO
[38] => RSSMRA8RT10ARS2L
[39] => RSSMRA8RT10ARSNA
[40] => RSSMRA8RT1LA562H
[41] => RSSMRA8RT1LA56NW
[42] => RSSMRA8RT1LA5S2T
[43] => RSSMRA8RT1LA5SNI
[44] => RSSMRA8RT1LAR62C
[45] => RSSMRA8RT1LAR6NR
[46] => RSSMRA8RT1LARS2O
[47] => RSSMRA8RT1LARSND
[48] => RSSMRA8RTM0A562P
[49] => RSSMRA8RTM0A56NE
[50] => RSSMRA8RTM0A5S2B
[51] => RSSMRA8RTM0A5SNQ
[52] => RSSMRA8RTM0AR62K
[53] => RSSMRA8RTM0AR6NZ
[54] => RSSMRA8RTM0ARS2W
[55] => RSSMRA8RTM0ARSNL
[56] => RSSMRA8RTMLA562S
[57] => RSSMRA8RTMLA56NH
[58] => RSSMRA8RTMLA5S2E
[59] => RSSMRA8RTMLA5SNT
[60] => RSSMRA8RTMLAR62N
[61] => RSSMRA8RTMLAR6NC
[62] => RSSMRA8RTMLARS2Z
[63] => RSSMRA8RTMLARSNO
[64] => RSSMRAU5T10A562P
[65] => RSSMRAU5T10A56NE
[66] => RSSMRAU5T10A5S2B
[67] => RSSMRAU5T10A5SNQ
[68] => RSSMRAU5T10AR62K
[69] => RSSMRAU5T10AR6NZ
[70] => RSSMRAU5T10ARS2W
[71] => RSSMRAU5T10ARSNL
[72] => RSSMRAU5T1LA562S
[73] => RSSMRAU5T1LA56NH
[74] => RSSMRAU5T1LA5S2E
[75] => RSSMRAU5T1LA5SNT
[76] => RSSMRAU5T1LAR62N
[77] => RSSMRAU5T1LAR6NC
[78] => RSSMRAU5T1LARS2Z
[79] => RSSMRAU5T1LARSNO
[80] => RSSMRAU5TM0A562A
[81] => RSSMRAU5TM0A56NP
[82] => RSSMRAU5TM0A5S2M
[83] => RSSMRAU5TM0A5SNB
[84] => RSSMRAU5TM0AR62V
[85] => RSSMRAU5TM0AR6NK
[86] => RSSMRAU5TM0ARS2H
[87] => RSSMRAU5TM0ARSNW
[88] => RSSMRAU5TMLA562D
[89] => RSSMRAU5TMLA56NS
[90] => RSSMRAU5TMLA5S2P
[91] => RSSMRAU5TMLA5SNE
[92] => RSSMRAU5TMLAR62Y
[93] => RSSMRAU5TMLAR6NN
[94] => RSSMRAU5TMLARS2K
[95] => RSSMRAU5TMLARSNZ
[96] => RSSMRAURT10A562B
[97] => RSSMRAURT10A56NQ
[98] => RSSMRAURT10A5S2N
[99] => RSSMRAURT10A5SNC
[100] => RSSMRAURT10AR62W
[101] => RSSMRAURT10AR6NL
[102] => RSSMRAURT10ARS2I
[103] => RSSMRAURT10ARSNX
[104] => RSSMRAURT1LA562E
[105] => RSSMRAURT1LA56NT
[106] => RSSMRAURT1LA5S2Q
[107] => RSSMRAURT1LA5SNF
[108] => RSSMRAURT1LAR62Z
[109] => RSSMRAURT1LAR6NO
[110] => RSSMRAURT1LARS2L
[111] => RSSMRAURT1LARSNA
[112] => RSSMRAURTM0A562M
[113] => RSSMRAURTM0A56NB
[114] => RSSMRAURTM0A5S2Y
[115] => RSSMRAURTM0A5SNN
[116] => RSSMRAURTM0AR62H
[117] => RSSMRAURTM0AR6NW
[118] => RSSMRAURTM0ARS2T
[119] => RSSMRAURTM0ARSNI
[120] => RSSMRAURTMLA562P
[121] => RSSMRAURTMLA56NE
[122] => RSSMRAURTMLA5S2B
[123] => RSSMRAURTMLA5SNQ
[124] => RSSMRAURTMLAR62K
[125] => RSSMRAURTMLAR6NZ
[126] => RSSMRAURTMLARS2W
[127] => RSSMRAURTMLARSNL
)
*/
Use the checker to check if the given codice fiscale is ok for the given Subject and additional configuration. The additional configuration array for the Checker has the given available keys:
use CodiceFiscale\Checker;
use CodiceFiscale\Subject;
$subject = new Subject(
array(
"name" => "Mario",
"surname" => "Rossi",
"birthDate" => "1985-12-10",
"gender" => "M",
"belfioreCode" => "A562"
)
);
$checker = new Checker($subject, array(
"codiceFiscaleToCheck" => "RSSMRA85T10A562S",
"omocodiaLevel" => 0
));
$response = $checker->check();
echo $response; // true
You can also provide as omocodiaLevel key, the value of Checker::ALL_OMOCODIA_LEVELS that will check for all the possibilities for the given Subject.
In the following example, the Subject would not be valid for the given codice fiscale, but it will be so, cause the check will iterate over all the possibilities for the different omocodia levels.
use CodiceFiscale\Checker;
use CodiceFiscale\Subject;
$subject = new Subject(
array(
"name" => "Roberto",
"surname" => "Santi",
"birthDate" => "1963-05-08",
"gender" => "M",
"belfioreCode" => "H501"
)
);
$checker = new Checker($subject, array(
"codiceFiscaleToCheck" => "SNTRRT63E08H50ML",
"omocodiaLevel" => Checker::ALL_OMOCODIA_LEVELS
));
$response = $checker->check();
echo $response; // true
Use the Validator to verify if the given codice fiscale is formally valid. The additional configuration array for the Validator has the given available keys:
use CodiceFiscale\Validator;
$codiceFiscale = "RSSMRA85T10A562S";
$validator = new Validator($codiceFiscale);
$response = $validator->isFormallyValid();
echo $response; // true
Use the InverseCalculator to extract birth date, gender and the belfiore code from the given codice fiscale. The additional configuration array for the InverseCalculator has the keys already described for the Validator.
use CodiceFiscale\InverseCalculator;
$codiceFiscale = "RSSMRA85T10A562S";
$inverseCalculator = new InverseCalculator($codiceFiscale);
$subject = $inverseCalculator->getSubject();
var_dump($subject);
// object(CodiceFiscale\Subject)[449]
// private 'name' => null
// private 'surname' => null
// private 'birthDate' =>
// object(DateTime)[452]
// public 'date' => string '1985-12-10 00:00:00.000000' (length=26)
// public 'timezone_type' => int 3
// public 'timezone' => string 'Europe/Berlin' (length=13)
// private 'gender' => string 'M' (length=1)
// private 'belfioreCode' => string 'A562' (length=4)
$ composer test
If you have issues, just open one here.
How can I help you explore Laravel packages today?