Giter Site home page Giter Site logo

lucavandro / codicefiscalejs Goto Github PK

View Code? Open in Web Editor NEW
191.0 14.0 75.0 3.16 MB

CodiceFiscale.js is a utility library to compute and validate Italian Tax code (codice fiscale).

License: Creative Commons Attribution Share Alike 4.0 International

JavaScript 96.57% HTML 2.57% Python 0.86%

codicefiscalejs's Introduction

CodiceFiscale.js

CodiceFiscale.js is a javascript and typescript utility library to compute and validate Italian Italian Tax code (codice fiscale).

Check it out

CodiceFiscaleJS

Donate

Donate

Change log

Version 2.3.10

  • Security fixes
  • Bug fixes
  • Added isOmocodia function
  • Test code refactoring

Version 2.3.4

  • Improved search
  • Bug fixes

Version 2.3.0

  • Complete italian comuni list (comuni soppressi, che hanno cambiato provincia) [last update 29/05/2020]
  • Python script to update data directly from the ISTAT website

Version 2.2.5

  • Added more comuni
  • Updated gh-pages sites
  • Security fix

Version 2.2.4

  • Fixed lowercase validation issue
  • Updated country list
  • Security fix

Version 2.2.1

  • Fixed UTC Date issue
  • Minor bug fixed

Version 2.0.0

  • Added TypeScript support
  • Added Object-oriented API
  • Improved performance
  • Improved error detection
  • Backcompatible

Installation

Node

npm install codice-fiscale-js --save
var CodiceFiscale = require('codice-fiscale-js');

Web

<script src="/dist/codice.fiscale.var.js"></script>

AMD, UMD e CommonJS version are available. Check dist folder

Docs

Available npm scripts:

  • npm run build: build the bundle into dist directory.
  • npm run test: launch the tests.

codicefiscalejs's People

Contributors

aecant avatar arseniosiani avatar bottachai avatar bwlt avatar caine85 avatar danog avatar denisfrezzato avatar dependabot[bot] avatar edotassi avatar giacomocherry avatar lucabertolasi avatar lucasaba avatar lucavandro avatar marcopesani avatar matrad avatar moty66 avatar sebysr avatar steinuil avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

codicefiscalejs's Issues

Reverse non funziona al cambiare di un elemento del codice fiscale

Buongiorno,
facendo delle prove con il Reverse del codice fiscale, noto che se cambiassi un parametro (come la data, per esempio) il reverse non funziona più.

Ho provato prima il codice all'interno del progetto nella quale uso la libreria e successivamente su RunKit NPM . Quest'ultimo ritorna il seguente errore: Provided input is not a valid Codice Fiscale

Per testarlo, ho inserito il codice fiscale nell'esempio js-oop.md -> RGHNZE10L24F839E e dopo aver fatto il primo reverse, ho cambiato l'anno di nascita da 10 a 02. -> RGHNZE02L24F839E

Questa modifica ha fatto si che il sistema ritornasse l'errore sopra scritto

EDIT

Issue gestita con il codice di controllo

Bug omocodie e toString()

Se viene chiamato il metodo toString() dopo aver chiamato il metodo omocodie() sullo stesso oggetto CodiceFiscale, manca il checkCode.
Ad esempio l'output di questo codice

let cf = new CodiceFiscale({
            name: "Mario",
            surname: "Rossi",
            gender: "M",
            birthday: "1987-02-01",
            birthplace: "H501"
        });

console.log(cf.toString());
cf.omocodie();
console.log(cf.toString());

è

RSSMRA87B01H501A
RSSMRA87B01H501

Come si può vedere, nel secondo output manca il checkCode.

comuni non aggiornati

Alcuni comuni risalenti al 2019 mancano (esempio: corigliano e rossano si sono fusi insieme cambiando codice, provincia di cosenza)

Omocodia

Sembrerebbe che la libreria non gestisca correttamente gli omocodi. Sarebbe possibile introdurre anche questa funzionalità.

Error if name is BOLZANO

