@stll/stdnum 0.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -5
- package/README.md +28 -4
- package/dist/_checksums/luhn.js.map +1 -1
- package/dist/_checksums/mod1110.js +1 -1
- package/dist/_checksums/mod1110.js.map +1 -1
- package/dist/_checksums/mod112.js +5 -5
- package/dist/_checksums/mod112.js.map +1 -1
- package/dist/_checksums/mod97.js.map +1 -1
- package/dist/_checksums/verhoeff.js.map +1 -1
- package/dist/_checksums/weighted-sum.js.map +1 -1
- package/dist/_util/arabic.js.map +1 -1
- package/dist/_util/clean.js.map +1 -1
- package/dist/_util/date.js.map +1 -1
- package/dist/_util/generate.d.ts +13 -1
- package/dist/_util/generate.js +23 -1
- package/dist/_util/generate.js.map +1 -1
- package/dist/_util/result.js.map +1 -1
- package/dist/_util/strings.js.map +1 -1
- package/dist/ad/mod.d.ts +3 -2
- package/dist/ad/nrt.d.ts +16 -2
- package/dist/ad/nrt.js +4 -16
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +2 -3
- package/dist/ae/eid.js +2 -12
- package/dist/ae/eid.js.map +1 -1
- package/dist/ae/mod.d.ts +3 -2
- package/dist/ai/mod.d.ts +3 -2
- package/dist/ai/tin.d.ts +20 -2
- package/dist/ai/tin.js +1 -18
- package/dist/ai/tin.js.map +1 -1
- package/dist/al/mod.d.ts +3 -2
- package/dist/al/nipt.d.ts +13 -2
- package/dist/al/nipt.js +1 -11
- package/dist/al/nipt.js.map +1 -1
- package/dist/am/mod.d.ts +3 -2
- package/dist/am/tin.d.ts +16 -2
- package/dist/am/tin.js +1 -14
- package/dist/am/tin.js.map +1 -1
- package/dist/ar/cbu.d.ts +2 -3
- package/dist/ar/cbu.js +2 -10
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +2 -3
- package/dist/ar/cuit.js +13 -29
- package/dist/ar/cuit.js.map +1 -1
- package/dist/ar/dni.d.ts +11 -2
- package/dist/ar/dni.js +1 -9
- package/dist/ar/dni.js.map +1 -1
- package/dist/ar/mod.d.ts +3 -2
- package/dist/at/businessid.d.ts +10 -2
- package/dist/at/businessid.js +1 -8
- package/dist/at/businessid.js.map +1 -1
- package/dist/at/mod.d.ts +3 -2
- package/dist/at/tin.d.ts +2 -3
- package/dist/at/tin.js +1 -11
- package/dist/at/tin.js.map +1 -1
- package/dist/at/uid.d.ts +2 -3
- package/dist/at/uid.js +2 -10
- package/dist/at/uid.js.map +1 -1
- package/dist/at/vnr.d.ts +5 -4
- package/dist/at/vnr.js +23 -16
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +2 -3
- package/dist/au/abn.js +1 -10
- package/dist/au/abn.js.map +1 -1
- package/dist/au/acn.d.ts +2 -3
- package/dist/au/acn.js +1 -10
- package/dist/au/acn.js.map +1 -1
- package/dist/au/mod.d.ts +3 -2
- package/dist/au/tfn.d.ts +2 -3
- package/dist/au/tfn.js +1 -10
- package/dist/au/tfn.js.map +1 -1
- package/dist/az/mod.d.ts +3 -2
- package/dist/az/voen.d.ts +2 -3
- package/dist/az/voen.js +1 -14
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +2 -3
- package/dist/ba/jmbg.js +4 -11
- package/dist/ba/jmbg.js.map +1 -1
- package/dist/ba/mod.d.ts +3 -2
- package/dist/bd/mod.d.ts +3 -2
- package/dist/bd/nid.d.ts +23 -2
- package/dist/bd/nid.js +11 -32
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +2 -3
- package/dist/be/bis.js +1 -11
- package/dist/be/bis.js.map +1 -1
- package/dist/be/mod.d.ts +3 -2
- package/dist/be/nn.d.ts +2 -3
- package/dist/be/nn.js +1 -11
- package/dist/be/nn.js.map +1 -1
- package/dist/be/vat.d.ts +2 -3
- package/dist/be/vat.js +1 -9
- package/dist/be/vat.js.map +1 -1
- package/dist/bg/egn.d.ts +2 -3
- package/dist/bg/egn.js +5 -13
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/mod.d.ts +3 -2
- package/dist/bg/pnf.d.ts +2 -3
- package/dist/bg/pnf.js +1 -8
- package/dist/bg/pnf.js.map +1 -1
- package/dist/bg/vat.d.ts +2 -3
- package/dist/bg/vat.js +3 -9
- package/dist/bg/vat.js.map +1 -1
- package/dist/bh/cpr.d.ts +5 -4
- package/dist/bh/cpr.js +9 -19
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bh/mod.d.ts +3 -2
- package/dist/bic.d.ts +13 -2
- package/dist/bic.js +14 -26
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +2 -3
- package/dist/br/cnpj.js +1 -20
- package/dist/br/cnpj.js.map +1 -1
- package/dist/br/cpf.d.ts +2 -3
- package/dist/br/cpf.js +1 -14
- package/dist/br/cpf.js.map +1 -1
- package/dist/br/mod.d.ts +3 -2
- package/dist/by/mod.d.ts +3 -2
- package/dist/by/unp.d.ts +2 -3
- package/dist/by/unp.js +9 -17
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/mod.d.ts +3 -2
- package/dist/bz/tin.d.ts +5 -4
- package/dist/bz/tin.js +10 -27
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +2 -3
- package/dist/ca/bn.js +2 -10
- package/dist/ca/bn.js.map +1 -1
- package/dist/ca/mod.d.ts +3 -2
- package/dist/ca/sin.d.ts +2 -3
- package/dist/ca/sin.js +2 -10
- package/dist/ca/sin.js.map +1 -1
- package/dist/ch/mod.d.ts +3 -2
- package/dist/ch/ssn.d.ts +2 -3
- package/dist/ch/ssn.js +1 -9
- package/dist/ch/ssn.js.map +1 -1
- package/dist/ch/uid.d.ts +2 -3
- package/dist/ch/uid.js +1 -9
- package/dist/ch/uid.js.map +1 -1
- package/dist/ch/vat.d.ts +2 -3
- package/dist/ch/vat.js +1 -9
- package/dist/ch/vat.js.map +1 -1
- package/dist/cl/mod.d.ts +3 -2
- package/dist/cl/rut.d.ts +2 -3
- package/dist/cl/rut.js +2 -15
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/mod.d.ts +3 -2
- package/dist/cn/ric.d.ts +2 -3
- package/dist/cn/ric.js +4 -14
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +2 -3
- package/dist/cn/uscc.js +8 -16
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/mod.d.ts +3 -2
- package/dist/co/nit.d.ts +2 -3
- package/dist/co/nit.js +6 -13
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.d.ts +18 -2
- package/dist/cr/cpf.js +5 -19
- package/dist/cr/cpf.js.map +1 -1
- package/dist/cr/mod.d.ts +3 -2
- package/dist/creditcard.d.ts +2 -3
- package/dist/creditcard.js +5 -14
- package/dist/creditcard.js.map +1 -1
- package/dist/cu/mod.d.ts +3 -2
- package/dist/cu/ni.d.ts +5 -4
- package/dist/cu/ni.js +13 -18
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/mod.d.ts +3 -2
- package/dist/cy/vat.d.ts +2 -3
- package/dist/cy/vat.js +1 -8
- package/dist/cy/vat.js.map +1 -1
- package/dist/cz/dic.d.ts +2 -3
- package/dist/cz/dic.js +7 -13
- package/dist/cz/dic.js.map +1 -1
- package/dist/cz/ico.d.ts +2 -3
- package/dist/cz/ico.js +2 -10
- package/dist/cz/ico.js.map +1 -1
- package/dist/cz/mod.d.ts +3 -2
- package/dist/cz/rc.d.ts +2 -3
- package/dist/cz/rc.js +22 -21
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.d.ts +19 -2
- package/dist/de/handelsreg.js +10 -26
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +2 -3
- package/dist/de/idnr.js +2 -12
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/mod.d.ts +3 -2
- package/dist/de/stnr.d.ts +17 -3
- package/dist/de/stnr.js +1 -15
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +2 -3
- package/dist/de/svnr.js +4 -13
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +2 -3
- package/dist/de/vat.js +2 -11
- package/dist/de/vat.js.map +1 -1
- package/dist/dk/cpr.d.ts +5 -4
- package/dist/dk/cpr.js +14 -12
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +2 -3
- package/dist/dk/cvr.js +2 -15
- package/dist/dk/cvr.js.map +1 -1
- package/dist/dk/mod.d.ts +3 -2
- package/dist/dk/vat.d.ts +2 -3
- package/dist/dk/vat.js +3 -13
- package/dist/dk/vat.js.map +1 -1
- package/dist/do/mod.d.ts +3 -2
- package/dist/do/rnc.d.ts +2 -3
- package/dist/do/rnc.js +3 -17
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/mod.d.ts +3 -2
- package/dist/ec/ruc.d.ts +2 -3
- package/dist/ec/ruc.js +2 -19
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +2 -3
- package/dist/ee/ik.js +6 -15
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/mod.d.ts +3 -2
- package/dist/ee/registrikood.d.ts +2 -3
- package/dist/ee/registrikood.js +9 -15
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +2 -3
- package/dist/ee/vat.js +2 -10
- package/dist/ee/vat.js.map +1 -1
- package/dist/eg/mod.d.ts +3 -2
- package/dist/eg/tn.d.ts +11 -2
- package/dist/eg/tn.js +1 -9
- package/dist/eg/tn.js.map +1 -1
- package/dist/es/cif.d.ts +2 -3
- package/dist/es/cif.js +3 -12
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +2 -3
- package/dist/es/dni.js +1 -9
- package/dist/es/dni.js.map +1 -1
- package/dist/es/mod.d.ts +3 -2
- package/dist/es/nie.d.ts +2 -3
- package/dist/es/nie.js +14 -22
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +2 -3
- package/dist/es/nss.js +1 -16
- package/dist/es/nss.js.map +1 -1
- package/dist/es/vat.d.ts +2 -3
- package/dist/es/vat.js +5 -10
- package/dist/es/vat.js.map +1 -1
- package/dist/eu/mod.d.ts +3 -2
- package/dist/eu/vat.d.ts +5 -4
- package/dist/eu/vat.js +44 -2
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +5 -4
- package/dist/fi/hetu.js +19 -12
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/mod.d.ts +3 -2
- package/dist/fi/vat.d.ts +2 -3
- package/dist/fi/vat.js +3 -10
- package/dist/fi/vat.js.map +1 -1
- package/dist/fi/ytunnus.d.ts +2 -3
- package/dist/fi/ytunnus.js +2 -10
- package/dist/fi/ytunnus.js.map +1 -1
- package/dist/fr/mod.d.ts +3 -2
- package/dist/fr/nif.d.ts +2 -3
- package/dist/fr/nif.js +1 -9
- package/dist/fr/nif.js.map +1 -1
- package/dist/fr/nir.d.ts +2 -3
- package/dist/fr/nir.js +3 -14
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +2 -3
- package/dist/fr/siren.js +2 -10
- package/dist/fr/siren.js.map +1 -1
- package/dist/fr/siret.d.ts +2 -3
- package/dist/fr/siret.js +2 -11
- package/dist/fr/siret.js.map +1 -1
- package/dist/fr/tva.d.ts +2 -3
- package/dist/fr/tva.js +2 -12
- package/dist/fr/tva.js.map +1 -1
- package/dist/gb/mod.d.ts +3 -2
- package/dist/gb/nino.d.ts +12 -2
- package/dist/gb/nino.js +8 -17
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +2 -3
- package/dist/gb/sedol.js +9 -18
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +2 -3
- package/dist/gb/utr.js +2 -10
- package/dist/gb/utr.js.map +1 -1
- package/dist/gb/vat.d.ts +2 -3
- package/dist/gb/vat.js +2 -11
- package/dist/gb/vat.js.map +1 -1
- package/dist/ge/mod.d.ts +3 -2
- package/dist/ge/pin.d.ts +14 -2
- package/dist/ge/pin.js +1 -12
- package/dist/ge/pin.js.map +1 -1
- package/dist/gh/mod.d.ts +3 -2
- package/dist/gh/tin.d.ts +2 -3
- package/dist/gh/tin.js +10 -24
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +2 -3
- package/dist/gr/amka.js +3 -11
- package/dist/gr/amka.js.map +1 -1
- package/dist/gr/mod.d.ts +3 -2
- package/dist/gr/vat.d.ts +2 -3
- package/dist/gr/vat.js +1 -10
- package/dist/gr/vat.js.map +1 -1
- package/dist/gt/mod.d.ts +3 -2
- package/dist/gt/nit.d.ts +2 -3
- package/dist/gt/nit.js +6 -14
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +2 -3
- package/dist/hk/hkid.js +2 -10
- package/dist/hk/hkid.js.map +1 -1
- package/dist/hk/mod.d.ts +3 -2
- package/dist/hr/mod.d.ts +3 -2
- package/dist/hr/vat.d.ts +2 -3
- package/dist/hr/vat.js +2 -9
- package/dist/hr/vat.js.map +1 -1
- package/dist/hu/mod.d.ts +3 -2
- package/dist/hu/vat.d.ts +2 -3
- package/dist/hu/vat.js +3 -10
- package/dist/hu/vat.js.map +1 -1
- package/dist/iban.d.ts +2 -3
- package/dist/iban.js +2 -8
- package/dist/iban.js.map +1 -1
- package/dist/id/mod.d.ts +3 -2
- package/dist/id/npwp.d.ts +2 -3
- package/dist/id/npwp.js +3 -13
- package/dist/id/npwp.js.map +1 -1
- package/dist/ie/mod.d.ts +3 -2
- package/dist/ie/pps.d.ts +2 -3
- package/dist/ie/pps.js +1 -10
- package/dist/ie/pps.js.map +1 -1
- package/dist/ie/vat.d.ts +2 -3
- package/dist/ie/vat.js +1 -9
- package/dist/ie/vat.js.map +1 -1
- package/dist/il/idnr.d.ts +2 -3
- package/dist/il/idnr.js +2 -9
- package/dist/il/idnr.js.map +1 -1
- package/dist/il/mod.d.ts +3 -2
- package/dist/in/aadhaar.d.ts +2 -3
- package/dist/in/aadhaar.js +2 -12
- package/dist/in/aadhaar.js.map +1 -1
- package/dist/in/gstin.d.ts +2 -3
- package/dist/in/gstin.js +4 -11
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/mod.d.ts +3 -2
- package/dist/in/pan.d.ts +15 -2
- package/dist/in/pan.js +3 -15
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/iq/mod.d.ts +3 -2
- package/dist/iq/nid.d.ts +16 -2
- package/dist/iq/nid.js +2 -15
- package/dist/iq/nid.js.map +1 -1
- package/dist/ir/mod.d.ts +3 -2
- package/dist/ir/nid.d.ts +2 -3
- package/dist/ir/nid.js +2 -24
- package/dist/ir/nid.js.map +1 -1
- package/dist/is/kennitala.d.ts +2 -3
- package/dist/is/kennitala.js +2 -13
- package/dist/is/kennitala.js.map +1 -1
- package/dist/is/mod.d.ts +3 -2
- package/dist/is/vsk.d.ts +9 -2
- package/dist/is/vsk.js +1 -7
- package/dist/is/vsk.js.map +1 -1
- package/dist/isin.d.ts +2 -3
- package/dist/isin.js +11 -21
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +5 -4
- package/dist/it/codicefiscale.js +27 -23
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +2 -3
- package/dist/it/iva.js +2 -9
- package/dist/it/iva.js.map +1 -1
- package/dist/it/mod.d.ts +3 -2
- package/dist/jp/cn.d.ts +2 -3
- package/dist/jp/cn.js +1 -9
- package/dist/jp/cn.js.map +1 -1
- package/dist/jp/mod.d.ts +3 -2
- package/dist/jp/mynumber.d.ts +2 -3
- package/dist/jp/mynumber.js +1 -10
- package/dist/jp/mynumber.js.map +1 -1
- package/dist/kr/brn.d.ts +11 -2
- package/dist/kr/brn.js +1 -9
- package/dist/kr/brn.js.map +1 -1
- package/dist/kr/mod.d.ts +3 -2
- package/dist/kr/rrn.d.ts +5 -4
- package/dist/kr/rrn.js +15 -13
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +6 -5
- package/dist/kw/civil.js +20 -17
- package/dist/kw/civil.js.map +1 -1
- package/dist/kw/mod.d.ts +3 -2
- package/dist/kz/iin.d.ts +2 -3
- package/dist/kz/iin.js +4 -18
- package/dist/kz/iin.js.map +1 -1
- package/dist/kz/mod.d.ts +3 -2
- package/dist/lei.d.ts +2 -3
- package/dist/lei.js +2 -11
- package/dist/lei.js.map +1 -1
- package/dist/li/mod.d.ts +3 -2
- package/dist/li/peid.d.ts +11 -2
- package/dist/li/peid.js +1 -9
- package/dist/li/peid.js.map +1 -1
- package/dist/lk/mod.d.ts +3 -2
- package/dist/lk/nic.d.ts +5 -4
- package/dist/lk/nic.js +16 -16
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +2 -3
- package/dist/lt/asmens.js +2 -1
- package/dist/lt/asmens.js.map +1 -1
- package/dist/lt/mod.d.ts +3 -2
- package/dist/lt/vat.d.ts +2 -3
- package/dist/lt/vat.js +2 -10
- package/dist/lt/vat.js.map +1 -1
- package/dist/lu/mod.d.ts +3 -2
- package/dist/lu/vat.d.ts +2 -3
- package/dist/lu/vat.js +2 -8
- package/dist/lu/vat.js.map +1 -1
- package/dist/luhn.d.ts +2 -3
- package/dist/luhn.js +9 -9
- package/dist/luhn.js.map +1 -1
- package/dist/lv/mod.d.ts +3 -2
- package/dist/lv/vat.d.ts +2 -3
- package/dist/lv/vat.js +19 -18
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +2 -3
- package/dist/ma/ice.js +2 -11
- package/dist/ma/ice.js.map +1 -1
- package/dist/ma/mod.d.ts +3 -2
- package/dist/mc/mod.d.ts +3 -2
- package/dist/mc/tva.d.ts +2 -3
- package/dist/mc/tva.js +1 -0
- package/dist/mc/tva.js.map +1 -1
- package/dist/md/idno.d.ts +2 -3
- package/dist/md/idno.js +1 -10
- package/dist/md/idno.js.map +1 -1
- package/dist/md/mod.d.ts +3 -2
- package/dist/me/mod.d.ts +3 -2
- package/dist/me/pib.d.ts +2 -3
- package/dist/me/pib.js +2 -10
- package/dist/me/pib.js.map +1 -1
- package/dist/mk/edb.d.ts +2 -3
- package/dist/mk/edb.js +2 -11
- package/dist/mk/edb.js.map +1 -1
- package/dist/mk/mod.d.ts +3 -2
- package/dist/mt/mod.d.ts +3 -2
- package/dist/mt/vat.d.ts +2 -3
- package/dist/mt/vat.js +3 -10
- package/dist/mt/vat.js.map +1 -1
- package/dist/mu/brn.d.ts +23 -2
- package/dist/mu/brn.js +1 -21
- package/dist/mu/brn.js.map +1 -1
- package/dist/mu/mod.d.ts +3 -2
- package/dist/mx/clabe.d.ts +2 -3
- package/dist/mx/clabe.js +1 -14
- package/dist/mx/clabe.js.map +1 -1
- package/dist/mx/curp.d.ts +5 -4
- package/dist/mx/curp.js +27 -19
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/mod.d.ts +3 -2
- package/dist/mx/rfc.d.ts +5 -4
- package/dist/mx/rfc.js +23 -20
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/mod.d.ts +3 -2
- package/dist/my/nric.d.ts +5 -4
- package/dist/my/nric.js +18 -16
- package/dist/my/nric.js.map +1 -1
- package/dist/ng/mod.d.ts +3 -2
- package/dist/ng/nin.d.ts +13 -2
- package/dist/ng/nin.js +1 -11
- package/dist/ng/nin.js.map +1 -1
- package/dist/ni/mod.d.ts +3 -2
- package/dist/ni/ruc.d.ts +2 -3
- package/dist/ni/ruc.js +1 -23
- package/dist/ni/ruc.js.map +1 -1
- package/dist/nl/bsn.d.ts +2 -3
- package/dist/nl/bsn.js +2 -10
- package/dist/nl/bsn.js.map +1 -1
- package/dist/nl/kvk.d.ts +9 -2
- package/dist/nl/kvk.js +1 -7
- package/dist/nl/kvk.js.map +1 -1
- package/dist/nl/mod.d.ts +3 -2
- package/dist/nl/vat.d.ts +2 -3
- package/dist/nl/vat.js +4 -50
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +2 -3
- package/dist/no/fodselsnummer.js +3 -10
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mod.d.ts +3 -2
- package/dist/no/mva.d.ts +2 -3
- package/dist/no/mva.js +1 -8
- package/dist/no/mva.js.map +1 -1
- package/dist/no/orgnr.d.ts +2 -3
- package/dist/no/orgnr.js +2 -8
- package/dist/no/orgnr.js.map +1 -1
- package/dist/nz/ird.d.ts +2 -3
- package/dist/nz/ird.js +4 -13
- package/dist/nz/ird.js.map +1 -1
- package/dist/nz/mod.d.ts +3 -2
- package/dist/pa/mod.d.ts +3 -2
- package/dist/pa/ruc.d.ts +2 -3
- package/dist/pa/ruc.js +4 -19
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +8 -10
- package/dist/patterns.js +83 -28
- package/dist/patterns.js.map +1 -1
- package/dist/pe/mod.d.ts +3 -2
- package/dist/pe/ruc.d.ts +2 -3
- package/dist/pe/ruc.js +10 -24
- package/dist/pe/ruc.js.map +1 -1
- package/dist/ph/mod.d.ts +3 -2
- package/dist/ph/philid.d.ts +14 -2
- package/dist/ph/philid.js +1 -12
- package/dist/ph/philid.js.map +1 -1
- package/dist/pk/cnic.d.ts +14 -2
- package/dist/pk/cnic.js +1 -12
- package/dist/pk/cnic.js.map +1 -1
- package/dist/pk/mod.d.ts +3 -2
- package/dist/pl/mod.d.ts +3 -2
- package/dist/pl/nip.d.ts +2 -3
- package/dist/pl/nip.js +2 -10
- package/dist/pl/nip.js.map +1 -1
- package/dist/pl/pesel.d.ts +2 -3
- package/dist/pl/pesel.js +4 -13
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +2 -3
- package/dist/pl/regon.js +2 -11
- package/dist/pl/regon.js.map +1 -1
- package/dist/pt/cc.d.ts +2 -3
- package/dist/pt/cc.js +7 -13
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/mod.d.ts +3 -2
- package/dist/pt/vat.d.ts +2 -3
- package/dist/pt/vat.js +3 -11
- package/dist/pt/vat.js.map +1 -1
- package/dist/ro/cnp.d.ts +2 -3
- package/dist/ro/cnp.js +5 -14
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/mod.d.ts +3 -2
- package/dist/ro/vat.d.ts +2 -3
- package/dist/ro/vat.js +13 -11
- package/dist/ro/vat.js.map +1 -1
- package/dist/rs/mod.d.ts +3 -2
- package/dist/rs/pib.d.ts +2 -3
- package/dist/rs/pib.js +1 -9
- package/dist/rs/pib.js.map +1 -1
- package/dist/ru/inn.d.ts +2 -3
- package/dist/ru/inn.js +2 -12
- package/dist/ru/inn.js.map +1 -1
- package/dist/ru/mod.d.ts +3 -2
- package/dist/se/mod.d.ts +3 -2
- package/dist/se/orgnr.d.ts +2 -3
- package/dist/se/orgnr.js +2 -9
- package/dist/se/orgnr.js.map +1 -1
- package/dist/se/personnummer.d.ts +2 -3
- package/dist/se/personnummer.js +8 -15
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +2 -3
- package/dist/se/vat.js +3 -10
- package/dist/se/vat.js.map +1 -1
- package/dist/sg/mod.d.ts +3 -2
- package/dist/sg/uen.d.ts +2 -3
- package/dist/sg/uen.js +47 -70
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +2 -3
- package/dist/si/emso.js +12 -14
- package/dist/si/emso.js.map +1 -1
- package/dist/si/mod.d.ts +3 -2
- package/dist/si/vat.d.ts +2 -3
- package/dist/si/vat.js +3 -12
- package/dist/si/vat.js.map +1 -1
- package/dist/sk/dic.d.ts +2 -3
- package/dist/sk/dic.js +1 -0
- package/dist/sk/dic.js.map +1 -1
- package/dist/sk/ico.d.ts +2 -3
- package/dist/sk/ico.js +1 -0
- package/dist/sk/ico.js.map +1 -1
- package/dist/sk/mod.d.ts +3 -2
- package/dist/sk/rc.d.ts +4 -5
- package/dist/sk/rc.js +6 -2
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/mod.d.ts +3 -2
- package/dist/th/tin.d.ts +2 -3
- package/dist/th/tin.js +1 -11
- package/dist/th/tin.js.map +1 -1
- package/dist/tr/mod.d.ts +3 -2
- package/dist/tr/tckimlik.d.ts +2 -3
- package/dist/tr/tckimlik.js +1 -20
- package/dist/tr/tckimlik.js.map +1 -1
- package/dist/tr/vkn.d.ts +2 -3
- package/dist/tr/vkn.js +1 -20
- package/dist/tr/vkn.js.map +1 -1
- package/dist/tw/mod.d.ts +3 -2
- package/dist/tw/ubn.d.ts +2 -3
- package/dist/tw/ubn.js +2 -12
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +56 -21
- package/dist/ua/edrpou.d.ts +2 -3
- package/dist/ua/edrpou.js +5 -12
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/ua/mod.d.ts +3 -2
- package/dist/us/ein.d.ts +12 -2
- package/dist/us/ein.js +88 -97
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.d.ts +13 -2
- package/dist/us/itin.js +4 -15
- package/dist/us/itin.js.map +1 -1
- package/dist/us/mod.d.ts +3 -2
- package/dist/us/rtn.d.ts +2 -3
- package/dist/us/rtn.js +11 -23
- package/dist/us/rtn.js.map +1 -1
- package/dist/us/ssn.d.ts +13 -2
- package/dist/us/ssn.js +1 -11
- package/dist/us/ssn.js.map +1 -1
- package/dist/uy/mod.d.ts +3 -2
- package/dist/uy/rut.d.ts +2 -3
- package/dist/uy/rut.js +2 -15
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/mod.d.ts +3 -2
- package/dist/ve/rif.d.ts +2 -3
- package/dist/ve/rif.js +13 -26
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mod.d.ts +3 -2
- package/dist/vn/mst.d.ts +2 -3
- package/dist/vn/mst.js +1 -12
- package/dist/vn/mst.js.map +1 -1
- package/dist/za/idnr.d.ts +2 -3
- package/dist/za/idnr.js +4 -16
- package/dist/za/idnr.js.map +1 -1
- package/dist/za/mod.d.ts +3 -2
- package/package.json +34 -21
- package/src/_checksums/mod1110.ts +1 -1
- package/src/_checksums/mod112.ts +7 -6
- package/src/_util/generate.ts +38 -0
- package/src/ad/nrt.ts +19 -7
- package/src/ae/eid.ts +7 -3
- package/src/ai/tin.ts +7 -3
- package/src/al/nipt.ts +7 -3
- package/src/am/tin.ts +7 -3
- package/src/ar/cbu.ts +9 -5
- package/src/ar/cuit.ts +22 -10
- package/src/ar/dni.ts +7 -3
- package/src/at/businessid.ts +7 -3
- package/src/at/tin.ts +7 -3
- package/src/at/uid.ts +7 -3
- package/src/at/vnr.ts +62 -12
- package/src/au/abn.ts +7 -3
- package/src/au/acn.ts +7 -3
- package/src/au/tfn.ts +7 -3
- package/src/az/voen.ts +9 -3
- package/src/ba/jmbg.ts +9 -7
- package/src/bd/nid.ts +11 -7
- package/src/be/bis.ts +8 -4
- package/src/be/nn.ts +7 -3
- package/src/be/vat.ts +7 -3
- package/src/bg/egn.ts +19 -10
- package/src/bg/pnf.ts +7 -3
- package/src/bg/vat.ts +8 -3
- package/src/bh/cpr.ts +17 -4
- package/src/bic.ts +26 -20
- package/src/br/cnpj.ts +7 -3
- package/src/br/cpf.ts +7 -3
- package/src/by/unp.ts +19 -9
- package/src/bz/tin.ts +19 -4
- package/src/ca/bn.ts +7 -3
- package/src/ca/sin.ts +7 -3
- package/src/ch/ssn.ts +7 -3
- package/src/ch/uid.ts +7 -3
- package/src/ch/vat.ts +9 -5
- package/src/cl/rut.ts +11 -5
- package/src/cn/ric.ts +11 -7
- package/src/cn/uscc.ts +27 -11
- package/src/co/nit.ts +14 -6
- package/src/cr/cpf.ts +11 -6
- package/src/creditcard.ts +10 -6
- package/src/cu/ni.ts +28 -7
- package/src/cy/vat.ts +7 -3
- package/src/cz/dic.ts +9 -4
- package/src/cz/ico.ts +7 -3
- package/src/cz/rc.ts +61 -29
- package/src/de/handelsreg.ts +21 -6
- package/src/de/idnr.ts +10 -3
- package/src/de/stnr.ts +11 -3
- package/src/de/svnr.ts +14 -5
- package/src/de/vat.ts +7 -3
- package/src/dk/cpr.ts +23 -8
- package/src/dk/cvr.ts +7 -3
- package/src/dk/vat.ts +8 -3
- package/src/do/rnc.ts +9 -5
- package/src/ec/ruc.ts +9 -5
- package/src/ee/ik.ts +21 -10
- package/src/ee/registrikood.ts +12 -7
- package/src/ee/vat.ts +7 -3
- package/src/eg/tn.ts +7 -3
- package/src/es/cif.ts +10 -7
- package/src/es/dni.ts +7 -3
- package/src/es/nie.ts +18 -9
- package/src/es/nss.ts +7 -3
- package/src/es/vat.ts +13 -5
- package/src/eu/vat.ts +55 -6
- package/src/fi/hetu.ts +26 -8
- package/src/fi/vat.ts +8 -3
- package/src/fi/ytunnus.ts +7 -3
- package/src/fr/nif.ts +7 -3
- package/src/fr/nir.ts +9 -7
- package/src/fr/siren.ts +7 -3
- package/src/fr/siret.ts +7 -3
- package/src/fr/tva.ts +7 -3
- package/src/gb/nino.ts +18 -13
- package/src/gb/sedol.ts +21 -15
- package/src/gb/utr.ts +7 -3
- package/src/gb/vat.ts +7 -3
- package/src/ge/pin.ts +7 -3
- package/src/gh/tin.ts +11 -6
- package/src/gr/amka.ts +7 -3
- package/src/gr/vat.ts +7 -3
- package/src/gt/nit.ts +13 -6
- package/src/hk/hkid.ts +9 -4
- package/src/hr/vat.ts +7 -3
- package/src/hu/vat.ts +8 -3
- package/src/iban.ts +7 -3
- package/src/id/npwp.ts +7 -3
- package/src/ie/pps.ts +7 -3
- package/src/ie/vat.ts +7 -3
- package/src/il/idnr.ts +7 -3
- package/src/in/aadhaar.ts +7 -3
- package/src/in/gstin.ts +10 -4
- package/src/in/pan.ts +15 -6
- package/src/index.ts +6 -0
- package/src/iq/nid.ts +7 -3
- package/src/ir/nid.ts +7 -3
- package/src/is/kennitala.ts +7 -3
- package/src/is/vsk.ts +7 -3
- package/src/isin.ts +17 -7
- package/src/it/codicefiscale.ts +49 -7
- package/src/it/iva.ts +7 -3
- package/src/jp/cn.ts +7 -3
- package/src/jp/mynumber.ts +7 -3
- package/src/kr/brn.ts +7 -3
- package/src/kr/rrn.ts +27 -8
- package/src/kw/civil.ts +31 -14
- package/src/kz/iin.ts +9 -8
- package/src/lei.ts +7 -3
- package/src/li/peid.ts +7 -3
- package/src/lk/nic.ts +31 -8
- package/src/lt/asmens.ts +8 -4
- package/src/lt/vat.ts +8 -3
- package/src/lu/vat.ts +8 -3
- package/src/luhn.ts +10 -3
- package/src/lv/vat.ts +53 -23
- package/src/ma/ice.ts +7 -3
- package/src/mc/tva.ts +9 -5
- package/src/md/idno.ts +7 -3
- package/src/me/pib.ts +7 -3
- package/src/mk/edb.ts +7 -3
- package/src/mt/vat.ts +8 -3
- package/src/mu/brn.ts +7 -3
- package/src/mx/clabe.ts +7 -3
- package/src/mx/curp.ts +47 -10
- package/src/mx/rfc.ts +42 -7
- package/src/my/nric.ts +33 -8
- package/src/ng/nin.ts +7 -3
- package/src/ni/ruc.ts +7 -3
- package/src/nl/bsn.ts +7 -3
- package/src/nl/kvk.ts +7 -3
- package/src/nl/vat.ts +18 -69
- package/src/no/fodselsnummer.ts +12 -7
- package/src/no/mva.ts +9 -5
- package/src/no/orgnr.ts +7 -3
- package/src/nz/ird.ts +12 -8
- package/src/pa/ruc.ts +39 -11
- package/src/patterns.ts +184 -46
- package/src/pe/ruc.ts +13 -10
- package/src/ph/philid.ts +7 -3
- package/src/pk/cnic.ts +9 -3
- package/src/pl/nip.ts +7 -3
- package/src/pl/pesel.ts +9 -7
- package/src/pl/regon.ts +7 -3
- package/src/pt/cc.ts +13 -7
- package/src/pt/vat.ts +8 -3
- package/src/ro/cnp.ts +16 -8
- package/src/ro/vat.ts +8 -3
- package/src/rs/pib.ts +7 -3
- package/src/ru/inn.ts +9 -5
- package/src/se/orgnr.ts +7 -3
- package/src/se/personnummer.ts +35 -32
- package/src/se/vat.ts +8 -3
- package/src/sg/uen.ts +44 -23
- package/src/si/emso.ts +37 -11
- package/src/si/vat.ts +8 -3
- package/src/sk/dic.ts +8 -4
- package/src/sk/ico.ts +3 -2
- package/src/sk/rc.ts +17 -4
- package/src/th/tin.ts +7 -3
- package/src/tr/tckimlik.ts +7 -3
- package/src/tr/vkn.ts +7 -3
- package/src/tw/ubn.ts +9 -5
- package/src/types.ts +69 -7
- package/src/ua/edrpou.ts +10 -5
- package/src/us/ein.ts +95 -91
- package/src/us/itin.ts +14 -11
- package/src/us/rtn.ts +32 -19
- package/src/us/ssn.ts +7 -3
- package/src/uy/rut.ts +9 -5
- package/src/ve/rif.ts +19 -12
- package/src/vn/mst.ts +7 -3
- package/src/za/idnr.ts +9 -7
package/dist/eu/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":["atUid","beVat","bgVat","cyVat","czDic","deVat","dkVat","eeVat","grVat","esVat","fiVat","frTva","hrVat","huVat","ieVat","itIva","ltVat","luVat","lvVat","mtVat","nlVat","plNip","ptVat","roVat","seVat","siVat","skDic","gbVat"],"sources":["../../src/eu/vat.ts"],"sourcesContent":["/**\n * EU VAT (European Union VAT Number).\n *\n * Dispatcher that routes to per-country VAT\n * validators. Extracts the 2-letter country prefix\n * and delegates to the matching country module.\n *\n * Special cases:\n * - EL → Greece (gr.vat)\n * - XI → Northern Ireland (gb.vat)\n *\n * @see https://ec.europa.eu/taxation_customs/vies/\n */\n\nimport
|
|
1
|
+
{"version":3,"file":"vat.js","names":["atUid","beVat","bgVat","cyVat","czDic","deVat","dkVat","eeVat","grVat","esVat","fiVat","frTva","hrVat","huVat","ieVat","itIva","ltVat","luVat","lvVat","mtVat","nlVat","plNip","ptVat","roVat","seVat","siVat","skDic","gbVat"],"sources":["../../src/eu/vat.ts"],"sourcesContent":["/**\n * EU VAT (European Union VAT Number).\n *\n * Dispatcher that routes to per-country VAT\n * validators. Extracts the 2-letter country prefix\n * and delegates to the matching country module.\n *\n * Special cases:\n * - EL → Greece (gr.vat)\n * - XI → Northern Ireland (gb.vat)\n *\n * @see https://ec.europa.eu/taxation_customs/vies/\n */\n\nimport atUid from \"../at/uid\";\nimport beVat from \"../be/vat\";\nimport bgVat from \"../bg/vat\";\nimport cyVat from \"../cy/vat\";\nimport czDic from \"../cz/dic\";\nimport deVat from \"../de/vat\";\nimport dkVat from \"../dk/vat\";\nimport eeVat from \"../ee/vat\";\nimport esVat from \"../es/vat\";\nimport fiVat from \"../fi/vat\";\nimport frTva from \"../fr/tva\";\nimport gbVat from \"../gb/vat\";\nimport grVat from \"../gr/vat\";\nimport hrVat from \"../hr/vat\";\nimport huVat from \"../hu/vat\";\nimport ieVat from \"../ie/vat\";\nimport itIva from \"../it/iva\";\nimport ltVat from \"../lt/vat\";\nimport luVat from \"../lu/vat\";\nimport lvVat from \"../lv/vat\";\nimport mtVat from \"../mt/vat\";\nimport nlVat from \"../nl/vat\";\nimport plNip from \"../pl/nip\";\nimport ptVat from \"../pt/vat\";\nimport roVat from \"../ro/vat\";\nimport seVat from \"../se/vat\";\nimport siVat from \"../si/vat\";\nimport skDic from \"../sk/dic\";\nimport type {\n GlobalValidator,\n ValidateResult,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\ntype CountryValidator = {\n compact: (value: string) => string;\n validate: (value: string) => ValidateResult;\n format: (value: string) => string;\n};\n\n/**\n * Map of EU VAT country prefixes to their\n * country-specific validators.\n */\nconst VALIDATORS: Record<string, CountryValidator> = {\n AT: atUid,\n BE: beVat,\n BG: bgVat,\n CY: cyVat,\n CZ: czDic,\n DE: deVat,\n DK: dkVat,\n EE: eeVat,\n EL: grVat, // Greece uses EL prefix in EU VAT\n ES: esVat,\n FI: fiVat,\n FR: frTva,\n GR: grVat,\n HR: hrVat,\n HU: huVat,\n IE: ieVat,\n IT: itIva,\n LT: ltVat,\n LU: luVat,\n LV: lvVat,\n MT: mtVat,\n NL: nlVat,\n PL: plNip,\n PT: ptVat,\n RO: roVat,\n SE: seVat,\n SI: siVat,\n SK: skDic,\n XI: gbVat, // Northern Ireland\n};\n\n/**\n * Extract the 2-letter country prefix and the\n * remaining number from an EU VAT string.\n */\nconst splitPrefix = (\n value: string,\n): { cc: string; rest: string } | undefined => {\n const v = clean(value, \" -\").toUpperCase();\n if (v.length < 3) return undefined;\n const cc = v.slice(0, 2);\n if (!/^[A-Z]{2}$/.test(cc)) return undefined;\n return { cc, rest: v.slice(2) };\n};\n\nconst compact = (value: string): string => {\n const parts = splitPrefix(value);\n if (parts === undefined) {\n return clean(value, \" -\").toUpperCase();\n }\n const validator = VALIDATORS[parts.cc];\n if (validator === undefined) {\n return clean(value, \" -\").toUpperCase();\n }\n return `${parts.cc}${validator.compact(parts.rest)}`;\n};\n\nconst validate = (value: string): ValidateResult => {\n const parts = splitPrefix(value);\n if (parts === undefined) {\n return err(\n \"INVALID_FORMAT\",\n \"EU VAT must start with a 2-letter country code\",\n );\n }\n const validator = VALIDATORS[parts.cc];\n if (validator === undefined) {\n return err(\n \"INVALID_COMPONENT\",\n `Unsupported EU VAT country: ${parts.cc}`,\n );\n }\n const result = validator.validate(parts.rest);\n if (!result.valid) return result;\n return {\n valid: true,\n compact: `${parts.cc}${result.compact}`,\n };\n};\n\n/**\n * Format returns the compact EU VAT form:\n * `CC` + country-compacted number. Equivalent to\n * compact() because country format() methods\n * prepend their own prefix (e.g., AT UID format\n * returns \"ATU...\"), which would cause double-\n * prefixing if used here.\n */\nconst format = (value: string): string => {\n const parts = splitPrefix(value);\n if (parts === undefined) return value;\n const validator = VALIDATORS[parts.cc];\n if (validator === undefined) return value;\n return `${parts.cc}${validator.compact(parts.rest)}`;\n};\n\nconst GENERATORS = [\n [\"AT\", atUid],\n [\"BE\", beVat],\n [\"BG\", bgVat],\n [\"CY\", cyVat],\n [\"CZ\", czDic],\n [\"DE\", deVat],\n [\"DK\", dkVat],\n [\"EE\", eeVat],\n [\"ES\", esVat],\n [\"FI\", fiVat],\n [\"FR\", frTva],\n [\"GR\", grVat],\n [\"HR\", hrVat],\n [\"HU\", huVat],\n [\"IE\", ieVat],\n [\"IT\", itIva],\n [\"LT\", ltVat],\n [\"LU\", luVat],\n [\"LV\", lvVat],\n [\"MT\", mtVat],\n [\"NL\", nlVat],\n [\"PL\", plNip],\n [\"PT\", ptVat],\n [\"RO\", roVat],\n [\"SE\", seVat],\n [\"SI\", siVat],\n [\"SK\", skDic],\n] as const;\n\n/** Generate a random EU VAT number from a member validator. */\nconst generate = (): string => {\n for (;;) {\n const candidate =\n GENERATORS[randomInt(0, GENERATORS.length - 1)];\n if (!candidate) continue;\n\n const [prefix, validator] = candidate;\n if (validator.generate === undefined) continue;\n return `${prefix}${validator.generate()}`;\n }\n};\n\n/** European Union VAT Number. */\nconst euVat: GlobalValidator = {\n scope: \"global\",\n name: \"EU VAT Number\",\n localName: \"EU VAT Number\",\n abbreviation: \"EU VAT\",\n aliases: [\"EU VAT\", \"VAT identification number\"] as const,\n candidatePattern: \"[A-Z]{2}\\\\d{8,12}\",\n entityType: \"company\",\n sourceUrl: \"https://ec.europa.eu/taxation_customs/vies/\",\n examples: [\"ATU13585627\", \"DE136695976\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default euVat;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,MAAM,aAA+C;CACnD,IAAIA;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIH;CACJ,IAAII;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;AACN;;;;;AAMA,MAAM,eACJ,UAC6C;CAC7C,MAAM,IAAI,MAAM,OAAO,IAAI,EAAE,YAAY;CACzC,IAAI,EAAE,SAAS,GAAG,OAAO,KAAA;CACzB,MAAM,KAAK,EAAE,MAAM,GAAG,CAAC;CACvB,IAAI,CAAC,aAAa,KAAK,EAAE,GAAG,OAAO,KAAA;CACnC,OAAO;EAAE;EAAI,MAAM,EAAE,MAAM,CAAC;CAAE;AAChC;AAEA,MAAM,WAAW,UAA0B;CACzC,MAAM,QAAQ,YAAY,KAAK;CAC/B,IAAI,UAAU,KAAA,GACZ,OAAO,MAAM,OAAO,IAAI,EAAE,YAAY;CAExC,MAAM,YAAY,WAAW,MAAM;CACnC,IAAI,cAAc,KAAA,GAChB,OAAO,MAAM,OAAO,IAAI,EAAE,YAAY;CAExC,OAAO,GAAG,MAAM,KAAK,UAAU,QAAQ,MAAM,IAAI;AACnD;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,QAAQ,YAAY,KAAK;CAC/B,IAAI,UAAU,KAAA,GACZ,OAAO,IACL,kBACA,gDACF;CAEF,MAAM,YAAY,WAAW,MAAM;CACnC,IAAI,cAAc,KAAA,GAChB,OAAO,IACL,qBACA,+BAA+B,MAAM,IACvC;CAEF,MAAM,SAAS,UAAU,SAAS,MAAM,IAAI;CAC5C,IAAI,CAAC,OAAO,OAAO,OAAO;CAC1B,OAAO;EACL,OAAO;EACP,SAAS,GAAG,MAAM,KAAK,OAAO;CAChC;AACF;;;;;;;;;AAUA,MAAM,UAAU,UAA0B;CACxC,MAAM,QAAQ,YAAY,KAAK;CAC/B,IAAI,UAAU,KAAA,GAAW,OAAO;CAChC,MAAM,YAAY,WAAW,MAAM;CACnC,IAAI,cAAc,KAAA,GAAW,OAAO;CACpC,OAAO,GAAG,MAAM,KAAK,UAAU,QAAQ,MAAM,IAAI;AACnD;AAEA,MAAM,aAAa;CACjB,CAAC,MAAM3B,GAAK;CACZ,CAAC,MAAMC,GAAK;CACZ,CAAC,MAAMC,KAAK;CACZ,CAAC,MAAMC,KAAK;CACZ,CAAC,MAAMC,GAAK;CACZ,CAAC,MAAMC,KAAK;CACZ,CAAC,MAAMC,KAAK;CACZ,CAAC,MAAMC,KAAK;CACZ,CAAC,MAAME,KAAK;CACZ,CAAC,MAAMC,KAAK;CACZ,CAAC,MAAMC,GAAK;CACZ,CAAC,MAAMH,KAAK;CACZ,CAAC,MAAMI,MAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,GAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,GAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,MAAK;CACZ,CAAC,MAAMC,KAAK;AACd;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,YACJ,WAAW,UAAU,GAAG,WAAW,SAAS,CAAC;EAC/C,IAAI,CAAC,WAAW;EAEhB,MAAM,CAAC,QAAQ,aAAa;EAC5B,IAAI,UAAU,aAAa,KAAA,GAAW;EACtC,OAAO,GAAG,SAAS,UAAU,SAAS;CACxC;AACF;;AAGA,MAAM,QAAyB;CAC7B,OAAO;CACP,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,UAAU,2BAA2B;CAC/C,kBAAkB;CAClB,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,eAAe,aAAa;CACvC;CACA;CACA;CACA;AACF"}
|
package/dist/fi/hetu.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/fi/hetu.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
@@ -10,8 +9,10 @@ declare const format: (value: string) => string;
|
|
|
10
9
|
* Returns null if the value is not valid.
|
|
11
10
|
*/
|
|
12
11
|
declare const parse: (value: string) => ParsedPersonId | null;
|
|
12
|
+
/** Generate a random valid HETU. */
|
|
13
|
+
declare const generate: () => string;
|
|
13
14
|
/** Finnish Personal Identity Code. */
|
|
14
|
-
declare const hetu:
|
|
15
|
+
declare const hetu: CountryValidator<"FI", ParsedPersonId>;
|
|
15
16
|
//#endregion
|
|
16
|
-
export { compact, hetu as default, format, parse, validate };
|
|
17
|
+
export { compact, hetu as default, format, generate, parse, validate };
|
|
17
18
|
//# sourceMappingURL=hetu.d.ts.map
|
package/dist/fi/hetu.js
CHANGED
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { isValidDate } from "../_util/date.js";
|
|
3
|
+
import { randomInt } from "../_util/generate.js";
|
|
2
4
|
import { err } from "../_util/result.js";
|
|
3
5
|
import { isdigits } from "../_util/strings.js";
|
|
4
|
-
import { isValidDate } from "../_util/date.js";
|
|
5
6
|
//#region src/fi/hetu.ts
|
|
6
|
-
/**
|
|
7
|
-
* HETU (Henkilötunnus).
|
|
8
|
-
*
|
|
9
|
-
* Finnish personal identity code. 11 characters in
|
|
10
|
-
* format DDMMYY+CCC+X where the separator indicates
|
|
11
|
-
* the century and X is a check character.
|
|
12
|
-
*
|
|
13
|
-
* @see https://dvv.fi/en/personal-identity-code
|
|
14
|
-
*/
|
|
15
7
|
const CHECK_CHARS = "0123456789ABCDEFHJKLMNPRSTUVWXY";
|
|
16
8
|
const SEPARATORS_1800 = new Set(["+"]);
|
|
17
9
|
const SEPARATORS_1900 = new Set([
|
|
@@ -82,6 +74,17 @@ const parse = (value) => {
|
|
|
82
74
|
gender: serial % 2 === 0 ? "female" : "male"
|
|
83
75
|
};
|
|
84
76
|
};
|
|
77
|
+
/** Generate a random valid HETU. */
|
|
78
|
+
const generate = () => {
|
|
79
|
+
const year = randomInt(1900, 2024);
|
|
80
|
+
const month = String(randomInt(1, 12)).padStart(2, "0");
|
|
81
|
+
const day = String(randomInt(1, 28)).padStart(2, "0");
|
|
82
|
+
const yy = String(year % 100).padStart(2, "0");
|
|
83
|
+
const separator = year >= 2e3 ? "A" : "-";
|
|
84
|
+
const serial = String(randomInt(2, 899)).padStart(3, "0");
|
|
85
|
+
const checkNum = Number(`${day}${month}${yy}${serial}`);
|
|
86
|
+
return `${day}${month}${yy}${separator}${serial}${CHECK_CHARS.charAt(checkNum % 31)}`;
|
|
87
|
+
};
|
|
85
88
|
/** Finnish Personal Identity Code. */
|
|
86
89
|
const hetu = {
|
|
87
90
|
name: "Finnish Personal ID",
|
|
@@ -93,15 +96,19 @@ const hetu = {
|
|
|
93
96
|
"sosiaaliturvatunnus"
|
|
94
97
|
],
|
|
95
98
|
candidatePattern: "\\d{6}[-+A]\\d{3}[\\dA-Z]",
|
|
99
|
+
scope: "country",
|
|
96
100
|
country: "FI",
|
|
97
101
|
entityType: "person",
|
|
98
102
|
sourceUrl: "https://dvv.fi/en/personal-identity-code",
|
|
103
|
+
lengths: [11],
|
|
99
104
|
examples: ["131052-308T"],
|
|
100
105
|
compact,
|
|
101
106
|
format,
|
|
102
|
-
|
|
107
|
+
parse,
|
|
108
|
+
validate,
|
|
109
|
+
generate
|
|
103
110
|
};
|
|
104
111
|
//#endregion
|
|
105
|
-
export { compact, hetu as default, format, parse, validate };
|
|
112
|
+
export { compact, hetu as default, format, generate, parse, validate };
|
|
106
113
|
|
|
107
114
|
//# sourceMappingURL=hetu.js.map
|
package/dist/fi/hetu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hetu.js","names":[],"sources":["../../src/fi/hetu.ts"],"sourcesContent":["/**\n * HETU (Henkilötunnus).\n *\n * Finnish personal identity code. 11 characters in\n * format DDMMYY+CCC+X where the separator indicates\n * the century and X is a check character.\n *\n * @see https://dvv.fi/en/personal-identity-code\n */\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport {
|
|
1
|
+
{"version":3,"file":"hetu.js","names":[],"sources":["../../src/fi/hetu.ts"],"sourcesContent":["/**\n * HETU (Henkilötunnus).\n *\n * Finnish personal identity code. 11 characters in\n * format DDMMYY+CCC+X where the separator indicates\n * the century and X is a check character.\n *\n * @see https://dvv.fi/en/personal-identity-code\n */\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst CHECK_CHARS = \"0123456789ABCDEFHJKLMNPRSTUVWXY\";\n\nconst SEPARATORS_1800 = new Set([\"+\"]);\nconst SEPARATORS_1900 = new Set([\n \"-\",\n \"Y\",\n \"X\",\n \"W\",\n \"V\",\n \"U\",\n]);\nconst SEPARATORS_2000 = new Set([\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n]);\n\nconst compact = (value: string): string =>\n clean(value, \" \").toUpperCase();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"HETU must be exactly 11 characters\",\n );\n }\n\n const dd = v.slice(0, 2);\n const mm = v.slice(2, 4);\n const yy = v.slice(4, 6);\n const separator = v.charAt(6);\n const serial = v.slice(7, 10);\n const checkChar = v.charAt(10);\n\n if (!isdigits(dd) || !isdigits(mm) || !isdigits(yy)) {\n return err(\n \"INVALID_FORMAT\",\n \"HETU date part must be digits\",\n );\n }\n if (!isdigits(serial)) {\n return err(\n \"INVALID_FORMAT\",\n \"HETU serial must be digits\",\n );\n }\n\n let century: number;\n if (SEPARATORS_1800.has(separator)) {\n century = 1800;\n } else if (SEPARATORS_1900.has(separator)) {\n century = 1900;\n } else if (SEPARATORS_2000.has(separator)) {\n century = 2000;\n } else {\n return err(\n \"INVALID_COMPONENT\",\n \"HETU separator is invalid\",\n );\n }\n\n const year = century + Number(yy);\n const month = Number(mm);\n const day = Number(dd);\n\n if (!isValidDate(year, month, day)) {\n return err(\n \"INVALID_COMPONENT\",\n \"HETU contains an invalid date\",\n );\n }\n\n // Individual number must be >= 002\n const serialNum = Number(serial);\n if (serialNum < 2) {\n return err(\n \"INVALID_COMPONENT\",\n \"HETU individual number must be >= 002\",\n );\n }\n // Temporary range 900-999 is not valid\n if (serialNum >= 900) {\n return err(\n \"INVALID_COMPONENT\",\n \"HETU temporary individual range 900-999\",\n );\n }\n\n const checkNum = Number(`${dd}${mm}${yy}${serial}`);\n const expected = CHECK_CHARS.charAt(checkNum % 31);\n if (checkChar !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"HETU check character does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/**\n * Extract birth date and gender from a HETU.\n * Returns null if the value is not valid.\n */\nconst parse = (value: string): ParsedPersonId | null => {\n const result = validate(value);\n if (!result.valid) return null;\n\n const v = result.compact;\n const dd = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const yy = Number(v.slice(4, 6));\n const separator = v.charAt(6);\n const serial = Number(v.slice(7, 10));\n\n let century: number;\n if (SEPARATORS_1800.has(separator)) {\n century = 1800;\n } else if (SEPARATORS_1900.has(separator)) {\n century = 1900;\n } else {\n century = 2000;\n }\n\n const year = century + yy;\n\n return {\n birthDate: new Date(year, mm - 1, dd),\n gender: serial % 2 === 0 ? \"female\" : \"male\",\n };\n};\n\n/** Generate a random valid HETU. */\nconst generate = (): string => {\n const year = randomInt(1900, 2024);\n const month = String(randomInt(1, 12)).padStart(2, \"0\");\n const day = String(randomInt(1, 28)).padStart(2, \"0\");\n const yy = String(year % 100).padStart(2, \"0\");\n const separator = year >= 2000 ? \"A\" : \"-\";\n const serial = String(randomInt(2, 899)).padStart(3, \"0\");\n const checkNum = Number(`${day}${month}${yy}${serial}`);\n const checkChar = CHECK_CHARS.charAt(checkNum % 31);\n return `${day}${month}${yy}${separator}${serial}${checkChar}`;\n};\n\n/** Finnish Personal Identity Code. */\nconst hetu: CountryValidator<\"FI\", ParsedPersonId> = {\n name: \"Finnish Personal ID\",\n localName: \"Henkilötunnus\",\n abbreviation: \"HETU\",\n aliases: [\n \"henkilötunnus\",\n \"HETU\",\n \"sosiaaliturvatunnus\",\n ] as const,\n candidatePattern: \"\\\\d{6}[-+A]\\\\d{3}[\\\\dA-Z]\",\n scope: \"country\",\n country: \"FI\",\n entityType: \"person\",\n sourceUrl: \"https://dvv.fi/en/personal-identity-code\",\n lengths: [11] as const,\n examples: [\"131052-308T\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default hetu;\nexport { compact, format, generate, parse, validate };\n"],"mappings":"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"}
|
package/dist/fi/mod.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import hetu from "./hetu.js";
|
|
3
2
|
import vat from "./vat.js";
|
|
4
3
|
import ytunnus from "./ytunnus.js";
|
|
5
4
|
|
|
6
5
|
//#region src/fi/mod.d.ts
|
|
7
|
-
|
|
6
|
+
declare namespace mod_d_exports {
|
|
7
|
+
export { hetu, vat, ytunnus };
|
|
8
|
+
}
|
|
8
9
|
//#endregion
|
|
9
10
|
export { hetu, mod_d_exports, vat, ytunnus };
|
|
10
11
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/fi/vat.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/fi/vat.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Finnish VAT number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Finnish VAT Number. */
|
|
11
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"FI">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, vat as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/fi/vat.js
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
5
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
6
|
//#region src/fi/vat.ts
|
|
7
|
-
/**
|
|
8
|
-
* ALV nro (Finnish VAT number).
|
|
9
|
-
*
|
|
10
|
-
* 8 digits. Weights [7,9,10,5,8,4,2,1],
|
|
11
|
-
* sum % 11 === 0.
|
|
12
|
-
*
|
|
13
|
-
* @see https://www.vatify.eu/finland-vat-number.html
|
|
14
|
-
* @see https://www.ytj.fi/en/index/businessid.html
|
|
15
|
-
*/
|
|
16
7
|
const WEIGHTS = [
|
|
17
8
|
7,
|
|
18
9
|
9,
|
|
@@ -53,9 +44,11 @@ const vat = {
|
|
|
53
44
|
abbreviation: "ALV nro",
|
|
54
45
|
aliases: ["ALV-numero", "Y-tunnus"],
|
|
55
46
|
candidatePattern: "FI\\d{8}",
|
|
47
|
+
scope: "country",
|
|
56
48
|
country: "FI",
|
|
57
49
|
entityType: "company",
|
|
58
50
|
sourceUrl: "https://www.ytj.fi/en/index/businessid.html",
|
|
51
|
+
lengths: [8],
|
|
59
52
|
examples: ["20774740"],
|
|
60
53
|
compact,
|
|
61
54
|
format,
|
package/dist/fi/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/fi/vat.ts"],"sourcesContent":["/**\n * ALV nro (Finnish VAT number).\n *\n * 8 digits. Weights [7,9,10,5,8,4,2,1],\n * sum % 11 === 0.\n *\n * @see https://www.vatify.eu/finland-vat-number.html\n * @see https://www.ytj.fi/en/index/businessid.html\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/fi/vat.ts"],"sourcesContent":["/**\n * ALV nro (Finnish VAT number).\n *\n * 8 digits. Weights [7,9,10,5,8,4,2,1],\n * sum % 11 === 0.\n *\n * @see https://www.vatify.eu/finland-vat-number.html\n * @see https://www.ytj.fi/en/index/businessid.html\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [7, 9, 10, 5, 8, 4, 2, 1];\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"FI\") || v.startsWith(\"fi\")) {\n v = v.slice(2);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"Finnish VAT number must be 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Finnish VAT number must contain only digits\",\n );\n }\n const sum = weightedSum(v, WEIGHTS, 11);\n if (sum !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Finnish VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `FI${compact(value)}`;\n\n/** Generate a random valid Finnish VAT number. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(8);\n if (validate(c).valid) return c;\n }\n};\n\n/** Finnish VAT Number. */\nconst vat: CountryValidator<\"FI\"> = {\n name: \"Finnish VAT Number\",\n localName: \"Arvonlisäveronumero\",\n abbreviation: \"ALV nro\",\n aliases: [\"ALV-numero\", \"Y-tunnus\"] as const,\n candidatePattern: \"FI\\\\d{8}\",\n scope: \"country\",\n country: \"FI\",\n entityType: \"company\",\n sourceUrl: \"https://www.ytj.fi/en/index/businessid.html\",\n lengths: [8] as const,\n examples: [\"20774740\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAqBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;AAAC;AAExC,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,MAAM;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,IAAI,EAAE,MAAM,CAAC;CAEf,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,qCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,6CACF;CAGF,IADY,YAAY,GAAG,SAAS,EAC9B,MAAM,GACV,OAAO,IACL,oBACA,yCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,CAAC;EACxB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,cAAc,UAAU;CAClC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,UAAU;CACrB;CACA;CACA;CACA;AACF"}
|
package/dist/fi/ytunnus.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/fi/ytunnus.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Finnish Y-tunnus. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Finnish Business ID. */
|
|
11
|
-
declare const ytunnus:
|
|
10
|
+
declare const ytunnus: CountryValidator<"FI">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, ytunnus as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=ytunnus.d.ts.map
|
package/dist/fi/ytunnus.js
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
5
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
6
|
//#region src/fi/ytunnus.ts
|
|
7
|
-
/**
|
|
8
|
-
* Y-tunnus (Finnish Business ID).
|
|
9
|
-
*
|
|
10
|
-
* 8 digits. Weights [7,9,10,5,8,4,2,1],
|
|
11
|
-
* sum % 11 === 0. Same algorithm as FI VAT.
|
|
12
|
-
* Display format: NNNNNNN-C.
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.ytj.fi/en/index/businessid.html
|
|
15
|
-
*/
|
|
16
7
|
const WEIGHTS = [
|
|
17
8
|
7,
|
|
18
9
|
9,
|
|
@@ -56,6 +47,7 @@ const ytunnus = {
|
|
|
56
47
|
"FO-nummer"
|
|
57
48
|
],
|
|
58
49
|
candidatePattern: "\\d{7}-\\d",
|
|
50
|
+
scope: "country",
|
|
59
51
|
country: "FI",
|
|
60
52
|
entityType: "company",
|
|
61
53
|
sourceUrl: "https://www.ytj.fi/en/index/businessid.html",
|
package/dist/fi/ytunnus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ytunnus.js","names":[],"sources":["../../src/fi/ytunnus.ts"],"sourcesContent":["/**\n * Y-tunnus (Finnish Business ID).\n *\n * 8 digits. Weights [7,9,10,5,8,4,2,1],\n * sum % 11 === 0. Same algorithm as FI VAT.\n * Display format: NNNNNNN-C.\n *\n * @see https://www.ytj.fi/en/index/businessid.html\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"ytunnus.js","names":[],"sources":["../../src/fi/ytunnus.ts"],"sourcesContent":["/**\n * Y-tunnus (Finnish Business ID).\n *\n * 8 digits. Weights [7,9,10,5,8,4,2,1],\n * sum % 11 === 0. Same algorithm as FI VAT.\n * Display format: NNNNNNN-C.\n *\n * @see https://www.ytj.fi/en/index/businessid.html\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [7, 9, 10, 5, 8, 4, 2, 1];\n\nconst compact = (value: string): string =>\n clean(value, \" -/.\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"Finnish Y-tunnus must be 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Finnish Y-tunnus must contain only digits\",\n );\n }\n const sum = weightedSum(v, WEIGHTS, 11);\n if (sum !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Finnish Y-tunnus check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 7)}-${v[7]}`;\n};\n\n/** Generate a random valid Finnish Y-tunnus. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(8);\n if (validate(c).valid) return c;\n }\n};\n\n/** Finnish Business ID. */\nconst ytunnus: CountryValidator<\"FI\"> = {\n name: \"Finnish Business ID\",\n localName: \"Y-tunnus\",\n abbreviation: \"Y-tunnus\",\n aliases: [\n \"Y-tunnus\",\n \"yritystunnus\",\n \"FO-nummer\",\n ] as const,\n candidatePattern: \"\\\\d{7}-\\\\d\",\n scope: \"country\",\n country: \"FI\",\n entityType: \"company\",\n sourceUrl: \"https://www.ytj.fi/en/index/businessid.html\",\n examples: [\"20774740\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ytunnus;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAqBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;AAAC;AAExC,MAAM,WAAW,UACf,MAAM,OAAO,MAAM;AAErB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,mCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,2CACF;CAGF,IADY,YAAY,GAAG,SAAS,EAC9B,MAAM,GACV,OAAO,IACL,oBACA,uCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE;AAC/B;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,CAAC;EACxB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,UAAkC;CACtC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,UAAU;CACrB;CACA;CACA;CACA;AACF"}
|
package/dist/fr/mod.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import nif from "./nif.js";
|
|
3
2
|
import nir from "./nir.js";
|
|
4
3
|
import siren from "./siren.js";
|
|
@@ -6,7 +5,9 @@ import siret from "./siret.js";
|
|
|
6
5
|
import tva from "./tva.js";
|
|
7
6
|
|
|
8
7
|
//#region src/fr/mod.d.ts
|
|
9
|
-
|
|
8
|
+
declare namespace mod_d_exports {
|
|
9
|
+
export { nif, nir, siren, siret, tva };
|
|
10
|
+
}
|
|
10
11
|
//#endregion
|
|
11
12
|
export { mod_d_exports, nif, nir, siren, siret, tva };
|
|
12
13
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/fr/nif.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/fr/nif.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid French NIF. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** French Tax Identification Number. */
|
|
11
|
-
declare const nif:
|
|
10
|
+
declare const nif: CountryValidator<"FR">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, nif as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=nif.d.ts.map
|
package/dist/fr/nif.js
CHANGED
|
@@ -3,15 +3,6 @@ import { randomDigits, randomInt } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/fr/nif.ts
|
|
6
|
-
/**
|
|
7
|
-
* NIF (Numéro d'Identification Fiscale).
|
|
8
|
-
*
|
|
9
|
-
* French tax identification number. 13 digits;
|
|
10
|
-
* first digit is 0-3. Last 3 digits are a
|
|
11
|
-
* check: first_10_digits % 511 == last_3.
|
|
12
|
-
*
|
|
13
|
-
* @see https://www.impots.gouv.fr/
|
|
14
|
-
*/
|
|
15
6
|
const compact = (value) => clean(value, " -");
|
|
16
7
|
const validate = (value) => {
|
|
17
8
|
const v = compact(value);
|
|
@@ -49,6 +40,7 @@ const nif = {
|
|
|
49
40
|
"numéro d'identification fiscale"
|
|
50
41
|
],
|
|
51
42
|
candidatePattern: "\\d{13}",
|
|
43
|
+
scope: "country",
|
|
52
44
|
country: "FR",
|
|
53
45
|
entityType: "person",
|
|
54
46
|
sourceUrl: "https://www.impots.gouv.fr/",
|
package/dist/fr/nif.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nif.js","names":[],"sources":["../../src/fr/nif.ts"],"sourcesContent":["/**\n * NIF (Numéro d'Identification Fiscale).\n *\n * French tax identification number. 13 digits;\n * first digit is 0-3. Last 3 digits are a\n * check: first_10_digits % 511 == last_3.\n *\n * @see https://www.impots.gouv.fr/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"nif.js","names":[],"sources":["../../src/fr/nif.ts"],"sourcesContent":["/**\n * NIF (Numéro d'Identification Fiscale).\n *\n * French tax identification number. 13 digits;\n * first digit is 0-3. Last 3 digits are a\n * check: first_10_digits % 511 == last_3.\n *\n * @see https://www.impots.gouv.fr/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 13) {\n return err(\n \"INVALID_LENGTH\",\n \"French NIF must be exactly 13 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"French NIF must contain only digits\",\n );\n }\n const first = v[0];\n if (\n first !== \"0\" &&\n first !== \"1\" &&\n first !== \"2\" &&\n first !== \"3\"\n ) {\n return err(\n \"INVALID_COMPONENT\",\n \"French NIF must start with 0-3\",\n );\n }\n const front = Number(v.slice(0, 10));\n const check = Number(v.slice(10));\n if (front % 511 !== check) {\n return err(\n \"INVALID_CHECKSUM\",\n \"French NIF check digits mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)} ${v.slice(2, 4)} ${v.slice(4, 7)} ${v.slice(7, 10)} ${v.slice(10)}`;\n};\n\n/** Generate a random valid French NIF. */\nconst generate = (): string => {\n for (;;) {\n const c = String(randomInt(0, 3)) + randomDigits(12);\n if (validate(c).valid) return c;\n }\n};\n\n/** French Tax Identification Number. */\nconst nif: CountryValidator<\"FR\"> = {\n name: \"French Tax ID\",\n localName: \"Numéro d'Identification Fiscale\",\n abbreviation: \"NIF\",\n aliases: [\n \"numéro fiscal\",\n \"NIF\",\n \"numéro d'identification fiscale\",\n ] as const,\n candidatePattern: \"\\\\d{13}\",\n scope: \"country\",\n country: \"FR\",\n entityType: \"person\",\n sourceUrl: \"https://www.impots.gouv.fr/\",\n examples: [\"3023217600053\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nif;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAoBA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,sCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,qCACF;CAEF,MAAM,QAAQ,EAAE;CAChB,IACE,UAAU,OACV,UAAU,OACV,UAAU,OACV,UAAU,KAEV,OAAO,IACL,qBACA,gCACF;CAEF,MAAM,QAAQ,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CACnC,MAAM,QAAQ,OAAO,EAAE,MAAM,EAAE,CAAC;CAChC,IAAI,QAAQ,QAAQ,OAClB,OAAO,IACL,oBACA,kCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;AAC3F;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,OAAO,UAAU,GAAG,CAAC,CAAC,IAAI,aAAa,EAAE;EACnD,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,eAAe;CAC1B;CACA;CACA;CACA;AACF"}
|
package/dist/fr/nir.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/fr/nir.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
@@ -9,7 +8,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
9
8
|
/** Generate a random valid French NIR. */
|
|
10
9
|
declare const generate: () => string;
|
|
11
10
|
/** French Social Security Number. */
|
|
12
|
-
declare const nir:
|
|
11
|
+
declare const nir: CountryValidator<"FR", ParsedPersonId>;
|
|
13
12
|
//#endregion
|
|
14
13
|
export { compact, nir as default, format, generate, parse, validate };
|
|
15
14
|
//# sourceMappingURL=nir.d.ts.map
|
package/dist/fr/nir.js
CHANGED
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { resolveTwoDigitYear } from "../_util/date.js";
|
|
2
3
|
import { randomInt } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
|
-
import { resolveTwoDigitYear } from "../_util/date.js";
|
|
5
5
|
//#region src/fr/nir.ts
|
|
6
|
-
/**
|
|
7
|
-
* NIR (Numero d'Inscription au Repertoire).
|
|
8
|
-
*
|
|
9
|
-
* French social security number (numero de securite
|
|
10
|
-
* sociale). 15 digits: 13 identity digits + 2 check
|
|
11
|
-
* digits. Encodes gender, year/month of birth, and
|
|
12
|
-
* department of birth.
|
|
13
|
-
*
|
|
14
|
-
* Corsican departments 2A/2B are encoded as 19/18
|
|
15
|
-
* for the mod-97 checksum computation.
|
|
16
|
-
*
|
|
17
|
-
* @see https://en.wikipedia.org/wiki/INSEE_code
|
|
18
|
-
*/
|
|
19
6
|
const compact = (value) => clean(value, " -.");
|
|
20
7
|
const validate = (value) => {
|
|
21
8
|
const v = compact(value).toUpperCase();
|
|
@@ -89,6 +76,7 @@ const nir = {
|
|
|
89
76
|
"sécu"
|
|
90
77
|
],
|
|
91
78
|
candidatePattern: "[12]\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}\\s?\\d{3}\\s?\\d{3}\\s?\\d{2}",
|
|
79
|
+
scope: "country",
|
|
92
80
|
country: "FR",
|
|
93
81
|
entityType: "person",
|
|
94
82
|
description: "French social security number encoding gender, birth date, and department",
|
|
@@ -97,6 +85,7 @@ const nir = {
|
|
|
97
85
|
examples: ["295117823456784"],
|
|
98
86
|
compact,
|
|
99
87
|
format,
|
|
88
|
+
parse,
|
|
100
89
|
validate,
|
|
101
90
|
generate
|
|
102
91
|
};
|
package/dist/fr/nir.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nir.js","names":[],"sources":["../../src/fr/nir.ts"],"sourcesContent":["/**\n * NIR (Numero d'Inscription au Repertoire).\n *\n * French social security number (numero de securite\n * sociale). 15 digits: 13 identity digits + 2 check\n * digits. Encodes gender, year/month of birth, and\n * department of birth.\n *\n * Corsican departments 2A/2B are encoded as 19/18\n * for the mod-97 checksum computation.\n *\n * @see https://en.wikipedia.org/wiki/INSEE_code\n */\n\nimport { clean } from \"#util/clean\";\nimport { resolveTwoDigitYear } from \"#util/date\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\
|
|
1
|
+
{"version":3,"file":"nir.js","names":[],"sources":["../../src/fr/nir.ts"],"sourcesContent":["/**\n * NIR (Numero d'Inscription au Repertoire).\n *\n * French social security number (numero de securite\n * sociale). 15 digits: 13 identity digits + 2 check\n * digits. Encodes gender, year/month of birth, and\n * department of birth.\n *\n * Corsican departments 2A/2B are encoded as 19/18\n * for the mod-97 checksum computation.\n *\n * @see https://en.wikipedia.org/wiki/INSEE_code\n */\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { resolveTwoDigitYear } from \"#util/date\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nconst compact = (value: string): string =>\n clean(value, \" -.\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value).toUpperCase();\n if (v.length !== 15) {\n return err(\n \"INVALID_LENGTH\",\n \"French NIR must be 15 characters\",\n );\n }\n\n const gender = v[0];\n if (gender !== \"1\" && gender !== \"2\") {\n return err(\n \"INVALID_COMPONENT\",\n \"French NIR first digit must be 1 or 2\",\n );\n }\n\n const yearPart = v.slice(1, 3);\n if (!/^\\d{2}$/.test(yearPart)) {\n return err(\n \"INVALID_FORMAT\",\n \"French NIR year must be 2 digits\",\n );\n }\n\n const monthPart = v.slice(3, 5);\n if (!/^\\d{2}$/.test(monthPart) || monthPart === \"00\") {\n return err(\n \"INVALID_FORMAT\",\n \"French NIR month must be 01-99\",\n );\n }\n\n const deptPart = v.slice(5, 7);\n const isCorsica = deptPart === \"2A\" || deptPart === \"2B\";\n if (!isCorsica && !/^\\d{2}$/.test(deptPart)) {\n return err(\n \"INVALID_FORMAT\",\n \"French NIR department must be 2 digits or 2A/2B\",\n );\n }\n\n const communePart = v.slice(7, 10);\n if (!/^\\d{3}$/.test(communePart)) {\n return err(\n \"INVALID_FORMAT\",\n \"French NIR commune must be 3 digits\",\n );\n }\n\n const serialPart = v.slice(10, 13);\n if (!/^\\d{3}$/.test(serialPart)) {\n return err(\n \"INVALID_FORMAT\",\n \"French NIR serial must be 3 digits\",\n );\n }\n\n const checkPart = v.slice(13, 15);\n if (!/^\\d{2}$/.test(checkPart)) {\n return err(\n \"INVALID_FORMAT\",\n \"French NIR check must be 2 digits\",\n );\n }\n\n let numericBase: string;\n if (deptPart === \"2A\") {\n numericBase = v.slice(0, 5) + \"19\" + v.slice(7, 13);\n } else if (deptPart === \"2B\") {\n numericBase = v.slice(0, 5) + \"18\" + v.slice(7, 13);\n } else {\n numericBase = v.slice(0, 13);\n }\n\n const base = BigInt(numericBase);\n const expected = 97n - (base % 97n);\n const actual = BigInt(checkPart);\n\n if (expected !== actual) {\n return err(\n \"INVALID_CHECKSUM\",\n \"French NIR check digits mismatch\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value).toUpperCase();\n return (\n `${v.slice(0, 1)} ${v.slice(1, 3)}` +\n ` ${v.slice(3, 5)} ${v.slice(5, 7)}` +\n ` ${v.slice(7, 10)} ${v.slice(10, 13)}` +\n ` ${v.slice(13)}`\n );\n};\n\nconst parse = (value: string): ParsedPersonId | null => {\n const result = validate(value);\n if (!result.valid) return null;\n\n const v = result.compact;\n const genderDigit = v[0];\n const yy = Number(v.slice(1, 3));\n const mm = Number(v.slice(3, 5));\n\n if (mm < 1 || mm > 12) return null;\n\n const year = resolveTwoDigitYear(yy);\n const gender = genderDigit === \"1\" ? \"male\" : \"female\";\n\n return {\n birthDate: new Date(year, mm - 1, 1),\n gender,\n };\n};\n\n/** Generate a random valid French NIR. */\nconst generate = (): string => {\n for (;;) {\n const g = String(randomInt(1, 2));\n const yy = String(randomInt(50, 99)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n const dept = String(randomInt(1, 95)).padStart(2, \"0\");\n const com = String(randomInt(1, 999)).padStart(3, \"0\");\n const s = String(randomInt(1, 999)).padStart(3, \"0\");\n const base = g + yy + mm + dept + com + s;\n const check = String(97 - (Number(base) % 97)).padStart(\n 2,\n \"0\",\n );\n const c = base + check;\n if (validate(c).valid) return c;\n }\n};\n\n/** French Social Security Number. */\nconst nir: CountryValidator<\"FR\", ParsedPersonId> = {\n name: \"French Social Security Number\",\n localName: \"Numero d'Inscription au Repertoire\",\n abbreviation: \"NIR\",\n aliases: [\n \"NIR\",\n \"numéro de sécurité sociale\",\n \"numéro SS\",\n \"sécu\",\n ] as const,\n candidatePattern:\n \"[12]\\\\s?\\\\d{2}\\\\s?\\\\d{2}\\\\s?\\\\d{2}\\\\s?\\\\d{3}\\\\s?\\\\d{3}\\\\s?\\\\d{2}\",\n scope: \"country\",\n country: \"FR\",\n entityType: \"person\",\n description:\n \"French social security number encoding \" +\n \"gender, birth date, and department\",\n sourceUrl: \"https://en.wikipedia.org/wiki/INSEE_code\",\n lengths: [15] as const,\n examples: [\"295117823456784\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default nir;\nexport { compact, format, parse, validate, generate };\n"],"mappings":"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"}
|
package/dist/fr/siren.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/fr/siren.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid French SIREN. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** French Company Identification Number. */
|
|
11
|
-
declare const siren:
|
|
10
|
+
declare const siren: CountryValidator<"FR">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, siren as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=siren.d.ts.map
|
package/dist/fr/siren.js
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
|
+
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
|
-
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
5
5
|
import { isdigits } from "../_util/strings.js";
|
|
6
6
|
//#region src/fr/siren.ts
|
|
7
|
-
/**
|
|
8
|
-
* SIREN (Système d'Identification du Répertoire
|
|
9
|
-
* des Entreprises).
|
|
10
|
-
*
|
|
11
|
-
* French company identification number. 9 digits
|
|
12
|
-
* validated with standard Luhn algorithm.
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.insee.fr/fr/information/2549588
|
|
15
|
-
*/
|
|
16
7
|
const compact = (value) => clean(value, " -.");
|
|
17
8
|
const validate = (value) => {
|
|
18
9
|
const v = compact(value);
|
|
@@ -41,6 +32,7 @@ const siren = {
|
|
|
41
32
|
abbreviation: "SIREN",
|
|
42
33
|
aliases: ["SIREN", "numéro SIREN"],
|
|
43
34
|
candidatePattern: "\\d{3}\\s?\\d{3}\\s?\\d{3}",
|
|
35
|
+
scope: "country",
|
|
44
36
|
country: "FR",
|
|
45
37
|
entityType: "company",
|
|
46
38
|
sourceUrl: "https://www.insee.fr/fr/information/2549588",
|
package/dist/fr/siren.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siren.js","names":[],"sources":["../../src/fr/siren.ts"],"sourcesContent":["/**\n * SIREN (Système d'Identification du Répertoire\n * des Entreprises).\n *\n * French company identification number. 9 digits\n * validated with standard Luhn algorithm.\n *\n * @see https://www.insee.fr/fr/information/2549588\n */\n\nimport {\n luhnValidate,\n luhnChecksum,\n} from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"siren.js","names":[],"sources":["../../src/fr/siren.ts"],"sourcesContent":["/**\n * SIREN (Système d'Identification du Répertoire\n * des Entreprises).\n *\n * French company identification number. 9 digits\n * validated with standard Luhn algorithm.\n *\n * @see https://www.insee.fr/fr/information/2549588\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport {\n luhnValidate,\n luhnChecksum,\n} from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -.\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"SIREN must be exactly 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"SIREN must contain only digits\",\n );\n }\n if (!luhnValidate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"SIREN fails Luhn check\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 3)} ${v.slice(3, 6)} ${v.slice(6)}`;\n};\n\n/** Generate a random valid French SIREN. */\nconst generate = (): string => {\n const payload = randomDigits(8);\n const cs = luhnChecksum(payload + \"0\");\n return payload + String((10 - cs) % 10);\n};\n\n/** French Company Identification Number. */\nconst siren: CountryValidator<\"FR\"> = {\n name: \"French Company ID\",\n localName:\n \"Système d'Identification du Répertoire des Entreprises\",\n abbreviation: \"SIREN\",\n aliases: [\"SIREN\", \"numéro SIREN\"] as const,\n candidatePattern: \"\\\\d{3}\\\\s?\\\\d{3}\\\\s?\\\\d{3}\",\n scope: \"country\",\n country: \"FR\",\n entityType: \"company\",\n sourceUrl: \"https://www.insee.fr/fr/information/2549588\",\n examples: [\"552008443\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default siren;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAwBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,gCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,gCACF;CAEF,IAAI,CAAC,aAAa,CAAC,GACjB,OAAO,IACL,oBACA,wBACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;AACvD;;AAGA,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,CAAC;CAC9B,MAAM,KAAK,aAAa,UAAU,GAAG;CACrC,OAAO,UAAU,QAAQ,KAAK,MAAM,EAAE;AACxC;;AAGA,MAAM,QAAgC;CACpC,MAAM;CACN,WACE;CACF,cAAc;CACd,SAAS,CAAC,SAAS,cAAc;CACjC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/fr/siret.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/fr/siret.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid French SIRET. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** French Establishment Identification Number. */
|
|
11
|
-
declare const siret:
|
|
10
|
+
declare const siret: CountryValidator<"FR">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, siret as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=siret.d.ts.map
|