@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/pt/vat.js
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits, randomInt } 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/pt/vat.ts
|
|
7
|
-
/**
|
|
8
|
-
* NIF (Portuguese VAT number).
|
|
9
|
-
*
|
|
10
|
-
* 9 digits, no leading 0.
|
|
11
|
-
* Weights [9,8,7,6,5,4,3,2],
|
|
12
|
-
* check = (11 - sum) % 11 % 10 === d[8].
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.vatify.eu/portugal-vat-number.html
|
|
15
|
-
* @see https://www.portaldasfinancas.gov.pt/
|
|
16
|
-
*/
|
|
17
7
|
const WEIGHTS = [
|
|
18
8
|
9,
|
|
19
9
|
8,
|
|
@@ -58,9 +48,11 @@ const vat = {
|
|
|
58
48
|
"contribuinte"
|
|
59
49
|
],
|
|
60
50
|
candidatePattern: "PT\\d{9}",
|
|
51
|
+
scope: "country",
|
|
61
52
|
country: "PT",
|
|
62
53
|
entityType: "any",
|
|
63
54
|
sourceUrl: "https://www.portaldasfinancas.gov.pt/",
|
|
55
|
+
lengths: [9],
|
|
64
56
|
examples: ["501964843"],
|
|
65
57
|
compact,
|
|
66
58
|
format,
|
package/dist/pt/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/pt/vat.ts"],"sourcesContent":["/**\n * NIF (Portuguese VAT number).\n *\n * 9 digits, no leading 0.\n * Weights [9,8,7,6,5,4,3,2],\n * check = (11 - sum) % 11 % 10 === d[8].\n *\n * @see https://www.vatify.eu/portugal-vat-number.html\n * @see https://www.portaldasfinancas.gov.pt/\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\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":"vat.js","names":[],"sources":["../../src/pt/vat.ts"],"sourcesContent":["/**\n * NIF (Portuguese VAT number).\n *\n * 9 digits, no leading 0.\n * Weights [9,8,7,6,5,4,3,2],\n * check = (11 - sum) % 11 % 10 === d[8].\n *\n * @see https://www.vatify.eu/portugal-vat-number.html\n * @see https://www.portaldasfinancas.gov.pt/\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, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [9, 8, 7, 6, 5, 4, 3, 2];\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"PT\") || v.startsWith(\"pt\")) {\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 !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Portuguese VAT number must be 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Portuguese VAT number must contain only digits\",\n );\n }\n if (v[0] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Portuguese VAT number cannot start with 0\",\n );\n }\n const sum = weightedSum(v.slice(0, 8), WEIGHTS, 11);\n const check = ((11 - sum) % 11) % 10;\n if (check !== Number(v[8])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Portuguese VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `PT${compact(value)}`;\n\n/** Generate a random valid Portuguese NIF. */\nconst generate = (): string => {\n const payload = String(randomInt(1, 9)) + randomDigits(7);\n const sum = weightedSum(payload, WEIGHTS, 11);\n return payload + String(((11 - sum) % 11) % 10);\n};\n\n/** Portuguese VAT Number. */\nconst vat: CountryValidator<\"PT\"> = {\n name: \"Portuguese VAT Number\",\n localName: \"Número de Identificação Fiscal\",\n abbreviation: \"NIF\",\n aliases: [\n \"NIF\",\n \"número de identificação fiscal\",\n \"contribuinte\",\n ] as const,\n candidatePattern: \"PT\\\\d{9}\",\n scope: \"country\",\n country: \"PT\",\n entityType: \"any\",\n sourceUrl: \"https://www.portaldasfinancas.gov.pt/\",\n lengths: [9] as const,\n examples: [\"501964843\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAsBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEvC,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,wCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,gDACF;CAEF,IAAI,EAAE,OAAO,KACX,OAAO,IACL,qBACA,2CACF;CAIF,KADgB,KADJ,YAAY,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,EACzB,KAAK,KAAM,OACpB,OAAO,EAAE,EAAE,GACvB,OAAO,IACL,oBACA,4CACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAC7B,MAAM,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC;CACxD,MAAM,MAAM,YAAY,SAAS,SAAS,EAAE;CAC5C,OAAO,UAAU,QAAS,KAAK,OAAO,KAAM,EAAE;AAChD;;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,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/ro/cnp.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/ro/cnp.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;
|
|
@@ -13,7 +12,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
13
12
|
/** Generate a random valid Romanian CNP. */
|
|
14
13
|
declare const generate: () => string;
|
|
15
14
|
/** Romanian Personal Identification Number. */
|
|
16
|
-
declare const cnp:
|
|
15
|
+
declare const cnp: CountryValidator<"RO", ParsedPersonId>;
|
|
17
16
|
//#endregion
|
|
18
17
|
export { compact, cnp as default, format, generate, parse, validate };
|
|
19
18
|
//# sourceMappingURL=cnp.d.ts.map
|
package/dist/ro/cnp.js
CHANGED
|
@@ -1,20 +1,10 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
3
|
+
import { isValidDate } from "../_util/date.js";
|
|
2
4
|
import { randomInt } from "../_util/generate.js";
|
|
3
5
|
import { err } from "../_util/result.js";
|
|
4
6
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
|
-
import { isValidDate } from "../_util/date.js";
|
|
7
7
|
//#region src/ro/cnp.ts
|
|
8
|
-
/**
|
|
9
|
-
* CNP (Cod Numeric Personal).
|
|
10
|
-
*
|
|
11
|
-
* Romanian personal identification number. 13 digits
|
|
12
|
-
* encoding gender/century, date of birth, county code,
|
|
13
|
-
* serial number, and a check digit.
|
|
14
|
-
*
|
|
15
|
-
* @see https://ro.wikipedia.org/wiki/Cod_numeric_personal
|
|
16
|
-
* @see https://www.cnp.ro/
|
|
17
|
-
*/
|
|
18
8
|
const WEIGHTS = [
|
|
19
9
|
2,
|
|
20
10
|
7,
|
|
@@ -78,8 +68,6 @@ const VALID_COUNTIES = new Set([
|
|
|
78
68
|
46,
|
|
79
69
|
47,
|
|
80
70
|
48,
|
|
81
|
-
49,
|
|
82
|
-
50,
|
|
83
71
|
51,
|
|
84
72
|
52,
|
|
85
73
|
70,
|
|
@@ -161,12 +149,15 @@ const cnp = {
|
|
|
161
149
|
abbreviation: "CNP",
|
|
162
150
|
aliases: ["CNP", "cod numeric personal"],
|
|
163
151
|
candidatePattern: "[1-8]\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01])\\d{6}",
|
|
152
|
+
scope: "country",
|
|
164
153
|
country: "RO",
|
|
165
154
|
entityType: "person",
|
|
166
155
|
sourceUrl: "https://www.cnp.ro/",
|
|
156
|
+
lengths: [13],
|
|
167
157
|
examples: ["1630615123457"],
|
|
168
158
|
compact,
|
|
169
159
|
format,
|
|
160
|
+
parse,
|
|
170
161
|
validate,
|
|
171
162
|
generate
|
|
172
163
|
};
|
package/dist/ro/cnp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cnp.js","names":[],"sources":["../../src/ro/cnp.ts"],"sourcesContent":["/**\n * CNP (Cod Numeric Personal).\n *\n * Romanian personal identification number. 13 digits\n * encoding gender/century, date of birth, county code,\n * serial number, and a check digit.\n *\n * @see https://ro.wikipedia.org/wiki/Cod_numeric_personal\n * @see https://www.cnp.ro/\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\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\
|
|
1
|
+
{"version":3,"file":"cnp.js","names":[],"sources":["../../src/ro/cnp.ts"],"sourcesContent":["/**\n * CNP (Cod Numeric Personal).\n *\n * Romanian personal identification number. 13 digits\n * encoding gender/century, date of birth, county code,\n * serial number, and a check digit.\n *\n * @see https://ro.wikipedia.org/wiki/Cod_numeric_personal\n * @see https://www.cnp.ro/\n */\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\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 WEIGHTS = [\n 2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9,\n] as const;\n\n// Counties 01-39 are the 39 modern judete; 40-46 are\n// Bucuresti sectors 1-6; 47-48 are the abolished\n// sectors 7-8; 51-52 are Calarasi/Giurgiu; 70 is \"Any\";\n// 80-83 are reserved. 49 and 50 are not allocated.\n// See https://github.com/vimishor/cnp-spec.\nconst VALID_COUNTIES = new Set([\n 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,\n 46, 47, 48, 51, 52, 70, 80, 81, 82, 83,\n]);\n\nconst centuryMap: Record<number, number> = {\n 1: 1900,\n 2: 1900,\n 3: 1800,\n 4: 1800,\n 5: 2000,\n 6: 2000,\n 7: 1900, // foreign residents\n 8: 1900, // foreign residents\n};\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 \"CNP must be exactly 13 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"CNP must contain only digits\",\n );\n }\n\n const g = Number(v[0]);\n if (g < 1 || g > 9) {\n return err(\n \"INVALID_COMPONENT\",\n \"CNP gender/century digit is invalid\",\n );\n }\n\n const century = centuryMap[g] ?? 1900;\n const yy = Number(v.slice(1, 3));\n const mm = Number(v.slice(3, 5));\n const dd = Number(v.slice(5, 7));\n const year = century + yy;\n\n if (!isValidDate(year, mm, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"CNP contains an invalid date\",\n );\n }\n\n const county = Number(v.slice(7, 9));\n if (!VALID_COUNTIES.has(county)) {\n return err(\n \"INVALID_COMPONENT\",\n \"CNP county code is invalid\",\n );\n }\n\n const sum = weightedSum(v.slice(0, 12), WEIGHTS, 11);\n const check = sum === 10 ? 1 : sum;\n if (check !== Number(v[12])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"CNP check digit 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 CNP.\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 g = Number(v[0]);\n const century = centuryMap[g] ?? 1900;\n const yy = Number(v.slice(1, 3));\n const mm = Number(v.slice(3, 5));\n const dd = Number(v.slice(5, 7));\n const year = century + yy;\n\n return {\n birthDate: new Date(year, mm - 1, dd),\n gender: g % 2 === 1 ? \"male\" : \"female\",\n };\n};\n\n/** Generate a random valid Romanian CNP. */\nconst generate = (): string => {\n for (;;) {\n const g = String(randomInt(1, 6));\n const yy = String(randomInt(0, 99)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n const dd = String(randomInt(1, 28)).padStart(2, \"0\");\n const county = String(randomInt(1, 52)).padStart(\n 2,\n \"0\",\n );\n const serial = String(randomInt(1, 999)).padStart(\n 3,\n \"0\",\n );\n const payload = g + yy + mm + dd + county + serial;\n const sum = weightedSum(payload, WEIGHTS, 11);\n const c = payload + String(sum === 10 ? 1 : sum);\n if (validate(c).valid) return c;\n }\n};\n\n/** Romanian Personal Identification Number. */\nconst cnp: CountryValidator<\"RO\", ParsedPersonId> = {\n name: \"Romanian Personal ID\",\n localName: \"Cod Numeric Personal\",\n abbreviation: \"CNP\",\n aliases: [\"CNP\", \"cod numeric personal\"] as const,\n candidatePattern:\n \"[1-8]\\\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\\\d|3[01])\\\\d{6}\",\n scope: \"country\",\n country: \"RO\",\n entityType: \"person\",\n sourceUrl: \"https://www.cnp.ro/\",\n lengths: [13] as const,\n examples: [\"1630615123457\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default cnp;\nexport { compact, format, parse, validate, generate };\n"],"mappings":";;;;;;;AAwBA,MAAM,UAAU;CACd;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AACnC;AAOA,MAAM,iBAAiB,IAAI,IAAI;CAC7B;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CACvD;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CACpD;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CACpD;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;AACtC,CAAC;AAED,MAAM,aAAqC;CACzC,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;AACL;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAGF,MAAM,IAAI,OAAO,EAAE,EAAE;CACrB,IAAI,IAAI,KAAK,IAAI,GACf,OAAO,IACL,qBACA,qCACF;CAGF,MAAM,UAAU,WAAW,MAAM;CACjC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAG/B,IAAI,CAAC,YAFQ,UAAU,IAEA,IAAI,EAAE,GAC3B,OAAO,IACL,qBACA,8BACF;CAGF,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CACnC,IAAI,CAAC,eAAe,IAAI,MAAM,GAC5B,OAAO,IACL,qBACA,4BACF;CAGF,MAAM,MAAM,YAAY,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS,EAAE;CAEnD,KADc,QAAQ,KAAK,IAAI,SACjB,OAAO,EAAE,GAAG,GACxB,OAAO,IACL,oBACA,gCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;;;;AAMvD,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,KAAK;CAC7B,IAAI,CAAC,OAAO,OAAO,OAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,IAAI,OAAO,EAAE,EAAE;CACrB,MAAM,UAAU,WAAW,MAAM;CACjC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,OAAO,UAAU;CAEvB,OAAO;EACL,WAAW,IAAI,KAAK,MAAM,KAAK,GAAG,EAAE;EACpC,QAAQ,IAAI,MAAM,IAAI,SAAS;CACjC;AACF;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,OAAO,UAAU,GAAG,CAAC,CAAC;EAChC,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,SAAS,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SACtC,GACA,GACF;EACA,MAAM,SAAS,OAAO,UAAU,GAAG,GAAG,CAAC,EAAE,SACvC,GACA,GACF;EACA,MAAM,UAAU,IAAI,KAAK,KAAK,KAAK,SAAS;EAC5C,MAAM,MAAM,YAAY,SAAS,SAAS,EAAE;EAC5C,MAAM,IAAI,UAAU,OAAO,QAAQ,KAAK,IAAI,GAAG;EAC/C,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8C;CAClD,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,sBAAsB;CACvC,kBACE;CACF,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,eAAe;CAC1B;CACA;CACA;CACA;CACA;AACF"}
|
package/dist/ro/mod.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import cnp from "./cnp.js";
|
|
3
2
|
import vat from "./vat.js";
|
|
4
3
|
|
|
5
4
|
//#region src/ro/mod.d.ts
|
|
6
|
-
|
|
5
|
+
declare namespace mod_d_exports {
|
|
6
|
+
export { cnp, vat };
|
|
7
|
+
}
|
|
7
8
|
//#endregion
|
|
8
9
|
export { cnp, mod_d_exports, vat };
|
|
9
10
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/ro/vat.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ro/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 Romanian VAT number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Romanian VAT Number. */
|
|
11
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"RO">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, vat as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/ro/vat.js
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits, randomInt } 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/ro/vat.ts
|
|
7
|
-
/**
|
|
8
|
-
* CIF/CUI (Romanian VAT number).
|
|
9
|
-
*
|
|
10
|
-
* 2-10 digits. Pad to 10, weights
|
|
11
|
-
* [7,5,3,2,1,7,5,3,2], check =
|
|
12
|
-
* (10 * sum) % 11 % 10 === last digit.
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.vatify.eu/romania-vat-number.html
|
|
15
|
-
* @see https://www.anaf.ro/
|
|
16
|
-
*/
|
|
17
7
|
const WEIGHTS = [
|
|
18
8
|
7,
|
|
19
9
|
5,
|
|
@@ -61,9 +51,21 @@ const vat = {
|
|
|
61
51
|
"cod fiscal"
|
|
62
52
|
],
|
|
63
53
|
candidatePattern: "RO\\d{2,10}",
|
|
54
|
+
scope: "country",
|
|
64
55
|
country: "RO",
|
|
65
56
|
entityType: "any",
|
|
66
57
|
sourceUrl: "https://www.anaf.ro/",
|
|
58
|
+
lengths: [
|
|
59
|
+
2,
|
|
60
|
+
3,
|
|
61
|
+
4,
|
|
62
|
+
5,
|
|
63
|
+
6,
|
|
64
|
+
7,
|
|
65
|
+
8,
|
|
66
|
+
9,
|
|
67
|
+
10
|
|
68
|
+
],
|
|
67
69
|
examples: ["18547290"],
|
|
68
70
|
compact,
|
|
69
71
|
format,
|
package/dist/ro/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/ro/vat.ts"],"sourcesContent":["/**\n * CIF/CUI (Romanian VAT number).\n *\n * 2-10 digits. Pad to 10, weights\n * [7,5,3,2,1,7,5,3,2], check =\n * (10 * sum) % 11 % 10 === last digit.\n *\n * @see https://www.vatify.eu/romania-vat-number.html\n * @see https://www.anaf.ro/\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\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":"vat.js","names":[],"sources":["../../src/ro/vat.ts"],"sourcesContent":["/**\n * CIF/CUI (Romanian VAT number).\n *\n * 2-10 digits. Pad to 10, weights\n * [7,5,3,2,1,7,5,3,2], check =\n * (10 * sum) % 11 % 10 === last digit.\n *\n * @see https://www.vatify.eu/romania-vat-number.html\n * @see https://www.anaf.ro/\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, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [7, 5, 3, 2, 1, 7, 5, 3, 2];\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"RO\") || v.startsWith(\"ro\")) {\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 < 2 || v.length > 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Romanian VAT number must be 2 to 10 digits\",\n );\n }\n if (!isdigits(v) || v[0] === \"0\") {\n return err(\n \"INVALID_FORMAT\",\n \"Romanian VAT number must contain only digits \" +\n \"and must not start with 0\",\n );\n }\n // Pad to 10 digits\n const padded = v.padStart(10, \"0\");\n const sum = weightedSum(padded.slice(0, 9), WEIGHTS, 11);\n const check = ((sum * 10) % 11) % 10;\n if (check !== Number(padded[9])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Romanian VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `RO${compact(value)}`;\n\n/** Generate a random valid Romanian VAT number. */\nconst generate = (): string => {\n for (;;) {\n const c =\n String(randomInt(1, 9)) +\n randomDigits(randomInt(1, 9));\n if (validate(c).valid) return c;\n }\n};\n\n/** Romanian VAT Number. */\nconst vat: CountryValidator<\"RO\"> = {\n name: \"Romanian VAT Number\",\n localName: \"Cod de Identificare Fiscală\",\n abbreviation: \"CIF\",\n aliases: [\n \"CUI\",\n \"CIF\",\n \"cod de identificare fiscală\",\n \"cod fiscal\",\n ] as const,\n candidatePattern: \"RO\\\\d{2,10}\",\n scope: \"country\",\n country: \"RO\",\n entityType: \"any\",\n sourceUrl: \"https://www.anaf.ro/\",\n lengths: [2, 3, 4, 5, 6, 7, 8, 9, 10] as const,\n examples: [\"18547290\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAsBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAE1C,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,SAAS,KAAK,EAAE,SAAS,IAC7B,OAAO,IACL,kBACA,4CACF;CAEF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,KAC3B,OAAO,IACL,kBACA,wEAEF;CAGF,MAAM,SAAS,EAAE,SAAS,IAAI,GAAG;CAGjC,IAFY,YAAY,OAAO,MAAM,GAAG,CAAC,GAAG,SAAS,EACnC,IAAI,KAAM,KAAM,OACpB,OAAO,OAAO,EAAE,GAC5B,OAAO,IACL,oBACA,0CACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IACJ,OAAO,UAAU,GAAG,CAAC,CAAC,IACtB,aAAa,UAAU,GAAG,CAAC,CAAC;EAC9B,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,SAAS;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAE;CACpC,UAAU,CAAC,UAAU;CACrB;CACA;CACA;CACA;AACF"}
|
package/dist/rs/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import pib from "./pib.js";
|
|
3
2
|
|
|
4
3
|
//#region src/rs/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { pib };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, pib };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/rs/pib.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/rs/pib.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 Serbian PIB. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Serbian Tax Identification Number. */
|
|
11
|
-
declare const pib:
|
|
10
|
+
declare const pib: CountryValidator<"RS">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, pib as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=pib.d.ts.map
|
package/dist/rs/pib.js
CHANGED
|
@@ -3,15 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/rs/pib.ts
|
|
6
|
-
/**
|
|
7
|
-
* PIB (Poreski identifikacioni broj).
|
|
8
|
-
*
|
|
9
|
-
* Serbian tax identification number. 9 digits with
|
|
10
|
-
* a mod 11 checksum (ISO 7064 variant).
|
|
11
|
-
*
|
|
12
|
-
* @see https://en.wikipedia.org/wiki/Tax_identification_number_(Serbia)
|
|
13
|
-
* @see https://www.purs.gov.rs/
|
|
14
|
-
*/
|
|
15
6
|
const compact = (value) => clean(value, " -");
|
|
16
7
|
const validate = (value) => {
|
|
17
8
|
const v = compact(value);
|
|
@@ -44,6 +35,7 @@ const pib = {
|
|
|
44
35
|
abbreviation: "PIB",
|
|
45
36
|
aliases: ["PIB", "poreski identifikacioni broj"],
|
|
46
37
|
candidatePattern: "\\d{9}",
|
|
38
|
+
scope: "country",
|
|
47
39
|
country: "RS",
|
|
48
40
|
entityType: "any",
|
|
49
41
|
lengths: [9],
|
package/dist/rs/pib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pib.js","names":[],"sources":["../../src/rs/pib.ts"],"sourcesContent":["/**\n * PIB (Poreski identifikacioni broj).\n *\n * Serbian tax identification number. 9 digits with\n * a mod 11 checksum (ISO 7064 variant).\n *\n * @see https://en.wikipedia.org/wiki/Tax_identification_number_(Serbia)\n * @see https://www.purs.gov.rs/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"pib.js","names":[],"sources":["../../src/rs/pib.ts"],"sourcesContent":["/**\n * PIB (Poreski identifikacioni broj).\n *\n * Serbian tax identification number. 9 digits with\n * a mod 11 checksum (ISO 7064 variant).\n *\n * @see https://en.wikipedia.org/wiki/Tax_identification_number_(Serbia)\n * @see https://www.purs.gov.rs/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\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 \"PIB must be exactly 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"PIB must contain only digits\",\n );\n }\n\n // ISO 7064 Mod 11, 10 checksum\n let t = 10;\n for (let i = 0; i < 8; i++) {\n t = (t + Number(v[i])) % 10;\n if (t === 0) t = 10;\n t = (t * 2) % 11;\n }\n const check = (11 - t) % 10;\n if (check !== Number(v[8])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"PIB check digit mismatch\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Serbian PIB. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Serbian Tax Identification Number. */\nconst pib: CountryValidator<\"RS\"> = {\n name: \"Serbian Tax ID\",\n localName: \"Poreski identifikacioni broj\",\n abbreviation: \"PIB\",\n aliases: [\"PIB\", \"poreski identifikacioni broj\"] as const,\n candidatePattern: \"\\\\d{9}\",\n scope: \"country\",\n country: \"RS\",\n entityType: \"any\",\n lengths: [9] as const,\n sourceUrl: \"https://www.purs.gov.rs/\",\n examples: [\"101134702\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default pib;\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,GACf,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAIF,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,KAAK,IAAI,OAAO,EAAE,EAAE,KAAK;EACzB,IAAI,MAAM,GAAG,IAAI;EACjB,IAAK,IAAI,IAAK;CAChB;CAEA,KADe,KAAK,KAAK,OACX,OAAO,EAAE,EAAE,GACvB,OAAO,IACL,oBACA,0BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,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,OAAO,8BAA8B;CAC/C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,CAAC;CACX,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/ru/inn.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ru/inn.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 10-digit Russian INN. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Russian Taxpayer Identification Number. */
|
|
11
|
-
declare const inn:
|
|
10
|
+
declare const inn: CountryValidator<"RU">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, inn as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=inn.d.ts.map
|
package/dist/ru/inn.js
CHANGED
|
@@ -3,17 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/ru/inn.ts
|
|
6
|
-
/**
|
|
7
|
-
* INN (Идентификационный номер налогоплательщика).
|
|
8
|
-
*
|
|
9
|
-
* Russian taxpayer identification number. 10 digits
|
|
10
|
-
* for companies (1 check digit), 12 digits for
|
|
11
|
-
* individuals (2 check digits). Check digits are
|
|
12
|
-
* computed as weighted sum mod 11 mod 10.
|
|
13
|
-
*
|
|
14
|
-
* @see https://en.wikipedia.org/wiki/Taxpayer_Identification_Number_(Russia)
|
|
15
|
-
* @see https://www.nalog.gov.ru/
|
|
16
|
-
*/
|
|
17
6
|
const WEIGHTS_10 = [
|
|
18
7
|
2,
|
|
19
8
|
4,
|
|
@@ -52,7 +41,7 @@ const WEIGHTS_12 = [
|
|
|
52
41
|
];
|
|
53
42
|
const checkDigit = (value, weights) => {
|
|
54
43
|
let sum = 0;
|
|
55
|
-
for (
|
|
44
|
+
for (const [i, weight] of weights.entries()) sum += Number(value[i]) * weight;
|
|
56
45
|
return sum % 11 % 10;
|
|
57
46
|
};
|
|
58
47
|
const compact = (value) => clean(value, " -");
|
|
@@ -87,6 +76,7 @@ const inn = {
|
|
|
87
76
|
abbreviation: "ИНН",
|
|
88
77
|
aliases: ["ИНН", "INN"],
|
|
89
78
|
candidatePattern: "\\d{10,12}",
|
|
79
|
+
scope: "country",
|
|
90
80
|
country: "RU",
|
|
91
81
|
entityType: "any",
|
|
92
82
|
lengths: [10, 12],
|
package/dist/ru/inn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inn.js","names":[],"sources":["../../src/ru/inn.ts"],"sourcesContent":["/**\n * INN (Идентификационный номер налогоплательщика).\n *\n * Russian taxpayer identification number. 10 digits\n * for companies (1 check digit), 12 digits for\n * individuals (2 check digits). Check digits are\n * computed as weighted sum mod 11 mod 10.\n *\n * @see https://en.wikipedia.org/wiki/Taxpayer_Identification_Number_(Russia)\n * @see https://www.nalog.gov.ru/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"inn.js","names":[],"sources":["../../src/ru/inn.ts"],"sourcesContent":["/**\n * INN (Идентификационный номер налогоплательщика).\n *\n * Russian taxpayer identification number. 10 digits\n * for companies (1 check digit), 12 digits for\n * individuals (2 check digits). Check digits are\n * computed as weighted sum mod 11 mod 10.\n *\n * @see https://en.wikipedia.org/wiki/Taxpayer_Identification_Number_(Russia)\n * @see https://www.nalog.gov.ru/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS_10 = [2, 4, 10, 3, 5, 9, 4, 6, 8] as const;\nconst WEIGHTS_11 = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8] as const;\nconst WEIGHTS_12 = [\n 3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8,\n] as const;\n\nconst checkDigit = (\n value: string,\n weights: readonly number[],\n): number => {\n let sum = 0;\n for (const [i, weight] of weights.entries()) {\n sum += Number(value[i]) * weight;\n }\n return (sum % 11) % 10;\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10 && v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"INN must be 10 or 12 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"INN must contain only digits\",\n );\n }\n\n if (v.length === 10) {\n const check = checkDigit(v, WEIGHTS_10);\n if (check !== Number(v[9])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"INN check digit mismatch\",\n );\n }\n } else {\n const check11 = checkDigit(v, WEIGHTS_11);\n const check12 = checkDigit(v, WEIGHTS_12);\n if (\n check11 !== Number(v[10]) ||\n check12 !== Number(v[11])\n ) {\n return err(\n \"INVALID_CHECKSUM\",\n \"INN check digit mismatch\",\n );\n }\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid 10-digit Russian INN. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(10);\n if (validate(c).valid) return c;\n }\n};\n\n/** Russian Taxpayer Identification Number. */\nconst inn: CountryValidator<\"RU\"> = {\n name: \"Russian Tax ID\",\n localName: \"Идентификационный номер налогоплательщика\",\n abbreviation: \"ИНН\",\n aliases: [\"ИНН\", \"INN\"] as const,\n candidatePattern: \"\\\\d{10,12}\",\n scope: \"country\",\n country: \"RU\",\n entityType: \"any\",\n lengths: [10, 12] as const,\n sourceUrl: \"https://www.nalog.gov.ru/\",\n examples: [\"7707083893\", \"526317984689\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default inn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAsBA,MAAM,aAAa;CAAC;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAC9C,MAAM,aAAa;CAAC;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AACjD,MAAM,aAAa;CACjB;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;AACjC;AAEA,MAAM,cACJ,OACA,YACW;CACX,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GACxC,OAAO,OAAO,MAAM,EAAE,IAAI;CAE5B,OAAQ,MAAM,KAAM;AACtB;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,MAAM,EAAE,WAAW,IAClC,OAAO,IACL,kBACA,6BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAGF,IAAI,EAAE,WAAW;MACD,WAAW,GAAG,UACpB,MAAM,OAAO,EAAE,EAAE,GACvB,OAAO,IACL,oBACA,0BACF;CAAA,OAEG;EACL,MAAM,UAAU,WAAW,GAAG,UAAU;EACxC,MAAM,UAAU,WAAW,GAAG,UAAU;EACxC,IACE,YAAY,OAAO,EAAE,GAAG,KACxB,YAAY,OAAO,EAAE,GAAG,GAExB,OAAO,IACL,oBACA,0BACF;CAEJ;CAEA,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,EAAE;EACzB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,KAAK;CACtB,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,IAAI,EAAE;CAChB,WAAW;CACX,UAAU,CAAC,cAAc,cAAc;CACvC;CACA;CACA;CACA;AACF"}
|
package/dist/ru/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import inn from "./inn.js";
|
|
3
2
|
|
|
4
3
|
//#region src/ru/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { inn };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { inn, mod_d_exports };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/se/mod.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import orgnr from "./orgnr.js";
|
|
3
2
|
import personnummer from "./personnummer.js";
|
|
4
3
|
import vat from "./vat.js";
|
|
5
4
|
|
|
6
5
|
//#region src/se/mod.d.ts
|
|
7
|
-
|
|
6
|
+
declare namespace mod_d_exports {
|
|
7
|
+
export { orgnr, personnummer, vat };
|
|
8
|
+
}
|
|
8
9
|
//#endregion
|
|
9
10
|
export { mod_d_exports, orgnr, personnummer, vat };
|
|
10
11
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/se/orgnr.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/se/orgnr.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 Swedish org number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Swedish Organization Number. */
|
|
11
|
-
declare const orgnr:
|
|
10
|
+
declare const orgnr: CountryValidator<"SE">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, orgnr as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=orgnr.d.ts.map
|
package/dist/se/orgnr.js
CHANGED
|
@@ -1,17 +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/se/orgnr.ts
|
|
7
|
-
/**
|
|
8
|
-
* Organisationsnummer (Swedish organization number).
|
|
9
|
-
*
|
|
10
|
-
* 10 digits. Standard Luhn checksum.
|
|
11
|
-
* Display format: NNNNNN-NNNN.
|
|
12
|
-
*
|
|
13
|
-
* @see https://www.skatteverket.se/
|
|
14
|
-
*/
|
|
15
7
|
const compact = (value) => clean(value, " -");
|
|
16
8
|
const validate = (value) => {
|
|
17
9
|
const v = compact(value);
|
|
@@ -44,6 +36,7 @@ const orgnr = {
|
|
|
44
36
|
"org nr"
|
|
45
37
|
],
|
|
46
38
|
candidatePattern: "\\d{6}-\\d{4}",
|
|
39
|
+
scope: "country",
|
|
47
40
|
country: "SE",
|
|
48
41
|
entityType: "company",
|
|
49
42
|
sourceUrl: "https://www.skatteverket.se/",
|
package/dist/se/orgnr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgnr.js","names":[],"sources":["../../src/se/orgnr.ts"],"sourcesContent":["/**\n * Organisationsnummer (Swedish organization number).\n *\n * 10 digits. Standard Luhn checksum.\n * Display format: NNNNNN-NNNN.\n *\n * @see https://www.skatteverket.se/\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":"orgnr.js","names":[],"sources":["../../src/se/orgnr.ts"],"sourcesContent":["/**\n * Organisationsnummer (Swedish organization number).\n *\n * 10 digits. Standard Luhn checksum.\n * Display format: NNNNNN-NNNN.\n *\n * @see https://www.skatteverket.se/\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 !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Swedish Organisationsnummer must be 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Swedish Organisationsnummer must contain only digits\",\n );\n }\n if (!luhnValidate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Swedish Organisationsnummer Luhn check failed\",\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, 6)}-${v.slice(6)}`;\n};\n\n/** Generate a random valid Swedish org number. */\nconst generate = (): string => {\n const p = randomDigits(9);\n const cs = luhnChecksum(p + \"0\");\n return p + String((10 - cs) % 10);\n};\n\n/** Swedish Organization Number. */\nconst orgnr: CountryValidator<\"SE\"> = {\n name: \"Swedish Organization Number\",\n localName: \"Organisationsnummer\",\n abbreviation: \"Orgnr\",\n aliases: [\n \"organisationsnummer\",\n \"org.nr\",\n \"org nr\",\n ] as const,\n candidatePattern: \"\\\\d{6}-\\\\d{4}\",\n scope: \"country\",\n country: \"SE\",\n entityType: \"company\",\n sourceUrl: \"https://www.skatteverket.se/\",\n examples: [\"1234567897\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default orgnr;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAuBA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,+CACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,sDACF;CAEF,IAAI,CAAC,aAAa,CAAC,GACjB,OAAO,IACL,oBACA,+CACF;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,CAAC;AACtC;;AAGA,MAAM,iBAAyB;CAC7B,MAAM,IAAI,aAAa,CAAC;CACxB,MAAM,KAAK,aAAa,IAAI,GAAG;CAC/B,OAAO,IAAI,QAAQ,KAAK,MAAM,EAAE;AAClC;;AAGA,MAAM,QAAgC;CACpC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;AACF"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/se/personnummer.d.ts
|
|
4
|
-
|
|
5
4
|
/**
|
|
6
5
|
* Match python-stdnum's compact: preserve the '-' or '+'
|
|
7
6
|
* separator at position -5, and strip any others.
|
|
@@ -17,7 +16,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
17
16
|
/** Generate a random valid Swedish personnummer. */
|
|
18
17
|
declare const generate: () => string;
|
|
19
18
|
/** Swedish Personal Identity Number. */
|
|
20
|
-
declare const personnummer:
|
|
19
|
+
declare const personnummer: CountryValidator<"SE", ParsedPersonId>;
|
|
21
20
|
//#endregion
|
|
22
21
|
export { compact, personnummer as default, format, generate, parse, validate };
|
|
23
22
|
//# sourceMappingURL=personnummer.d.ts.map
|
package/dist/se/personnummer.js
CHANGED
|
@@ -1,26 +1,17 @@
|
|
|
1
|
+
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
3
|
+
import { isValidDate } from "../_util/date.js";
|
|
2
4
|
import { randomInt } from "../_util/generate.js";
|
|
3
5
|
import { err } from "../_util/result.js";
|
|
4
|
-
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
5
6
|
import { isdigits } from "../_util/strings.js";
|
|
6
|
-
import { isValidDate } from "../_util/date.js";
|
|
7
7
|
//#region src/se/personnummer.ts
|
|
8
8
|
/**
|
|
9
|
-
* Personnummer (Personal Identity Number).
|
|
10
|
-
*
|
|
11
|
-
* Swedish personal identification number. 10 digits
|
|
12
|
-
* in compact form (YYMMDDNNNC) with a Luhn checksum
|
|
13
|
-
* on all 10 digits.
|
|
14
|
-
*
|
|
15
|
-
* @see https://www.skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
9
|
* Match python-stdnum's compact: preserve the '-' or '+'
|
|
19
10
|
* separator at position -5, and strip any others.
|
|
20
11
|
*/
|
|
21
12
|
const compact = (value) => {
|
|
22
13
|
let v = clean(value, " :");
|
|
23
|
-
if ((v.length === 10 || v.length === 12) && v
|
|
14
|
+
if ((v.length === 10 || v.length === 12) && v.at(-5) !== "-" && v.at(-5) !== "+") v = `${v.slice(0, -4)}-${v.slice(-4)}`;
|
|
24
15
|
return `${v.slice(0, -5).replace(/-/g, "").replace(/\+/g, "")}${v.slice(-5)}`;
|
|
25
16
|
};
|
|
26
17
|
/**
|
|
@@ -40,7 +31,7 @@ const getBirthDate = (v) => {
|
|
|
40
31
|
let century = Math.floor(currentYear / 100);
|
|
41
32
|
const yy = Number(v.slice(0, 2));
|
|
42
33
|
if (yy > currentYear % 100) century -= 1;
|
|
43
|
-
if (v
|
|
34
|
+
if (v.at(-5) === "+") century -= 1;
|
|
44
35
|
year = century * 100 + yy;
|
|
45
36
|
month = Number(v.slice(2, 4));
|
|
46
37
|
day = Number(v.slice(4, 6));
|
|
@@ -56,7 +47,7 @@ const validate = (value) => {
|
|
|
56
47
|
const v = compact(value);
|
|
57
48
|
if (v.length !== 11 && v.length !== 13) return err("INVALID_LENGTH", "Personnummer must be 10 or 12 digits");
|
|
58
49
|
const digits = v.slice(0, -5) + v.slice(-4);
|
|
59
|
-
const sep = v
|
|
50
|
+
const sep = v.at(-5);
|
|
60
51
|
if (sep !== "-" && sep !== "+" || !isdigits(digits)) return err("INVALID_FORMAT", "Personnummer has invalid format");
|
|
61
52
|
if (getBirthDate(v) === null) return err("INVALID_COMPONENT", "Personnummer contains an invalid date");
|
|
62
53
|
if (!luhnValidate(digits.slice(-10))) return err("INVALID_CHECKSUM", "Personnummer Luhn check does not match");
|
|
@@ -76,7 +67,7 @@ const parse = (value) => {
|
|
|
76
67
|
const v = result.compact;
|
|
77
68
|
const birthDate = getBirthDate(v);
|
|
78
69
|
if (birthDate === null) return null;
|
|
79
|
-
const genderDigit = Number(v
|
|
70
|
+
const genderDigit = Number(v.at(-2));
|
|
80
71
|
return {
|
|
81
72
|
birthDate: new Date(birthDate.year, birthDate.month - 1, birthDate.day),
|
|
82
73
|
gender: genderDigit % 2 === 0 ? "female" : "male"
|
|
@@ -107,12 +98,14 @@ const personnummer = {
|
|
|
107
98
|
"personal identity number"
|
|
108
99
|
],
|
|
109
100
|
candidatePattern: "\\d{6,8}-\\d{4}",
|
|
101
|
+
scope: "country",
|
|
110
102
|
country: "SE",
|
|
111
103
|
entityType: "person",
|
|
112
104
|
sourceUrl: "https://www.skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html",
|
|
113
105
|
examples: ["880320-0016"],
|
|
114
106
|
compact,
|
|
115
107
|
format,
|
|
108
|
+
parse,
|
|
116
109
|
validate,
|
|
117
110
|
generate
|
|
118
111
|
};
|