if name is BOLZANO the script not return values, i think the problem is because there are 3 BOLZANO ...

Error check is not a function

Hi,
when I use CodiceFiscale.check(value) I have this error:

codice_fiscale_js__WEBPACK_IMPORTED_MODULE_1___default.a.check is not a function

The version used is: codice-fiscale-js": "2.3.10",

Could you help me?

Errore nella creazione codice fiscale da codice catastale

Ciao, intanto complimenti per la libreria, la trovo veramente utilissima.
Arrivo dalla versione 2.2.4 ed aggiornato all'ultima versione ho notato che in quest'ultima se provo a creare un codice fiscale dai dati come nell'esempio qui sotto

const cf = CodiceFiscale.compute({ name: "mario", surname: "rossi", gender: "M", birthday: "2000-01-01", birthplace: "H501" });

produce il seguente errore:

Comune with name of H501 is found in more than one province. Please specify the province code

Guardando il codice sembra che nel costruttore della classe Comune non trovando un comune col nome H501 non proceda al metodo che ricerca il comune per CC. A me torna molto più utile la ricerca per codice catastale per quello procedo con quella nella creazione.
Se posso suggerire una possibile soluzione si potrebbe mettere nel constructor il metodo searchByNameAndProvince sotto try catch ed inizializzare la variabile comune ad undefined in caso di errore. Cosi dovrebbe procedere alla ricerca per CC col metodo searchByCC.

Dati comuni

Ciao @lucavandro, ti ringrazio per la tua preziosa utility.
Pochi giorni fa mi è capitato di fare testing su una lista di codici fiscali, tra cui questo: RSSMRA90P50Z258M (ho cambiato nome e cognome). Facendo un controllo appare come corretto ma nel caso voglia creare il codice fiscale inserendo i dati singolarmente (reverse) mi da errore "Comune with name of TURKMENISTAN and prov EE doesn't exists".
Andando a guardare la lista comuni mi sono accorto che utilizzi degli oggetti col valore del comune, codice provincia, nome comune ed un ulteriore campo binario. Per il TURKMENISTAN ci sono due oggetti con codice provincia diverso ma lo stesso codice binario (zero).
Analizzando il codice ho capito che questo campo binario lo usi per decidere quale comune prendere come default. Però in questo caso, essendo entrambi zero, non mi ritorna nulla e va in errore.
Per esempio anche il comune TRANI ha due oggetti ma uno di questi ha il campo binario a 1.
Quel valore andrebbe corretto o mi sfugge qualcosa?
Ti ringrazio.

Ordine alfabetico delle voci di menu

Scorrendo le voci di menu delle procvince sembra che la provincia di Crotone non ci sia

image_2020_09_17T08_33_55_697Z

in realtà la provincia di Crotone ha come sigla KR e, giustamente, si trova sotto Isernia. Dato che però alcuni utenti, non colgono questa sottigliezza io risolverei con l'autocomplete di jquery ui

https://jqueryui.com/autocomplete/#combobox

filtrando sul valore e non sulla chiave
https://github.com/lucavandro/CodiceFiscaleJS/blob/master/src/lista-province.js

ci sono eventuali controindicazioni?

Reverse del Codice Fiscale

il calcolo del reverse del codice fiscale risulta essere errato nel caso in cui una persona abbia almeno 100 anni.
Di seguito un esempio:

Schermata 2020-08-09 alle 1 16 17 PM

Anno da desktop 6 cifre

Ciao Luca,

da desktop si riuscirebbe a limitare l'anno a 4 cifre? e nel caso il top sarebbe con controllo sulle prime due cifre dell'anno 19 o 20

image

birthplace name or code

hello,
I have a question about the birthplace.
in page the option elements are like this:

Abbiategrasso I used CodiceFiscale.utils.birthplaceFields("#birthplace_province", "#birthplace"); to build the select the value is A010, so, if I use e.target.value it returns A010.

but if i create a new CodiceFiscaleJS({...data,birthdate:A010}) it returns an error because it expects Abbiategrasso as value.

