{"id":23183482,"url":"https://github.com/marketto/codice-fiscale-utils","last_synced_at":"2025-04-08T03:11:51.522Z","repository":{"id":35036220,"uuid":"190996213","full_name":"Marketto/codice-fiscale-utils","owner":"Marketto","description":"Utility to handle Italian Codice Fiscale","archived":false,"fork":false,"pushed_at":"2024-11-28T21:49:43.000Z","size":5531,"stargazers_count":25,"open_issues_count":1,"forks_count":10,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-08T03:11:45.735Z","etag":null,"topics":["belfiore","codice-fiscale","codicefiscale","es6","generator","javascript","omocodia","parser","typescript","util"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Marketto.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.MD","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.MD","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-09T11:06:47.000Z","updated_at":"2024-11-28T21:09:41.000Z","dependencies_parsed_at":"2024-06-01T02:54:57.233Z","dependency_job_id":"c16118b8-e77e-46fc-adab-485d0a70acd1","html_url":"https://github.com/Marketto/codice-fiscale-utils","commit_stats":{"total_commits":280,"total_committers":7,"mean_commits":40.0,"dds":0.09285714285714286,"last_synced_commit":"bc12ad4c5355036b3317122f17eade79267c82c6"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marketto%2Fcodice-fiscale-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marketto%2Fcodice-fiscale-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marketto%2Fcodice-fiscale-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marketto%2Fcodice-fiscale-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Marketto","download_url":"https://codeload.github.com/Marketto/codice-fiscale-utils/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247767236,"owners_count":20992548,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["belfiore","codice-fiscale","codicefiscale","es6","generator","javascript","omocodia","parser","typescript","util"],"created_at":"2024-12-18T09:13:10.031Z","updated_at":"2025-04-08T03:11:51.505Z","avatar_url":"https://github.com/Marketto.png","language":"TypeScript","funding_links":["https://ko-fi.com/marketto"],"categories":[],"sub_categories":[],"readme":"# codice-fiscale-utils\n\n**_The Final and definitive solution to handle the Italian Tax Code_**\n\n[![NPM Version](https://img.shields.io/npm/v/@marketto/codice-fiscale-utils.svg)](https://www.npmjs.com/package/@marketto/codice-fiscale-utils)\n[![NPM Downloads](https://img.shields.io/npm/dm/@marketto/codice-fiscale-utils.svg)](https://www.npmjs.com/package/@marketto/codice-fiscale-utils)\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2FMarketto%2Fcodice-fiscale-utils.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2FMarketto%2Fcodice-fiscale-utils?ref=badge_shield)\n[![LICENSE](https://img.shields.io/badge/licese-MIT-gold.svg)](https://github.com/Marketto/codice-fiscale-utils/blob/master/LICENSE)\n[![Blog](https://img.shields.io/badge/blog-marketto-blue.svg)](http://blog.marketto.it)\n[![Buy me a coffee](https://img.shields.io/badge/Ko--fi-donate-blueviolet)](https://ko-fi.com/marketto)\n\nTS utilities to handle Italian Codice Fiscale\n\n## 📗 FAQs?\n\n1. **Why should I need a library? Can't I use just a RegExp?**\n   _A RegExp would just check the form of a CodiceFiscale, not coherence between birth date and place, not validity of 16th check digit char_\n\n2. **What about the omocodes (Omocodia/Omocodice) problem, does it work?**\n   _Absolutely! There's a dedicated class to encode or decode such kind of CodiceFiscale and it's properly integrated in_ [**_Parser_**](#parser), [**_Validator_**](#validator) and [**_Pattern_**](#pattern) _methods_\n\n3. **Can I use this library in a FE project with other frameworks?**\n   _Sure, it's built to work both in node and browser environments! Give a look at the [Demo section](#demo)_\n\n## 📙 [CHANGELOG](CHANGELOG.MD)\n\n## 🚃 [ROADMAP](ROADMAP.MD)\n\n## 🖇️ BELFIORE CONNECTOR\n\nPlease note that a **BelfioreConnector** is required, download one of the following:\n\n- [**@marketto/belfiore-connector-embedded**](https://www.npmjs.com/package/@marketto/belfiore-connector-embedded): Belfiore Connector with embedded dataset (v2 behavior)\n- [**@marketto/belfiore-connector-json**](https://www.npmjs.com/package/@marketto/belfiore-connector-json): Belfiore Connector which load a static place list or call an sync function to retrieve the place list\n\n### 🖋️ WRITE YOUR OWN CONNECTOR\n\n[**@marketto/belfiore-connector**](https://www.npmjs.com/package/@marketto/belfiore-connector): Abstract class \u0026 interfaces to write your own connector\n\n## 🔌 INSTALLATION\n\n### NPM\n\n```{r, engine='bash', global_install}\nnpm i -s @marketto/codice-fiscale-utils\n```\n\n### Script\n\n```html\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://unpkg.com/@marketto/diacritic-remover/dist/diacritic-remover.bundle.min.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://unpkg.com/@marketto/codice-fiscale-utils/dist/codice-fiscale-utils.bundle.min.js\"\u003e\u003c/script\u003e\n```\n\n## 🔧 USAGE\n\n### CJS\n\n```javascript\nconst CodiceFiscaleUtils = require(\"@marketto/codice-fiscale-utils\");\nconst codiceFiscaleUtils = new CodiceFiscaleUtils(belfioreConnector);\n```\n\n### MJS \u0026 TypeScript\n\n```typescript\nimport { CodiceFiscaleUtils } from \"@marketto/codice-fiscale-utils\";\nconst codiceFiscaleUtils = new CodiceFiscaleUtils(belfioreConnector);\n```\n\n## 📖 [DOCUMENTATION](https://marketto.github.io/codice-fiscale-utils/)\n\n### CodiceFiscaleUtils.parser\n\n\u003cdetails\u003e\n    \u003csummary\u003eShow code examples\u003c/summary\u003e\n\n#### CodiceFiscaleUtils.parser.cfDeomocode\n\n```javascript\ncodiceFiscaleUtils.parser.cfDeomocode(\"KKALMNVMAPLB331Z\"); //KKALMN91A30B331P\ncodiceFiscaleUtils.parser.cfDeomocode(\"kkalmnvmaplb331z\"); //kkalmn91a30b331p\n```\n\n#### CodiceFiscaleUtils.parser.cfOmocodeId\n\n```javascript\ncodiceFiscaleUtils.parser.cfOmocodeId(\"VRNGNYLtdsucprmt\"); //127\ncodiceFiscaleUtils.parser.cfOmocodeId(\"kkalmn91as0b331z\"); //16\ncodiceFiscaleUtils.parser.cfOmocodeId(\"kkalmn91a30b331z\"); //0\n```\n\n#### CodiceFiscaleUtils.parser.cfOmocode\n\n```javascript\ncodiceFiscaleUtils.parser.cfOmocode(\"VRNGNY07d68c351v\", 0); //VRNGNY07d68c351v\ncodiceFiscaleUtils.parser.cfOmocode(\"VRNGNY07d68c351v\", 1); //VRNGNY07d68c35Mn\ncodiceFiscaleUtils.parser.cfOmocode(\"VRNGNY07d68c351v\", 2); //VRNGNY07d68c3R1h\ncodiceFiscaleUtils.parser.cfOmocode(\"VRNGNY07d68c351v\", 3); //VRNGNY07d68c3RMz\ncodiceFiscaleUtils.parser.cfOmocode(\"VRNGNY07d68c351v\", 8); //VRNGNY07d6Uc351s\ncodiceFiscaleUtils.parser.cfOmocode(\"VRNGNY07d68c351v\", 32); //VRNGNY0Td68c351h\ncodiceFiscaleUtils.parser.cfOmocode(\"VRNGNY07d68c351v\", 127); //VRNGNYLTdSUcPRMt\n//Re-omocode\ncodiceFiscaleUtils.parser.cfOmocode(\"kkalmnvmaplb331z\", 0); //kkalmn91a30b331p\ncodiceFiscaleUtils.parser.cfOmocode(\"kkalmnvmaplb331z\", 1); //kkalmn91a30b33Mh\ncodiceFiscaleUtils.parser.cfOmocode(\"kkalmnvmaplb331z\", 74); //kkalmnv1a3lb3P1t\ncodiceFiscaleUtils.parser.cfOmocode(\"kkalmnvmaplb331z\", 127); //kkalmnvmaplbPPMe\n```\n\n#### CodiceFiscaleUtils.parser.cfToLastName\n\n```javascript\ncodiceFiscaleUtils.parser.cfToLastName(\"WYZ\"); //W*Y*Z*\n```\n\n#### CodiceFiscaleUtils.parser.cfToFirstName\n\n```javascript\ncodiceFiscaleUtils.parser.cfToFirstName(\"ZZZWAE\"); //WAE*\n```\n\n#### CodiceFiscaleUtils.parser.cfToGender\n\n```javascript\ncodiceFiscaleUtils.parser.cfToGender(\"XXXYYY90B20\"); //M\ncodiceFiscaleUtils.parser.cfToGender(\"XXXYYY90B63\"); //F\n```\n\n#### Parser.cfToBirthDay\n\n```javascript\ncodiceFiscaleUtils.parser.cfToBirthDay(\"XXXYYY90B71\"); //31\n```\n\n#### CodiceFiscaleUtils.parser.cfToBirthMonth\n\n```javascript\ncodiceFiscaleUtils.parser.cfToBirthMonth(\"XXXYYY92C\"); //2\n```\n\n#### CodiceFiscaleUtils.parser.cfToBirthYear\n\nParser will consider dates that can be both _19xx_ and _20xx_ as **_20xx_** if they would be valid in the last 100 years range from now\n\n```javascript\ncodiceFiscaleUtils.parser.cfToBirthYear(\"XXXYYY92\"); //1992\ncodiceFiscaleUtils.parser.cfToBirthYear(\"XXXYYY12\"); //2012\n```\n\n#### Parser.cfToBirthDate\n\n```javascript\nconst dt = codiceFiscaleUtils.parser.cfToBirthDate(\"XXXYYY81A63\"); //Date\ndt.toJSON(); //1981-01-23T...\n```\n\n#### CodiceFiscaleUtils.parser.cfToBirthPlace\n\n```javascript\nconst birthPlace = codiceFiscaleUtils.parser.cfToBirthPlace(\"XXXYYY92B20H501\");\n/*\n{\n    firstName: \"ROMA\",\n    belfioreCode: \"H501\",\n    creationDate: Date(\"1884-09-10T22:00:00.000Z\"),\n    expirationDate: Date(\"9999-12-31T22:59:59.999Z\"),\n    province: \"RM\",\n    dataSource: {\n        \"name\": \"Ministero dell\\'Interno\",\n        \"url\": \"https://developers.italia.it/en/anpr\",\n        \"license\": \"cc-by-4.0\",\n        \"licenseUrl\": \"https://creativecommons.org/licenses/by/4.0/legalcode.it\",\n        \"termsAndConditions\": \"https://github.com/italia/anpr/blob/master/src/archivi/ANPR_archivio_comuni_legenda.md\",\n        \"authors\": \"https://github.com/italia/anpr/blob/master/AUTHORS\"\n    }\n}\n*/\n```\n\n#### Parser.cfDecode (async)\n\n```javascript\nawait codiceFiscaleUtils.parser.cfDecode(\"VRNGNY07D68C351V\");\n/*\n{\n    lastName: 'V*R*N*',\n    firstName: 'G*N*Y*',\n    day: 28,\n    month: 3,\n    year: 2017,\n    gender: 'F',\n    place: {\n\t\tbelfioreCode: 'C531',\n\t\tname: 'CATANIA',\n\t\tcreationDate: Date('1861-03-17'),\n\t\texpirationDate: Date('9999-12-31'),\n\t\tprovince: 'CT',\n\t\tdataSource: {\n\t\t\tname: 'Ministero dell\\'Interno',\n\t\t\turl: '...',\n\t\t\tauthors: '...',\n\t\t\tlicense: 'cc-by-4.0',\n\t\t\tlicenseUrl: '...',\n\t\t\ttermsAndConditions: '...'\n\t\t}\n\n\t}\n}\n*/\n```\n\n#### Parser.lastNameToCf\n\n```javascript\ncodiceFiscaleUtils.parser.lastNameToCf(\"Rossi\"); //RSS\ncodiceFiscaleUtils.parser.lastNameToCf(\"Réno\"); //RNE\ncodiceFiscaleUtils.parser.lastNameToCf(\"Aieie\"); //AIE\n```\n\n#### Parser.firstNameToCf\n\n```javascript\ncodiceFiscaleUtils.parser.firstNameToCf(\"Dòminique\"); //DNQ\ncodiceFiscaleUtils.parser.firstNameToCf(\"Mark\"); //MRK\ncodiceFiscaleUtils.parser.firstNameToCf(\"Tom\"); //TMO\ncodiceFiscaleUtils.parser.firstNameToCf(\"Ania\"); //NAI\n```\n\n#### Parser.yearToCf\n\n```javascript\ncodiceFiscaleUtils.parser.yearToCf(\"1990\"); //90\ncodiceFiscaleUtils.parser.yearToCf(2010); //10\ncodiceFiscaleUtils.parser.yearToCf(\"02\"); //02\n```\n\n#### Parser.monthToCf\n\n```javascript\ncodiceFiscaleUtils.parser.monthToCf(0); //A\ncodiceFiscaleUtils.parser.monthToCf(4); //E\ncodiceFiscaleUtils.parser.monthToCf(8); //P\n```\n\n#### Parser.monthToCf\n\n```javascript\ncodiceFiscaleUtils.parser.monthToCf(0); //A\ncodiceFiscaleUtils.parser.monthToCf(4); //E\ncodiceFiscaleUtils.parser.monthToCf(8); //P\n```\n\n#### Parser.dayGenderToCf\n\n```javascript\ncodiceFiscaleUtils.parser.dayGenderToCf(3, \"M\"); //03\ncodiceFiscaleUtils.parser.dayGenderToCf(7, \"F\"); //47\n```\n\n#### Parser.dateGenderToCf\n\n```javascript\ncodiceFiscaleUtils.parser.dateGenderToCf([2016, 3, 23], \"M\"); //16D23\ncodiceFiscaleUtils.parser.dateGenderToCf(\"1987-09-22\", \"F\"); //87P62\ncodiceFiscaleUtils.parser.dateGenderToCf(new Date(2016, 2, 23, 12), \"M\"); //16C23\ncodiceFiscaleUtils.parser.dateGenderToCf(moment(1988, 7, 3, 12), \"F\"); //88M43\n```\n\n#### Parser.placeToCf (async)\n\n```javascript\nawait codiceFiscaleUtils.parser.placeToCf(\"Bologna\");\n/*\n{\n    belfioreCode: 'A944',\n    name: 'BOLOGNA',\n    creationDate: 1861-03-16T23:00:00.000Z,\n    expirationDate: 9999-12-31T22:59:59.999Z,\n    dataSource: {...},\n    province: 'BO'\n}\n*/\nawait codiceFiscaleUtils.parser.placeToCf([1990], \"Unione Sovietica\");\n/*\n{\n    belfioreCode: 'Z135',\n    name: 'Unione Sovietica',\n    creationDate: 1860-12-31T23:00:00.000Z,\n    expirationDate: 1991-12-31T22:59:59.999Z,\n    dataSource: {...},\n    iso3166: 'SU'\n}\n*/\nawait codiceFiscaleUtils.parser.placeToCf([2000], \"Unione Sovietica\"); //null\n```\n\n#### Parser.encodeCf (async)\n\n```javascript\nawait codiceFiscaleUtils.parser.encodeCf({\n\tlastName: \"Veronesi\",\n\tfirstName: \"Genny\",\n\tyear: 1907,\n\tmonth: 3,\n\tday: 28,\n\tgender: \"F\",\n\tplace: \"Catania\",\n}); //VRNGNY07D68C351V\n```\n\n```javascript\nawait codiceFiscaleUtils.parser.encodeCf({\n\tlastName: \"Veronesi\",\n\tfirstName: \"Genny\",\n\tyear: 1907,\n\tmonth: 3,\n\tday: 28,\n\tgender: \"F\",\n\tplace: \"C531\",\n}); //VRNGNY07D68C351V\n```\n\n\u003c/details\u003e\n\n### CodiceFiscaleUtils.pattern\n\n\u003cdetails\u003e\n    \u003csummary\u003eShow code examples\u003c/summary\u003e\n\n#### CodiceFiscaleUtils.pattern.cfLastName\n\n```javascript\ncodiceFiscaleUtils.pattern.cfLastName().test(\"KST\"); //true\ncodiceFiscaleUtils.pattern.cfLastName().test(\"AST\"); //false\ncodiceFiscaleUtils.pattern.cfLastName(\"Alex\").test(\"KST\"); //false\ncodiceFiscaleUtils.pattern.cfLastName(\"Alex\").test(\"LXA\"); //true\n```\n\n#### CodiceFiscaleUtils.pattern.cfFirstName\n\n```javascript\ncodiceFiscaleUtils.pattern.cfFirstName().test(\"NIX\"); //true\ncodiceFiscaleUtils.pattern.cfFirstName().test(\"UIK\"); //false\ncodiceFiscaleUtils.pattern.cfFirstName(\"Dominique\").test(\"DMN\"); //false\ncodiceFiscaleUtils.pattern.cfFirstName(\"Dominique\").test(\"DNQ\"); //true\n```\n\n#### CodiceFiscaleUtils.pattern.cfYear\n\n```javascript\ncodiceFiscaleUtils.pattern.cfYear().test(\"07\"); //true\ncodiceFiscaleUtils.pattern.cfYear().test(\"3\"); //false\ncodiceFiscaleUtils.pattern.cfYear(1907).test(\"07\"); //true\ncodiceFiscaleUtils.pattern.cfYear(1986).test(\"U6\"); //true - omocode\ncodiceFiscaleUtils.pattern.cfYear(1986).test(\"87\"); //false\n```\n\n#### CodiceFiscaleUtils.pattern.cfMonth\n\n```javascript\ncodiceFiscaleUtils.pattern.cfMonth().test(\"C\"); //true\ncodiceFiscaleUtils.pattern.cfMonth().test(\"Z\"); //false\ncodiceFiscaleUtils.pattern.cfMonth(3).test(\"D\"); //true\ncodiceFiscaleUtils.pattern.cfMonth(3).test(\"A\"); //false\n```\n\n#### CodiceFiscaleUtils.pattern.cfDay\n\n```javascript\ncodiceFiscaleUtils.pattern.cfDay().test(\"0M\"); //true - omocode\ncodiceFiscaleUtils.pattern.cfDay().test(\"33\"); //false\ncodiceFiscaleUtils.pattern.cfDay(12).test(\"12\"); //true - male\ncodiceFiscaleUtils.pattern.cfDay(12).test(\"52\"); //true - female\ncodiceFiscaleUtils.pattern.cfDay(12).test(\"MN\"); //true - omocode\ncodiceFiscaleUtils.pattern.cfDay(12).test(\"22\"); //false\n```\n\n#### CodiceFiscaleUtils.pattern.cfDayGender\n\n```javascript\ncodiceFiscaleUtils.pattern.cfDayGender().test(\"0M\"); //true\ncodiceFiscaleUtils.pattern.cfDayGender().test(\"73\"); //false\ncodiceFiscaleUtils.pattern.cfDayGender(9, \"F\").test(\"RM\"); //true\ncodiceFiscaleUtils.pattern.cfDayGender(1, \"F\").test(\"41\"); //true\ncodiceFiscaleUtils.pattern.cfDayGender(1, \"M\").test(\"41\"); //false\n```\n\n#### CodiceFiscaleUtils.pattern.cfDateGender\n\n```javascript\ncodiceFiscaleUtils.pattern.cfDateGender().test(\"83D22\"); //true\ncodiceFiscaleUtils.pattern.cfDateGender().test(\"83Z32\"); //false\ncodiceFiscaleUtils.pattern.cfDateGender([1983, 3, 22], \"M\").test(\"U3D2N\"); //true\ncodiceFiscaleUtils.pattern.cfDateGender(\"1995-05-01\", \"F\").test(\"V5EQ1\"); //true\ncodiceFiscaleUtils.pattern.cfDateGender([1983, 3, 22], \"M\").test(\"83D62\"); //false\n```\n\n#### CodiceFiscaleUtils.pattern.cfPlace (async)\n\n```javascript\nconst genericCfPlaceMatcher = await codiceFiscaleUtils.pattern.cfPlace();\ngenericCfPlaceMatcher.test(\"A662\"); //true\ngenericCfPlaceMatcher.test(\"Z974\"); //false\n\nconst cityCfPlaceMatcher = await codiceFiscaleUtils.pattern.cfPlace(\"Bari\");\ncityCfPlaceMatcher.test(\"H501\"); //true\n\nconst year33CityCfPlaceMatcher = await codiceFiscaleUtils.pattern.cfPlace(\n\t[1933],\n\t\"Fiume\"\n);\nyear33CityCfPlaceMatcher.test(\"D620\"); //true\nconst year00CityCfPlaceMatcher = await codiceFiscaleUtils.pattern.cfPlace(\n\t[2000],\n\t\"Fiume\"\n);\nyear00CityCfPlaceMatcher.test(\"D620\"); //false - due to expiration date\n```\n\n#### CodiceFiscaleUtils.pattern.codiceFiscale (async)\n\n```javascript\nconst cFMatcher = await codiceFiscaleUtils.pattern.codiceFiscale();\ncFMatcher.test(\"VRNGNY07D68C351V\"); //true\ncFMatcher.codiceFiscale().test(\"MRNMIA02E45L2193\"); //false\n\n//Partial info\nconst cfPartialInfo = await codiceFiscaleUtils.pattern.codiceFiscale({\n\tlastName: \"Veronesi\",\n\tfirstName: \"Genny\",\n\tgender: \"F\",\n\tplace: \"Catania\",\n});\ncfPartialInfo.test(\"VRNGNY97A65C351V\"); //true\n\n//Full info\nconst cfFullInfo = await codiceFiscaleUtils.pattern.codiceFiscale({\n\tlastName: \"Veronesi\",\n\tfirstName: \"Genny\",\n\tyear: 1907,\n\tmonth: 3,\n\tday: 28,\n\tgender: \"F\",\n\tplace: \"Catania\",\n});\ncfFullInfo.test(\"VRNGNY07D68C351V\"); //true\n```\n\n#### CodiceFiscaleUtils.pattern.lastName\n\n```javascript\ncodiceFiscaleUtils.pattern.lastName().test(\"Kristersen\"); //true\ncodiceFiscaleUtils.pattern.lastName(\"VLD\").test(\"Vàlidàtòr\"); //true\ncodiceFiscaleUtils.pattern.lastName(\"AIX\").test(\"Air\"); //false\n```\n\n#### CodiceFiscaleUtils.pattern.firstName\n\n```javascript\ncodiceFiscaleUtils.pattern.firstName().test(\"Rossi\"); //true\ncodiceFiscaleUtils.pattern.firstName(\"XYZAIE\").test(\"Aieie\"); //true\ncodiceFiscaleUtils.pattern.firstName(\"XYZAIX\").test(\"Air\"); //false\n```\n\n#### CodiceFiscaleUtils.pattern.date\n\n```javascript\ncodiceFiscaleUtils.pattern.date().test(\"1995\"); //true\ncodiceFiscaleUtils.pattern.date().test(\"1985-01\"); //true\ncodiceFiscaleUtils.pattern.date().test(\"1970-03-03\"); //true\ncodiceFiscaleUtils.pattern.date().test(\"1970-03-\"); //false\ncodiceFiscaleUtils.pattern.date(\"XYZXYZ88H61\").test(\"1988-06-21\"); //true\ncodiceFiscaleUtils.pattern.date(\"XYZXYZ92C16\").test(\"1992-03-26\"); //false\n```\n\n#### CodiceFiscaleUtils.pattern.gender\n\n```javascript\ncodiceFiscaleUtils.pattern.gender().test(\"F\"); //true\ncodiceFiscaleUtils.pattern.gender().test(\"X\"); //false\ncodiceFiscaleUtils.pattern.gender(\"XYZXYZ88H61\").test(\"F\"); //true\ncodiceFiscaleUtils.pattern.gender(\"XYZXYZ88H61\").test(\"M\"); //false\n```\n\n#### CodiceFiscaleUtils.pattern.place (async)\n\n```javascript\nconst genericPlaceMatcher = await codiceFiscaleUtils.pattern.place();\ngenericPlaceMatcher.test(\"Roma\"); //true\n\nconst cityPlaceMatcher = await codiceFiscaleUtils.pattern.place(\n\t\"XYZXYZ92C16A662\"\n);\ncityPlaceMatcher.test(\"Bari\"); //true\ncityPlaceMatcher.test(\"Bologna\"); //false\n```\n\n\u003c/details\u003e\n\n### CodiceFiscaleUtils.validator\n\n\u003cdetails\u003e\n    \u003csummary\u003eShow code examples\u003c/summary\u003e\n\n#### CodiceFiscaleUtils.validator.isLastNameValid\n\n```javascript\ncodiceFiscaleUtils.validator.isLastNameValid(\"Test\"); //true\ncodiceFiscaleUtils.validator.isLastNameValid(\"Tést N'àme\"); //true\ncodiceFiscaleUtils.validator.isLastNameValid(\"\"); //false\ncodiceFiscaleUtils.validator.isLastNameValid(\"@!#\"); //false\n```\n\n#### CodiceFiscaleUtils.validator.isLastNameInvalid\n\n```javascript\ncodiceFiscaleUtils.validator.isLastNameInvalid(\"Test\"); //false\ncodiceFiscaleUtils.validator.isLastNameInvalid(\"Tést N'àme\"); //false\ncodiceFiscaleUtils.validator.isLastNameInvalid(\"\"); //false\ncodiceFiscaleUtils.validator.isLastNameInvalid(\"@!#\"); //true\n```\n\n#### CodiceFiscaleUtils.validator.isFirstNameValid\n\n```javascript\ncodiceFiscaleUtils.validator.isFirstNameValid(\"Test\"); //true\ncodiceFiscaleUtils.validator.isFirstNameValid(\"Tést N'àme\"); //true\ncodiceFiscaleUtils.validator.isFirstNameValid(\"\"); //false\ncodiceFiscaleUtils.validator.isFirstNameValid(\"@!#\"); //false\n```\n\n#### CodiceFiscaleUtils.validator.isFirstNameInvalid\n\n```javascript\ncodiceFiscaleUtils.validator.isFirstNameInvalid(\"Test\"); //false\ncodiceFiscaleUtils.validator.isFirstNameInvalid(\"Tést N'àme\"); //false\ncodiceFiscaleUtils.validator.isFirstNameInvalid(\"\"); //false\ncodiceFiscaleUtils.validator.isFirstNameInvalid(\"@!#\"); //true\n```\n\n#### CodiceFiscaleUtils.validator.isBirthDateValid\n\n```javascript\ncodiceFiscaleUtils.validator.isBirthDateValid(\"1999-01-01\"); //true\ncodiceFiscaleUtils.validator.isBirthDateValid([1999, 0, 1]); //true\ncodiceFiscaleUtils.validator.isBirthDateValid(\"\"); //false\ncodiceFiscaleUtils.validator.isBirthDateValid(\"2000-02-30\"); //false\ncodiceFiscaleUtils.validator.isBirthDateValid(\"No date\"); //false\ncodiceFiscaleUtils.validator.isBirthDateValid(\"@!#\"); //false\n```\n\n#### CodiceFiscaleUtils.validator.isBirthDateInvalid\n\n```javascript\ncodiceFiscaleUtils.validator.isBirthDateInvalid(\"1999-01-01\"); //false\ncodiceFiscaleUtils.validator.isBirthDateInvalid([1999, 0, 1]); //false\ncodiceFiscaleUtils.validator.isBirthDateInvalid(\"\"); //false\ncodiceFiscaleUtils.validator.isBirthDateInvalid(\"2000-02-30\"); //true\ncodiceFiscaleUtils.validator.isBirthDateInvalid(\"No date\"); //true\ncodiceFiscaleUtils.validator.isBirthDateInvalid(\"@!#\"); //true\n```\n\n#### CodiceFiscaleUtils.validator.isBirthPlaceValid (async)\n\n```javascript\nawait codiceFiscaleUtils.validator.isBirthPlaceValid(\"Roma\"); //true\nawait codiceFiscaleUtils.validator.isBirthPlaceValid(\"H501\"); //true\nawait codiceFiscaleUtils.validator.isBirthPlaceValid(\"\"); //false\nawait codiceFiscaleUtils.validator.isBirthPlaceValid(\"Moon\"); //false\n```\n\n#### CodiceFiscaleUtils.validator.isBirthPlaceInvalid (async)\n\n```javascript\nawait codiceFiscaleUtils.validator.isBirthPlaceInvalid(\"Roma\"); //false\nawait codiceFiscaleUtils.validator.isBirthPlaceInvalid(\"H501\"); //false\nawait codiceFiscaleUtils.validator.isBirthPlaceInvalid(\"\"); //false\nawait codiceFiscaleUtils.validator.isBirthPlaceInvalid(\"Moon\"); //true\n```\n\n#### CodiceFiscaleUtils.validator.birthDatePlaceMatch\n\n```javascript\nawait codiceFiscaleUtils.validator.birthDatePlaceMatch(\n\t\"1990-05-21\",\n\t\"Repubblica Socialista Federale di Jugoslavia\"\n); //true\nawait codiceFiscaleUtils.validator.birthDatePlaceMatch(\n\tnew Date(),\n\t\"Repubblica Socialista Federale di Jugoslavia\"\n); //false\nawait codiceFiscaleUtils.validator.birthDatePlaceMatch(\"1988-03-11\", \"Roma\"); //true\nawait codiceFiscaleUtils.validator.birthDatePlaceMatch(new Date(), \"Roma\"); //true\nawait codiceFiscaleUtils.validator.birthDatePlaceMatch(new Date(), \"\"); //false\nawait codiceFiscaleUtils.validator.birthDatePlaceMatch(\"\", \"Palermo\"); //false\nawait codiceFiscaleUtils.validator.birthDatePlaceMatch(\"\", \"\"); //false\n```\n\n#### CodiceFiscaleUtils.validator.birthDatePlaceMismatch\n\n```javascript\nawait codiceFiscaleUtils.validator.birthDatePlaceMismatch(\n\t\"1990-05-21\",\n\t\"Repubblica Socialista Federale di Jugoslavia\"\n); //false\nawait codiceFiscaleUtils.validator.birthDatePlaceMismatch(\n\tnew Date(),\n\t\"Repubblica Socialista Federale di Jugoslavia\"\n); //true\nawait codiceFiscaleUtils.validator.birthDatePlaceMismatch(\"1988-03-11\", \"Roma\"); //false\nawait codiceFiscaleUtils.validator.birthDatePlaceMismatch(new Date(), \"Roma\"); //false\nawait codiceFiscaleUtils.validator.birthDatePlaceMismatch(new Date(), \"\"); //false\nawait codiceFiscaleUtils.validator.birthDatePlaceMismatch(\"\", \"Palermo\"); //false\nawait codiceFiscaleUtils.validator.birthDatePlaceMismatch(\"\", \"\"); //false\n```\n\n\u003c/details\u003e\n\n### CFMismatchValidator\n\n_Class_ instance\n\n```javascript\n//CFMismatchValidator\nconst cfValidator = await codiceFiscaleUtils.validator.codiceFiscale(\n\t\"VRNGNY07D68C351V\"\n);\n```\n\n\u003cdetails\u003e\n    \u003csummary\u003eShow code examples\u003c/summary\u003e\n\n#### CFMismatchValidator.errors\n\n```javascript\n(await codiceFiscaleUtils.validator.codiceFiscale(\"GSTPPP99C06D620V\")).errors;\n/*\n{\n\tplace: \"PLACE_EXPIRED_ON_NOT_YET_CREATED_ON_BIRTDATE\",\n\tdate: \"BIRTHDATE_OUT_OF_BIRTH_PLACE_LIFE_RANGE\",\n}\n*/\n```\n\n#### CFMismatchValidator.matchPersonalInfo\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchPersonalInfo({\n\tday: 28,\n\tfirstName: \"Génny\",\n\tgender: \"F\",\n\tlastName: \"Verònesi\",\n\tmonth: 3,\n\tplace: \"Catania\",\n\tyear: 1907,\n}); //true\n\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchPersonalInfo({\n\tday: 28,\n\tfirstName: \"Génny\",\n\tgender: \"F\",\n\tlastName: \"Verònesi\",\n\tmonth: 3,\n\tplace: \"Firenze\",\n\tyear: 1907,\n}); //false\n```\n\n#### CFMismatchValidator.mismatchPersonalInfo\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchPersonalInfo({\n\tday: 28,\n\tfirstName: \"Génny\",\n\tgender: \"F\",\n\tlastName: \"Verònesi\",\n\tmonth: 3,\n\tplace: \"Catania\",\n\tyear: 1907,\n}); //false\n\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchPersonalInfo({\n\tday: 28,\n\tfirstName: \"Génny\",\n}); //false\n```\n\n#### CFMismatchValidator.valid\n\n```javascript\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")).valid; //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"MRNMIA02E45L219X\")).valid; //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"GSTPPP31C06D620Z\")).valid; //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351K\")).valid; //false - invalid check digit\n(await codiceFiscaleUtils.validator.codiceFiscale(\"GSTPPP99C06D620V\")).valid; //false - invalid birth date/place\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).valid; //false - empty cf\n```\n\n#### CFMismatchValidator.invalid\n\n```javascript\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")).invalid; //false - OK\n(await codiceFiscaleUtils.validator.codiceFiscale(\"MRNMIA02E45L219X\")).invalid; //false - OK\n(await codiceFiscaleUtils.validator.codiceFiscale(\"GSTPPP31C06D620Z\")).invalid; //false - OK\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351K\")).invalid; //true - invalid check digit\n(await codiceFiscaleUtils.validator.codiceFiscale(\"GSTPPP99C06D620V\")).invalid; //true - invalid birth date/place\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).invalid; //false - empty cf is not invalid!\n```\n\n#### CFMismatchValidator.matchLastName\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchLastName(\"Vareni\"); //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRN\")).matchLastName(\n\t\"Vareni\"\n); //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).matchLastName(\"Vareni\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchLastName(\"John\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchLastName(\"V\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchLastName(\"\"); //false\n```\n\n#### CFMismatchValidator.mismatchLastName\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchLastName(\"Vareni\"); //false\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRN\")).mismatchLastName(\n\t\"Vareni\"\n); //false\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).mismatchLastName(\n\t\"Vareni\"\n); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchLastName(\"John\"); //true\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchLastName(\"V\"); //true\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchLastName(\"\"); //false\n```\n\n#### CFMismatchValidator.matchFirstName\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchFirstName(\"Genny\"); //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY\")).matchFirstName(\n\t\"Genny\"\n); //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).matchFirstName(\"Genny\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchFirstName(\"John\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchFirstName(\"G\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchFirstName(\"\"); //false\n```\n\n#### CFMismatchValidator.mismatchFirstName\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchFirstName(\"Genny\"); //false\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRN\")).mismatchFirstName(\n\t\"Genny\"\n); //false\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).mismatchFirstName(\n\t\"Genny\"\n); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchFirstName(\"John\"); //true\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchFirstName(\"G\"); //true\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchFirstName(\"\"); //false\n```\n\n#### CFMismatchValidator.matchBirthDate\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchBirthDate(\"2007-04-28\"); //true\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68\")\n).matchBirthDate(\"2007-04-28\"); //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).matchBirthDate(\n\t\"2007-04-28\"\n); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchBirthDate(\"2008-02-16\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchBirthDate(\"\"); //false\n```\n\n#### CFMismatchValidator.mismatchBirthDate\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchBirthDate(\"2007-04-28\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68\")\n).mismatchBirthDate(\"2007-04-28\"); //false\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).mismatchBirthDate(\n\t\"2007-04-28\"\n); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchBirthDate(\"2008-02-16\"); //true\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchBirthDate(\"\"); //false\n```\n\n#### CFMismatchValidator.matchGender\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchGender(\"F\"); //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68\")).matchGender(\n\t\"F\"\n); //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D6\")).matchGender(\n\t\"F\"\n); //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).matchGender(\"F\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchGender(\"M\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchGender(\"\"); //false\n```\n\n#### CFMismatchValidator.mismatchGender\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchGender(\"F\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68\")\n).mismatchGender(\"F\"); //false\n(await codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D6\")).mismatchGender(\n\t\"F\"\n); //false\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).mismatchGender(\"F\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchGender(\"M\"); //true\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchGender(\"\"); //false\n```\n\n#### CFMismatchValidator.matchBirthPlace\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchBirthPlace(\"CATANIA\"); //true\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351\")\n).matchBirthPlace(\"CATANIA\"); //true\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).matchBirthPlace(\n\t\"CATANIA\"\n); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchBirthPlace(\"ROMA\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).matchBirthPlace(\"\"); //false\n```\n\n#### CFMismatchValidator.mismatchBirthPlace\n\n```javascript\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchBirthPlace(\"CATANIA\"); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351\")\n).mismatchBirthPlace(\"CATANIA\"); //false\n(await codiceFiscaleUtils.validator.codiceFiscale(\"\")).mismatchBirthPlace(\n\t\"CATANIA\"\n); //false\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchBirthPlace(\"ROMA\"); //true\n(\n\tawait codiceFiscaleUtils.validator.codiceFiscale(\"VRNGNY07D68C351V\")\n).mismatchBirthPlace(\"\"); //false\n```\n\n\u003c/details\u003e\n\n## 🔃 Compatibility\n\n- [x] NodeJs\n- [x] Chrome\n- [x] Firefox\n- [x] Edge\n\n## ✋ DISCLAMER\n\nAll names, informations, and fiscal codes used in this README and all unit tests are fictitious.\nNo identification with actual persons (living or deceased) is intended or should be inferred\n\n## 📜 [LICENSE: MIT](LICENSE)\n\n## 📚 ASSETS LICENSES AND AUTHORS\n\n- Cities List of Values: [CC BY 4.0](asset/MINISTERO_DELL_INTERNO.LICENSE) Ministero dell'interno\n- Cities List of Values: [CC BY 4.0](asset/AGENZIA_DELLE_ENTRATE.LICENSE) Agenzia delle Entrate\n- Countries List of Values: [CC BY 3.0](asset/ISTITUTO_NAZIONALE_DI_STATISTICA.LICENSE) Istituto nazionale di statistica\n\n## 📝 AUTHOR\n\n[Marco Ricupero](mailto:marco.ricupero@gmail.com)\n\n## 📬 CONTRIBUTORS\n\n- [Giacomo Gregoletto](https://github.com/greguz)\n- [Julian Scheid](https://github.com/jscheid)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarketto%2Fcodice-fiscale-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarketto%2Fcodice-fiscale-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarketto%2Fcodice-fiscale-utils/lists"}