DennisTurco.CodiceFiscale
1.0.1
This package is deprecated, the new one is ItalianFiscalKit.
dotnet add package DennisTurco.CodiceFiscale --version 1.0.1
NuGet\Install-Package DennisTurco.CodiceFiscale -Version 1.0.1
<PackageReference Include="DennisTurco.CodiceFiscale" Version="1.0.1" />
<PackageVersion Include="DennisTurco.CodiceFiscale" Version="1.0.1" />
<PackageReference Include="DennisTurco.CodiceFiscale" />
paket add DennisTurco.CodiceFiscale --version 1.0.1
#r "nuget: DennisTurco.CodiceFiscale, 1.0.1"
#:package DennisTurco.CodiceFiscale@1.0.1
#addin nuget:?package=DennisTurco.CodiceFiscale&version=1.0.1
#tool nuget:?package=DennisTurco.CodiceFiscale&version=1.0.1
<p align="center"> <img src="assets/icon.svg" alt="CodiceFiscale icon" width="96" /> </p>
Codice Fiscale
FULL DOCUMENTATION: https://dennisturco.github.io/CodiceFiscale/
A lightweight .NET library for Italian fiscal compliance: validate, parse and generate Codice Fiscale, validate Partita IVA and IBAN, and query a built-in database of Italian municipalities and foreign countries (Belfiore codes). Everything runs locally — no HTTP calls, no external services, no data leaves your app.
All validation logic runs locally. No HTTP calls, no data ever leaves your application.
Installation
dotnet add package CodiceFiscale
Features
- Fiscal code validation (format + checksum)
- Fiscal code generation from personal data
- Cross-check: does this fiscal code match these personal details?
- Italian VAT number validation (standard, public entity, foreign)
- IBAN validation (mod97, all countries)
- Comuni and codici Belfiore embedded dataset (no external files needed)
- Fully tested
Usage
Validate a fiscal code
using CodiceFiscale; bool isValid = CodiceFiscaleValidator.IsValid("RSSMRA80A01H501U"); // trueGenerate a fiscal code
string cf = CodiceFiscaleGenerator.Generate( name: "Mario", surname: "Rossi", dateOfBirth: new DateOnly(1980, 1, 1), gender: Gender.Male, belfioreCode: "H501" // Roma — use MunicipalityExtensions to look up the code ); // "RSSMRA80A01H501U"Cross-check fiscal code against personal data
bool matches = CodiceFiscaleMatcher.Matches( cf: "RSSMRA80A01H501U", name: "Mario", surname: "Rossi", dateOfBirth: new DateOnly(1980, 1, 1), gender: Gender.Male, belfioreCode: "H501" ); // trueParse a fiscal code
CodiceFiscaleData parsed = CodiceFiscaleParser.Parse("RSSMRA80A01H501U"); parsed.Gender // Male parsed.DateOfBirth // 1980-01-01 parsed.BelfioreCode // "H501"Age helpers (extension methods on
CodiceFiscaleData)int age = parsed.GetAge(); // e.g. 45 bool adult = parsed.IsAdult(); // true if age >= 18Look up a municipality
Municipality? comune = "H501".GetMunicipalityByBelfiore(); // Roma Municipality? byName = "Milano".GetMunicipalityByName(); Municipality? byCAP = "00186".GetMunicipalityByCAP(); IEnumerable<Municipality>? inRoma = "Roma".GetAllByProvince(); // 121 comuni IEnumerable<Municipality> all = MunicipalityExtensions.GetAll(); // ~7 896Validate an Italian VAT number
bool isValid = ItalianVatCodeValidator.IsValid("00484960588", isConsumer: false, isFiscal: false); // trueValidate an IBAN
bool isValid = IBANValidator.IsValid("IT60X0542811101000000123456"); // true
Edge cases handled
- Names with fewer than 3 consonants (Re, Li, Yu)
- Names with apostrophes and accents (D'Amico, Rosà)
- Foreign-born individuals (Belfiore code Z + country number)
- Omocodia (alternate fiscal codes with letters replacing digits)
- VAT numbers for public entities (starting with 8 or 9)
- Obsolete municipalities (comuni soppressi)
Why not an API?
Fiscal codes and VAT numbers are personal data. Sending them to a third-party server to validate them raises immediate GDPR concerns. This library validates everything locally. The data never leaves your application.
Dataset
The comuni/Belfiore dataset is sourced from ISTAT open data and embedded directly in the library binary. No external files are required at runtime.
The dataset is updated with each minor release to reflect municipality changes (merges, renames, new comuni).
Contributing
Contributions are welcome. If you find a fiscal code that validates incorrectly, please open an issue with:
- The fiscal code (you can anonymise it — just keep the structure)
- The personal data it should/should not match
- The expected result
License
Municipalities data
https://comuni-ita.readme.io/reference/getcomuni
Build locally
dotnet build
dotnet test
Launch DocFX locally
docfx .\docfx.json --serve
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- Newtonsoft.Json (>= 13.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.