how can I get the birthplace name and not the code?
thanks

Angular 5 non funziona

Ciao,

ho provato ad installare il modulo con NPM
npm i codice-fiscale-js --save

ho importato la libreria come indicato :
import { CodiceFiscale } from 'codice-fiscale-js';

ho chiamato la funzione come segue :

  const cf = new CodiceFiscale({
    name: "Enzo",
    surname: "Righi",
    gender: "M",
    day: 24,
    month: 7,
    year: 1957,
    birthplace: "Francia", 
    birthplaceProvincia: "EE"
});

    console.log(cf) ;

ritorna questo errore :
RROR TypeError: codice_fiscale_js_1.CodiceFiscale is not a constructor at GestioneEventoComponent.CalcolaCodiceFiscale (gestione.component.ts:275) at Object.eval [as handleEvent] (GestioneEventoComponent.html:256) at handleEvent (core.js:13589) at callWithDebugContext (core.js:15098) at Object.debugHandleEvent [as handleEvent] (core.js:14685) at dispatchEvent (core.js:10004) at eval (core.js:10629) at HTMLButtonElement.eval (platform-browser.js:2628) at ZoneDelegate.invokeTask (zone.js:421) at Object.onInvokeTask (core.js:4751)

Cosa sto sbagliando?

Nome del file per inclusione in browser

Salve, volevo segnalare un potenziale problema con il nome del file per l'inclusione diretta dello script nel browser(codice.fiscale.var.js).

In Apache, se è attivo il modulo mod_negotiation, i file il cui nome contiene .var (è sufficiente che sia presente dentro il nome del file, non è necessariamente l'estensione finale) vengono interpretati come type-maps e quando Apache trova al suo interno del codice JavaScript invece delle direttive per le type-maps viene generato un errore 500 invece di servire il file.

Lato server, in questo caso dovrebbe essere disabilitato il modulo oppure aggiunta una direttiva all'interno della configurazione del Virtual Host per rimuovere il controllo sui file .var, ma queste operazioni potrebbero non essere possibili su hosting di terze parti con il mod_negotiation attivo, ed in questo caso la libreria non potrebbe essere utilizzata se non cambiando a mano il nome del file; in questo modo però si "sporcherebbe" la directory qualora sia stata aggiunta con npm o yarn, con il rischio che la modifica venga comunque rimossa ad un successivo update.

Lo stesso file che fa generare l'errore 500, semplicemente variato usando un nome che non contiene il .var al suo interno (ad esempio codice.fiscale.js oppure codice-fiscale-var.js) viene invece correttamente servito da Apache senza alcun errore.

Angular

ciao come posso importare questa libreria in un progetto agular 4?

Elenco province non aggiornato

Ciao, sto utilizzando il vostro script, funziona benissimo. Purtroppo un cliente mi ha fatto notare una possibile lacuna (che ho effettivamente verificato e riscontrato) nell'elenco province e comuni: ossia che è probabile che non siano aggiornati.
Ad esempio noto la mancanza della provincia "Monza e Brianza", con sigla "MB", istituita nel 2004.
Credo si renda necessario uno check delle province inserite nel json e anche nel js minificato.
Buon lavoro

La generazione di Omocodie porta a generazione di codici di sole lettere

La funzione di generazione di omocodie lavora sulla stessa stringa che viene lavorata da sinistra verso destra rimpiazzando i numeri con le rispettive lettere, ma dal momento che la stringa cursore viene aggiornata ad ogni giro

176        lastOmocode = `${lastOmocode.substr(0, i)}${OMOCODIA_TABLE[char]}${lastOmocode.substr(i + 1)}`

Le sequenze finali hanno solo lettere, quindi si perdono tutte quelle sequenze in cui è stato rimpiazzato un solo numero.

NPM Module

Hi, is this module available via NPM? If not, it'd be great if you could publish it there.

Fix labels in master/example/index.html

First of all thank you for your great job!

line 50:
from:
<label for="birthday">Gender</label>
to:
<label for="gender">Gender</label>

line 63:
from:
<label for="birthday">Birthplace province</label>
to:
<label for="birthplace_province">Birthplace province</label>

line 68:
from:
<label for="birthday">Birthplace</label>
to:
<label for="birthplace">Birthplace</label>

ES (module) bundle per tree-shaking

Ti ringrazio per il lavoro che hai fatto e che stai continuando a fare su questo progetto.

Stavo pensando che sarebbe bellissimo poter "staccare" l'enorme lista comuni e la lista province dal bundle finale (~ 412 KB).

Si potrebbe dare allo sviluppatore la possibilità di usare una propria. Ti dico questo perché in un progetto è già presente una lista di comuni e province uguale alla tua ma tutto il codice di calcolo/verifica è molto buggato.

E purtroppo quella lista non si può "staccare" dal resto quindi se voglio usare il tuo codice o lo copio a mano ogni volta che tu sistemi qualcosa oppure possiamo introdurre una build ES (module) con Rollup.

  • rollup.config.js:
export default {
    input: 'src/index.js',
    // input: 'src/codice-fiscale.js',
    output: {
        file: 'dist/codice-fiscale.es.js',
        format: 'es',
    }
};
  • src/index.js:
import { COMUNI } from "./lista-comuni";

export { COMUNI }

Mi sono fermato qui perché in Rollup per esportare ogni singola classe/funzione/costante essa deve essere esportata e prima volevo sentire te.

E ovviamente servirebbe anche un metodo tipo:

setListaComuni().

Cosa ne pensi?

Hai altre idee? Sto sbagliando?

Grazie ancora.

Codice fiscale per nati all'estero

Sarebbe ottimo se calcolasse anche i codici fiscali per i nati all'estero.
Per il calcolo serve solo il nome del paese, al posto del comune e della provincia.
La sigla geografica inizia con la Z e segue il codice del paese che ti metto in allegato per comodità se vuoi.
Grazie comunque ottimo lavoro.

elencoStatiEsteriAttuali.zip

Codifica e Decodifica non simmetriche

La codifica e successiva decodifica degli stessi dati non generano stringhe comparabili sul codice catastale se il comune è in uno specifico insieme, ad es.

Mario
Rossi
Male
25/12/1980
Piacenza
Calendasco

genera il codice RSSMRA80T25B404V che viene però decodificato con

MRA
RSS
M
1980-12-25
TN
CALDONAZZO

dato che il codice catastale corretto di Calendasco sarebbe B405

ho provato anche nella pagina di test.

Validation is case sensitive

Bug is here:

let cf = codiceFiscale.toUpperCase()
if (cf.length !== 16) {
return false
}
const expectedCheckCode = codiceFiscale.charAt(15)
cf = codiceFiscale.slice(0, 15)
return CodiceFiscale.getCheckCode(cf) === expectedCheckCode

Check fails because you're giving away the uppercase codice fiscale at line 83.

I'd rewrite that piece like this:

let cf = codiceFiscale.toUpperCase();
if (cf.length !== 16) { 
   return false 
}
const expectedCheckCode = cf.charAt(15);
return CodiceFiscale.getCheckCode(cf.slice(0, 15)) === expectedCheckCode 

toUpperCase() per l'inverse?

Che ne pensi di aggiungere .toUpperCase() così da non avere problemi se la stringa del codice fiscale per l'inverse è data in minuscolo?

Mismatching GitHub URL?

Ciao,
ho notato che il package disponibile su npmjs (https://www.npmjs.com/package/codice-fiscale-js) linka al repo marcopesani/CodiceFiscaleJS, come si nota anche nel package.json. Il repo disponibile a marcopesani/CodiceFiscaleJS, invece, linka nel suo package.json al presente lucavandro/CodiceFiscaleJS. Quindi immagino che il pacchetto venga pubblicato a partire dal codice presente su questo repository. marcopesani/CodiceFiscaleJS, inoltre, è attualmente indietro di 15 commit rispetto a master.

Qual è il repo di riferimento? Grazie

Broken for Node.js

Using "codice-fiscale-js": "^2.2.1",

ReferenceError: window is not defined
    at Object.<anonymous> (/..../node_modules/codice-fiscale-js/dist/codice.fiscale.umd.js:1:208)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/andrea.falzetti/dev/ofc/lambda-codice-fiscale/lib/functions/generaCodiceFiscale.js:9:23)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at AwsInvokeLocal.invokeLocalNodeJs (/..../serverless/lib/plugins/aws/invokeLocal/index.js:501:33)

Using npm i [email protected] works.

Export changed from named to default in latest version

Hello,
in commit 5052423 (corresponding npm package version 2.1.0) the main export of this package has changed from named to default (5052423#diff-106dbfc8c2493a2f78072d7fc761456cL4).

It use to be

import { CodiceFiscale } from 'codice-fiscale-js';

Now it is

import CodiceFiscale from 'codice-fiscale-js'

I wanted to report this as it is an easy fix but also a non-backward-compatible change and should be a new major version according to best practices, anyway it should at least be mentioned in the documentation.

HTH

Da correggere il file readme

Salve,

complimenti per la repo.
Ho trovato una piccola cosa da risolvere, nel file readme suggerisce di utilizzare la funzione compute in questo modo:

var cf = CodiceFiscale.compute({
    name: "Enzo",
    surname: "Righi",
    gender: "M",
    day: 24,
    month: 7,
    year: 1957,
    birthplace: "Napoli", 
    birthplace_provincia: "NA"});

Così restituisce un errore che non trova l'area code, ho risolto chiamando il campo invece di così "birthplace_provincia" in questo modo "birthplaceProvincia". Quindi il metodo mi funziona in questo modo:

var cf = CodiceFiscale.compute({
    name: "Enzo",
    surname: "Righi",
    gender: "M",
    day: 24,
    month: 7,
    year: 1957,
    birthplace: "Napoli", 
    birthplaceProvincia: "NA"});

Error omocodie with foreign fiscal code

Cannot reverse omocodian fiscal code for non-italian person. If I try to reverse the fiscal code returned from the method "omocodie()" for non-italin person it doesn't work. Tried for Russian citizen.

Gestione storico province

Salve, utilizzando la libreria mi sono accorto che non viene gestito lo storico dei codici Belfiore (codici comuni).
Il codice fiscale di una persona fisica viene creato a partire dalla "fotografia geopolitica" alla data di nascita del soggetto, come da specifiche dell'Agenzia delle Entrate.
Questo fa sì che debba essere necessario validare il codice fiscale calcolando il codice comune così com'era alla data di nascita.

A titolo di esempio, il comune di Biella è in provincia di Biella solo dal 1992, prima era in provincia di Vercelli e prima ancora di Novara.
La libreria non riesce a validare un codice fiscale di una persona nata a Biella prima del 1992 perché considera come unica provincia associata a quel comune la provincia di Biella (BI).

A disposizione per chiarimenti ed aiuto nell'implementazione e/o recupero delle informazioni.

Grazie

Check Fiscal Code

Hi!
How I can verify, in typescript, if a fiscal code is valid or invalid?
Hi try with 'try catch', do you known a better method?

try { cf = new CodiceFiscale(control.value); return true; } catch (error) { return false }

Wrong date of birth

Hi,
I found an issue, if you put the timezone of the pc on a timezone in next day (i.e. from Italy you put Fiji) you'll receive a wrong date of birth.

example:
CF: ****73H67D08
birthDay: 26/06/1973 (the correct date is 27/06/1973)

the current hour in italy at the time oh the screenshot is 09/06/2022 09:40

image

Import della libreria con require non funzionante

Premettendo che utilizzo la libreria con NodeJS, la versione 2.3.5 ha introdotto il seguente bug:

Uncaught TypeError: CodiceFiscale.check is not a function

Per riprodurlo:

const CodiceFiscale = require('codice-fiscale-js');
CodiceFiscale.check('MRNLCU00A01H501');

Presumo che il problema sia stato introdotto dal commit 38d4d54 .

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.