@stll/stdnum 0.0.1
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 +25 -0
- package/README.md +323 -0
- package/dist/_checksums/luhn.d.ts +12 -0
- package/dist/_checksums/luhn.js +26 -0
- package/dist/_checksums/luhn.js.map +1 -0
- package/dist/_checksums/mod1110.d.ts +12 -0
- package/dist/_checksums/mod1110.js +25 -0
- package/dist/_checksums/mod1110.js.map +1 -0
- package/dist/_checksums/mod112.d.ts +24 -0
- package/dist/_checksums/mod112.js +53 -0
- package/dist/_checksums/mod112.js.map +1 -0
- package/dist/_checksums/mod97.d.ts +23 -0
- package/dist/_checksums/mod97.js +28 -0
- package/dist/_checksums/mod97.js.map +1 -0
- package/dist/_checksums/verhoeff.d.ts +22 -0
- package/dist/_checksums/verhoeff.js +271 -0
- package/dist/_checksums/verhoeff.js.map +1 -0
- package/dist/_checksums/weighted-sum.d.ts +13 -0
- package/dist/_checksums/weighted-sum.js +22 -0
- package/dist/_checksums/weighted-sum.js.map +1 -0
- package/dist/_util/arabic.d.ts +19 -0
- package/dist/_util/arabic.js +41 -0
- package/dist/_util/arabic.js.map +1 -0
- package/dist/_util/clean.d.ts +13 -0
- package/dist/_util/clean.js +71 -0
- package/dist/_util/clean.js.map +1 -0
- package/dist/_util/date.d.ts +12 -0
- package/dist/_util/date.js +19 -0
- package/dist/_util/date.js.map +1 -0
- package/dist/_util/generate.d.ts +16 -0
- package/dist/_util/generate.js +21 -0
- package/dist/_util/generate.js.map +1 -0
- package/dist/_util/result.d.ts +8 -0
- package/dist/_util/result.js +13 -0
- package/dist/_util/result.js.map +1 -0
- package/dist/_util/strings.d.ts +21 -0
- package/dist/_util/strings.js +28 -0
- package/dist/_util/strings.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/ad/mod.d.ts +8 -0
- package/dist/ad/mod.js +8 -0
- package/dist/ad/mod.js.map +1 -0
- package/dist/ad/nrt.d.ts +13 -0
- package/dist/ad/nrt.js +69 -0
- package/dist/ad/nrt.js.map +1 -0
- package/dist/ae/eid.d.ts +17 -0
- package/dist/ae/eid.js +79 -0
- package/dist/ae/eid.js.map +1 -0
- package/dist/ae/mod.d.ts +8 -0
- package/dist/ae/mod.js +8 -0
- package/dist/ae/mod.js.map +1 -0
- package/dist/ai/mod.d.ts +8 -0
- package/dist/ai/mod.js +8 -0
- package/dist/ai/mod.js.map +1 -0
- package/dist/ai/tin.d.ts +19 -0
- package/dist/ai/tin.js +72 -0
- package/dist/ai/tin.js.map +1 -0
- package/dist/al/mod.d.ts +8 -0
- package/dist/al/mod.js +8 -0
- package/dist/al/mod.js.map +1 -0
- package/dist/al/nipt.d.ts +13 -0
- package/dist/al/nipt.js +56 -0
- package/dist/al/nipt.js.map +1 -0
- package/dist/am/mod.d.ts +8 -0
- package/dist/am/mod.js +8 -0
- package/dist/am/mod.js.map +1 -0
- package/dist/am/tin.d.ts +13 -0
- package/dist/am/tin.js +53 -0
- package/dist/am/tin.js.map +1 -0
- package/dist/ar/cbu.d.ts +14 -0
- package/dist/ar/cbu.js +88 -0
- package/dist/ar/cbu.js.map +1 -0
- package/dist/ar/cuit.d.ts +19 -0
- package/dist/ar/cuit.js +123 -0
- package/dist/ar/cuit.js.map +1 -0
- package/dist/ar/dni.d.ts +13 -0
- package/dist/ar/dni.js +57 -0
- package/dist/ar/dni.js.map +1 -0
- package/dist/ar/mod.d.ts +10 -0
- package/dist/ar/mod.js +14 -0
- package/dist/ar/mod.js.map +1 -0
- package/dist/at/businessid.d.ts +13 -0
- package/dist/at/businessid.js +56 -0
- package/dist/at/businessid.js.map +1 -0
- package/dist/at/mod.d.ts +11 -0
- package/dist/at/mod.js +16 -0
- package/dist/at/mod.js.map +1 -0
- package/dist/at/tin.d.ts +14 -0
- package/dist/at/tin.js +70 -0
- package/dist/at/tin.js.map +1 -0
- package/dist/at/uid.d.ts +14 -0
- package/dist/at/uid.js +64 -0
- package/dist/at/uid.js.map +1 -0
- package/dist/at/vnr.d.ts +12 -0
- package/dist/at/vnr.js +79 -0
- package/dist/at/vnr.js.map +1 -0
- package/dist/au/abn.d.ts +14 -0
- package/dist/au/abn.js +77 -0
- package/dist/au/abn.js.map +1 -0
- package/dist/au/acn.d.ts +14 -0
- package/dist/au/acn.js +70 -0
- package/dist/au/acn.js.map +1 -0
- package/dist/au/mod.d.ts +10 -0
- package/dist/au/mod.js +14 -0
- package/dist/au/mod.js.map +1 -0
- package/dist/au/tfn.d.ts +14 -0
- package/dist/au/tfn.js +71 -0
- package/dist/au/tfn.js.map +1 -0
- package/dist/az/mod.d.ts +8 -0
- package/dist/az/mod.js +8 -0
- package/dist/az/mod.js.map +1 -0
- package/dist/az/voen.d.ts +21 -0
- package/dist/az/voen.js +100 -0
- package/dist/az/voen.js.map +1 -0
- package/dist/ba/jmbg.d.ts +15 -0
- package/dist/ba/jmbg.js +97 -0
- package/dist/ba/jmbg.js.map +1 -0
- package/dist/ba/mod.d.ts +8 -0
- package/dist/ba/mod.js +8 -0
- package/dist/ba/mod.js.map +1 -0
- package/dist/bd/mod.d.ts +8 -0
- package/dist/bd/mod.js +8 -0
- package/dist/bd/mod.js.map +1 -0
- package/dist/bd/nid.d.ts +13 -0
- package/dist/bd/nid.js +116 -0
- package/dist/bd/nid.js.map +1 -0
- package/dist/be/bis.d.ts +14 -0
- package/dist/be/bis.js +65 -0
- package/dist/be/bis.js.map +1 -0
- package/dist/be/mod.d.ts +10 -0
- package/dist/be/mod.js +14 -0
- package/dist/be/mod.js.map +1 -0
- package/dist/be/nn.d.ts +21 -0
- package/dist/be/nn.js +84 -0
- package/dist/be/nn.js.map +1 -0
- package/dist/be/vat.d.ts +14 -0
- package/dist/be/vat.js +70 -0
- package/dist/be/vat.js.map +1 -0
- package/dist/bg/egn.d.ts +19 -0
- package/dist/bg/egn.js +122 -0
- package/dist/bg/egn.js.map +1 -0
- package/dist/bg/mod.d.ts +10 -0
- package/dist/bg/mod.js +14 -0
- package/dist/bg/mod.js.map +1 -0
- package/dist/bg/pnf.d.ts +14 -0
- package/dist/bg/pnf.js +70 -0
- package/dist/bg/pnf.js.map +1 -0
- package/dist/bg/vat.d.ts +14 -0
- package/dist/bg/vat.js +153 -0
- package/dist/bg/vat.js.map +1 -0
- package/dist/bh/cpr.d.ts +12 -0
- package/dist/bh/cpr.js +58 -0
- package/dist/bh/cpr.js.map +1 -0
- package/dist/bh/mod.d.ts +8 -0
- package/dist/bh/mod.js +8 -0
- package/dist/bh/mod.js.map +1 -0
- package/dist/bic.d.ts +13 -0
- package/dist/bic.js +72 -0
- package/dist/bic.js.map +1 -0
- package/dist/br/cnpj.d.ts +21 -0
- package/dist/br/cnpj.js +132 -0
- package/dist/br/cnpj.js.map +1 -0
- package/dist/br/cpf.d.ts +14 -0
- package/dist/br/cpf.js +83 -0
- package/dist/br/cpf.js.map +1 -0
- package/dist/br/mod.d.ts +9 -0
- package/dist/br/mod.js +12 -0
- package/dist/br/mod.js.map +1 -0
- package/dist/by/mod.d.ts +8 -0
- package/dist/by/mod.js +8 -0
- package/dist/by/mod.js.map +1 -0
- package/dist/by/unp.d.ts +14 -0
- package/dist/by/unp.js +114 -0
- package/dist/by/unp.js.map +1 -0
- package/dist/bz/mod.d.ts +8 -0
- package/dist/bz/mod.js +8 -0
- package/dist/bz/mod.js.map +1 -0
- package/dist/bz/tin.d.ts +16 -0
- package/dist/bz/tin.js +85 -0
- package/dist/bz/tin.js.map +1 -0
- package/dist/ca/bn.d.ts +14 -0
- package/dist/ca/bn.js +73 -0
- package/dist/ca/bn.js.map +1 -0
- package/dist/ca/mod.d.ts +9 -0
- package/dist/ca/mod.js +12 -0
- package/dist/ca/mod.js.map +1 -0
- package/dist/ca/sin.d.ts +14 -0
- package/dist/ca/sin.js +62 -0
- package/dist/ca/sin.js.map +1 -0
- package/dist/ch/mod.d.ts +10 -0
- package/dist/ch/mod.js +14 -0
- package/dist/ch/mod.js.map +1 -0
- package/dist/ch/ssn.d.ts +14 -0
- package/dist/ch/ssn.js +67 -0
- package/dist/ch/ssn.js.map +1 -0
- package/dist/ch/uid.d.ts +14 -0
- package/dist/ch/uid.js +81 -0
- package/dist/ch/uid.js.map +1 -0
- package/dist/ch/vat.d.ts +14 -0
- package/dist/ch/vat.js +70 -0
- package/dist/ch/vat.js.map +1 -0
- package/dist/cl/mod.d.ts +8 -0
- package/dist/cl/mod.js +8 -0
- package/dist/cl/mod.js.map +1 -0
- package/dist/cl/rut.d.ts +19 -0
- package/dist/cl/rut.js +95 -0
- package/dist/cl/rut.js.map +1 -0
- package/dist/cn/mod.d.ts +9 -0
- package/dist/cn/mod.js +12 -0
- package/dist/cn/mod.js.map +1 -0
- package/dist/cn/ric.d.ts +19 -0
- package/dist/cn/ric.js +108 -0
- package/dist/cn/ric.js.map +1 -0
- package/dist/cn/uscc.d.ts +14 -0
- package/dist/cn/uscc.js +88 -0
- package/dist/cn/uscc.js.map +1 -0
- package/dist/co/mod.d.ts +8 -0
- package/dist/co/mod.js +8 -0
- package/dist/co/mod.js.map +1 -0
- package/dist/co/nit.d.ts +14 -0
- package/dist/co/nit.js +109 -0
- package/dist/co/nit.js.map +1 -0
- package/dist/cr/cpf.d.ts +21 -0
- package/dist/cr/cpf.js +79 -0
- package/dist/cr/cpf.js.map +1 -0
- package/dist/cr/mod.d.ts +8 -0
- package/dist/cr/mod.js +8 -0
- package/dist/cr/mod.js.map +1 -0
- package/dist/creditcard.d.ts +25 -0
- package/dist/creditcard.js +121 -0
- package/dist/creditcard.js.map +1 -0
- package/dist/cu/mod.d.ts +8 -0
- package/dist/cu/mod.js +8 -0
- package/dist/cu/mod.js.map +1 -0
- package/dist/cu/ni.d.ts +21 -0
- package/dist/cu/ni.js +90 -0
- package/dist/cu/ni.js.map +1 -0
- package/dist/cy/mod.d.ts +8 -0
- package/dist/cy/mod.js +8 -0
- package/dist/cy/mod.js.map +1 -0
- package/dist/cy/vat.d.ts +14 -0
- package/dist/cy/vat.js +88 -0
- package/dist/cy/vat.js.map +1 -0
- package/dist/cz/dic.d.ts +14 -0
- package/dist/cz/dic.js +97 -0
- package/dist/cz/dic.js.map +1 -0
- package/dist/cz/ico.d.ts +14 -0
- package/dist/cz/ico.js +70 -0
- package/dist/cz/ico.js.map +1 -0
- package/dist/cz/mod.d.ts +10 -0
- package/dist/cz/mod.js +14 -0
- package/dist/cz/mod.js.map +1 -0
- package/dist/cz/rc.d.ts +22 -0
- package/dist/cz/rc.js +116 -0
- package/dist/cz/rc.js.map +1 -0
- package/dist/de/handelsreg.d.ts +17 -0
- package/dist/de/handelsreg.js +86 -0
- package/dist/de/handelsreg.js.map +1 -0
- package/dist/de/idnr.d.ts +14 -0
- package/dist/de/idnr.js +102 -0
- package/dist/de/idnr.js.map +1 -0
- package/dist/de/mod.d.ts +12 -0
- package/dist/de/mod.js +18 -0
- package/dist/de/mod.js.map +1 -0
- package/dist/de/stnr.d.ts +22 -0
- package/dist/de/stnr.js +144 -0
- package/dist/de/stnr.js.map +1 -0
- package/dist/de/svnr.d.ts +14 -0
- package/dist/de/svnr.js +108 -0
- package/dist/de/svnr.js.map +1 -0
- package/dist/de/vat.d.ts +14 -0
- package/dist/de/vat.js +65 -0
- package/dist/de/vat.js.map +1 -0
- package/dist/dk/cpr.d.ts +17 -0
- package/dist/dk/cpr.js +81 -0
- package/dist/dk/cpr.js.map +1 -0
- package/dist/dk/cvr.d.ts +14 -0
- package/dist/dk/cvr.js +70 -0
- package/dist/dk/cvr.js.map +1 -0
- package/dist/dk/mod.d.ts +10 -0
- package/dist/dk/mod.js +14 -0
- package/dist/dk/mod.js.map +1 -0
- package/dist/dk/vat.d.ts +14 -0
- package/dist/dk/vat.js +72 -0
- package/dist/dk/vat.js.map +1 -0
- package/dist/do/mod.d.ts +8 -0
- package/dist/do/mod.js +8 -0
- package/dist/do/mod.js.map +1 -0
- package/dist/do/rnc.d.ts +18 -0
- package/dist/do/rnc.js +95 -0
- package/dist/do/rnc.js.map +1 -0
- package/dist/ec/mod.d.ts +8 -0
- package/dist/ec/mod.js +8 -0
- package/dist/ec/mod.js.map +1 -0
- package/dist/ec/ruc.d.ts +14 -0
- package/dist/ec/ruc.js +150 -0
- package/dist/ec/ruc.js.map +1 -0
- package/dist/ee/ik.d.ts +24 -0
- package/dist/ee/ik.js +131 -0
- package/dist/ee/ik.js.map +1 -0
- package/dist/ee/mod.d.ts +10 -0
- package/dist/ee/mod.js +14 -0
- package/dist/ee/mod.js.map +1 -0
- package/dist/ee/registrikood.d.ts +14 -0
- package/dist/ee/registrikood.js +63 -0
- package/dist/ee/registrikood.js.map +1 -0
- package/dist/ee/vat.d.ts +14 -0
- package/dist/ee/vat.js +69 -0
- package/dist/ee/vat.js.map +1 -0
- package/dist/eg/mod.d.ts +8 -0
- package/dist/eg/mod.js +8 -0
- package/dist/eg/mod.js.map +1 -0
- package/dist/eg/tn.d.ts +13 -0
- package/dist/eg/tn.js +81 -0
- package/dist/eg/tn.js.map +1 -0
- package/dist/es/cif.d.ts +14 -0
- package/dist/es/cif.js +66 -0
- package/dist/es/cif.js.map +1 -0
- package/dist/es/dni.d.ts +15 -0
- package/dist/es/dni.js +58 -0
- package/dist/es/dni.js.map +1 -0
- package/dist/es/mod.d.ts +12 -0
- package/dist/es/mod.js +18 -0
- package/dist/es/mod.js.map +1 -0
- package/dist/es/nie.d.ts +14 -0
- package/dist/es/nie.js +78 -0
- package/dist/es/nie.js.map +1 -0
- package/dist/es/nss.d.ts +14 -0
- package/dist/es/nss.js +72 -0
- package/dist/es/nss.js.map +1 -0
- package/dist/es/vat.d.ts +15 -0
- package/dist/es/vat.js +104 -0
- package/dist/es/vat.js.map +1 -0
- package/dist/eu/mod.d.ts +8 -0
- package/dist/eu/mod.js +8 -0
- package/dist/eu/mod.js.map +1 -0
- package/dist/eu/vat.d.ts +20 -0
- package/dist/eu/vat.js +145 -0
- package/dist/eu/vat.js.map +1 -0
- package/dist/fi/hetu.d.ts +17 -0
- package/dist/fi/hetu.js +107 -0
- package/dist/fi/hetu.js.map +1 -0
- package/dist/fi/mod.d.ts +10 -0
- package/dist/fi/mod.js +14 -0
- package/dist/fi/mod.js.map +1 -0
- package/dist/fi/vat.d.ts +14 -0
- package/dist/fi/vat.js +68 -0
- package/dist/fi/vat.js.map +1 -0
- package/dist/fi/ytunnus.d.ts +14 -0
- package/dist/fi/ytunnus.js +71 -0
- package/dist/fi/ytunnus.js.map +1 -0
- package/dist/fr/mod.d.ts +12 -0
- package/dist/fr/mod.js +18 -0
- package/dist/fr/mod.js.map +1 -0
- package/dist/fr/nif.d.ts +14 -0
- package/dist/fr/nif.js +64 -0
- package/dist/fr/nif.js.map +1 -0
- package/dist/fr/nir.d.ts +15 -0
- package/dist/fr/nir.js +106 -0
- package/dist/fr/nir.js.map +1 -0
- package/dist/fr/siren.d.ts +14 -0
- package/dist/fr/siren.js +56 -0
- package/dist/fr/siren.js.map +1 -0
- package/dist/fr/siret.d.ts +14 -0
- package/dist/fr/siret.js +73 -0
- package/dist/fr/siret.js.map +1 -0
- package/dist/fr/tva.d.ts +14 -0
- package/dist/fr/tva.js +80 -0
- package/dist/fr/tva.js.map +1 -0
- package/dist/gb/mod.d.ts +11 -0
- package/dist/gb/mod.js +16 -0
- package/dist/gb/mod.js.map +1 -0
- package/dist/gb/nino.d.ts +13 -0
- package/dist/gb/nino.js +103 -0
- package/dist/gb/nino.js.map +1 -0
- package/dist/gb/sedol.d.ts +15 -0
- package/dist/gb/sedol.js +85 -0
- package/dist/gb/sedol.js.map +1 -0
- package/dist/gb/utr.d.ts +14 -0
- package/dist/gb/utr.js +69 -0
- package/dist/gb/utr.js.map +1 -0
- package/dist/gb/vat.d.ts +14 -0
- package/dist/gb/vat.js +102 -0
- package/dist/gb/vat.js.map +1 -0
- package/dist/ge/mod.d.ts +8 -0
- package/dist/ge/mod.js +8 -0
- package/dist/ge/mod.js.map +1 -0
- package/dist/ge/pin.d.ts +13 -0
- package/dist/ge/pin.js +51 -0
- package/dist/ge/pin.js.map +1 -0
- package/dist/gh/mod.d.ts +8 -0
- package/dist/gh/mod.js +8 -0
- package/dist/gh/mod.js.map +1 -0
- package/dist/gh/tin.d.ts +14 -0
- package/dist/gh/tin.js +80 -0
- package/dist/gh/tin.js.map +1 -0
- package/dist/gr/amka.d.ts +14 -0
- package/dist/gr/amka.js +71 -0
- package/dist/gr/amka.js.map +1 -0
- package/dist/gr/mod.d.ts +9 -0
- package/dist/gr/mod.js +12 -0
- package/dist/gr/mod.js.map +1 -0
- package/dist/gr/vat.d.ts +14 -0
- package/dist/gr/vat.js +66 -0
- package/dist/gr/vat.js.map +1 -0
- package/dist/gt/mod.d.ts +8 -0
- package/dist/gt/mod.js +8 -0
- package/dist/gt/mod.js.map +1 -0
- package/dist/gt/nit.d.ts +21 -0
- package/dist/gt/nit.js +98 -0
- package/dist/gt/nit.js.map +1 -0
- package/dist/hk/hkid.d.ts +15 -0
- package/dist/hk/hkid.js +92 -0
- package/dist/hk/hkid.js.map +1 -0
- package/dist/hk/mod.d.ts +8 -0
- package/dist/hk/mod.js +8 -0
- package/dist/hk/mod.js.map +1 -0
- package/dist/hr/mod.d.ts +8 -0
- package/dist/hr/mod.js +8 -0
- package/dist/hr/mod.js.map +1 -0
- package/dist/hr/vat.d.ts +14 -0
- package/dist/hr/vat.js +55 -0
- package/dist/hr/vat.js.map +1 -0
- package/dist/hu/mod.d.ts +8 -0
- package/dist/hu/mod.js +8 -0
- package/dist/hu/mod.js.map +1 -0
- package/dist/hu/vat.d.ts +14 -0
- package/dist/hu/vat.js +68 -0
- package/dist/hu/vat.js.map +1 -0
- package/dist/iban.d.ts +16 -0
- package/dist/iban.js +282 -0
- package/dist/iban.js.map +1 -0
- package/dist/id/mod.d.ts +8 -0
- package/dist/id/mod.js +8 -0
- package/dist/id/mod.js.map +1 -0
- package/dist/id/npwp.d.ts +14 -0
- package/dist/id/npwp.js +133 -0
- package/dist/id/npwp.js.map +1 -0
- package/dist/ie/mod.d.ts +9 -0
- package/dist/ie/mod.js +12 -0
- package/dist/ie/mod.js.map +1 -0
- package/dist/ie/pps.d.ts +14 -0
- package/dist/ie/pps.js +69 -0
- package/dist/ie/pps.js.map +1 -0
- package/dist/ie/vat.d.ts +14 -0
- package/dist/ie/vat.js +83 -0
- package/dist/ie/vat.js.map +1 -0
- package/dist/il/idnr.d.ts +14 -0
- package/dist/il/idnr.js +61 -0
- package/dist/il/idnr.js.map +1 -0
- package/dist/il/mod.d.ts +8 -0
- package/dist/il/mod.js +8 -0
- package/dist/il/mod.js.map +1 -0
- package/dist/in/aadhaar.d.ts +14 -0
- package/dist/in/aadhaar.js +61 -0
- package/dist/in/aadhaar.js.map +1 -0
- package/dist/in/gstin.d.ts +14 -0
- package/dist/in/gstin.js +130 -0
- package/dist/in/gstin.js.map +1 -0
- package/dist/in/mod.d.ts +10 -0
- package/dist/in/mod.js +14 -0
- package/dist/in/mod.js.map +1 -0
- package/dist/in/pan.d.ts +13 -0
- package/dist/in/pan.js +58 -0
- package/dist/in/pan.js.map +1 -0
- package/dist/index.d.ts +105 -0
- package/dist/index.js +104 -0
- package/dist/iq/mod.d.ts +8 -0
- package/dist/iq/mod.js +8 -0
- package/dist/iq/mod.js.map +1 -0
- package/dist/iq/nid.d.ts +14 -0
- package/dist/iq/nid.js +56 -0
- package/dist/iq/nid.js.map +1 -0
- package/dist/ir/mod.d.ts +8 -0
- package/dist/ir/mod.js +8 -0
- package/dist/ir/mod.js.map +1 -0
- package/dist/ir/nid.d.ts +18 -0
- package/dist/ir/nid.js +90 -0
- package/dist/ir/nid.js.map +1 -0
- package/dist/is/kennitala.d.ts +14 -0
- package/dist/is/kennitala.js +92 -0
- package/dist/is/kennitala.js.map +1 -0
- package/dist/is/mod.d.ts +9 -0
- package/dist/is/mod.js +12 -0
- package/dist/is/mod.js.map +1 -0
- package/dist/is/vsk.d.ts +13 -0
- package/dist/is/vsk.js +47 -0
- package/dist/is/vsk.js.map +1 -0
- package/dist/isin.d.ts +14 -0
- package/dist/isin.js +85 -0
- package/dist/isin.js.map +1 -0
- package/dist/it/codicefiscale.d.ts +18 -0
- package/dist/it/codicefiscale.js +214 -0
- package/dist/it/codicefiscale.js.map +1 -0
- package/dist/it/iva.d.ts +14 -0
- package/dist/it/iva.js +71 -0
- package/dist/it/iva.js.map +1 -0
- package/dist/it/mod.d.ts +9 -0
- package/dist/it/mod.js +12 -0
- package/dist/it/mod.js.map +1 -0
- package/dist/jp/cn.d.ts +14 -0
- package/dist/jp/cn.js +68 -0
- package/dist/jp/cn.js.map +1 -0
- package/dist/jp/mod.d.ts +9 -0
- package/dist/jp/mod.js +12 -0
- package/dist/jp/mod.js.map +1 -0
- package/dist/jp/mynumber.d.ts +14 -0
- package/dist/jp/mynumber.js +86 -0
- package/dist/jp/mynumber.js.map +1 -0
- package/dist/kr/brn.d.ts +13 -0
- package/dist/kr/brn.js +67 -0
- package/dist/kr/brn.js.map +1 -0
- package/dist/kr/mod.d.ts +9 -0
- package/dist/kr/mod.js +12 -0
- package/dist/kr/mod.js.map +1 -0
- package/dist/kr/rrn.d.ts +22 -0
- package/dist/kr/rrn.js +133 -0
- package/dist/kr/rrn.js.map +1 -0
- package/dist/kw/civil.d.ts +18 -0
- package/dist/kw/civil.js +99 -0
- package/dist/kw/civil.js.map +1 -0
- package/dist/kw/mod.d.ts +8 -0
- package/dist/kw/mod.js +8 -0
- package/dist/kw/mod.js.map +1 -0
- package/dist/kz/iin.d.ts +23 -0
- package/dist/kz/iin.js +150 -0
- package/dist/kz/iin.js.map +1 -0
- package/dist/kz/mod.d.ts +8 -0
- package/dist/kz/mod.js +8 -0
- package/dist/kz/mod.js.map +1 -0
- package/dist/lei.d.ts +14 -0
- package/dist/lei.js +68 -0
- package/dist/lei.js.map +1 -0
- package/dist/li/mod.d.ts +8 -0
- package/dist/li/mod.js +8 -0
- package/dist/li/mod.js.map +1 -0
- package/dist/li/peid.d.ts +13 -0
- package/dist/li/peid.js +61 -0
- package/dist/li/peid.js.map +1 -0
- package/dist/lk/mod.d.ts +8 -0
- package/dist/lk/mod.js +8 -0
- package/dist/lk/mod.js.map +1 -0
- package/dist/lk/nic.d.ts +17 -0
- package/dist/lk/nic.js +139 -0
- package/dist/lk/nic.js.map +1 -0
- package/dist/lt/asmens.d.ts +14 -0
- package/dist/lt/asmens.js +81 -0
- package/dist/lt/asmens.js.map +1 -0
- package/dist/lt/mod.d.ts +9 -0
- package/dist/lt/mod.js +12 -0
- package/dist/lt/mod.js.map +1 -0
- package/dist/lt/vat.d.ts +14 -0
- package/dist/lt/vat.js +72 -0
- package/dist/lt/vat.js.map +1 -0
- package/dist/lu/mod.d.ts +8 -0
- package/dist/lu/mod.js +8 -0
- package/dist/lu/mod.js.map +1 -0
- package/dist/lu/vat.d.ts +14 -0
- package/dist/lu/vat.js +56 -0
- package/dist/lu/vat.js.map +1 -0
- package/dist/luhn.d.ts +17 -0
- package/dist/luhn.js +51 -0
- package/dist/luhn.js.map +1 -0
- package/dist/lv/mod.d.ts +8 -0
- package/dist/lv/mod.js +8 -0
- package/dist/lv/mod.js.map +1 -0
- package/dist/lv/vat.d.ts +14 -0
- package/dist/lv/vat.js +104 -0
- package/dist/lv/vat.js.map +1 -0
- package/dist/ma/ice.d.ts +14 -0
- package/dist/ma/ice.js +57 -0
- package/dist/ma/ice.js.map +1 -0
- package/dist/ma/mod.d.ts +8 -0
- package/dist/ma/mod.js +8 -0
- package/dist/ma/mod.js.map +1 -0
- package/dist/mc/mod.d.ts +8 -0
- package/dist/mc/mod.js +8 -0
- package/dist/mc/mod.js.map +1 -0
- package/dist/mc/tva.d.ts +14 -0
- package/dist/mc/tva.js +53 -0
- package/dist/mc/tva.js.map +1 -0
- package/dist/md/idno.d.ts +12 -0
- package/dist/md/idno.js +71 -0
- package/dist/md/idno.js.map +1 -0
- package/dist/md/mod.d.ts +8 -0
- package/dist/md/mod.js +8 -0
- package/dist/md/mod.js.map +1 -0
- package/dist/me/mod.d.ts +8 -0
- package/dist/me/mod.js +8 -0
- package/dist/me/mod.js.map +1 -0
- package/dist/me/pib.d.ts +14 -0
- package/dist/me/pib.js +63 -0
- package/dist/me/pib.js.map +1 -0
- package/dist/mk/edb.d.ts +14 -0
- package/dist/mk/edb.js +77 -0
- package/dist/mk/edb.js.map +1 -0
- package/dist/mk/mod.d.ts +8 -0
- package/dist/mk/mod.js +8 -0
- package/dist/mk/mod.js.map +1 -0
- package/dist/mt/mod.d.ts +8 -0
- package/dist/mt/mod.js +8 -0
- package/dist/mt/mod.js.map +1 -0
- package/dist/mt/vat.d.ts +14 -0
- package/dist/mt/vat.js +69 -0
- package/dist/mt/vat.js.map +1 -0
- package/dist/mu/brn.d.ts +13 -0
- package/dist/mu/brn.js +68 -0
- package/dist/mu/brn.js.map +1 -0
- package/dist/mu/mod.d.ts +8 -0
- package/dist/mu/mod.js +8 -0
- package/dist/mu/mod.js.map +1 -0
- package/dist/mx/clabe.d.ts +18 -0
- package/dist/mx/clabe.js +87 -0
- package/dist/mx/clabe.js.map +1 -0
- package/dist/mx/curp.d.ts +21 -0
- package/dist/mx/curp.js +140 -0
- package/dist/mx/curp.js.map +1 -0
- package/dist/mx/mod.d.ts +10 -0
- package/dist/mx/mod.js +14 -0
- package/dist/mx/mod.js.map +1 -0
- package/dist/mx/rfc.d.ts +16 -0
- package/dist/mx/rfc.js +92 -0
- package/dist/mx/rfc.js.map +1 -0
- package/dist/my/mod.d.ts +8 -0
- package/dist/my/mod.js +8 -0
- package/dist/my/mod.js.map +1 -0
- package/dist/my/nric.d.ts +17 -0
- package/dist/my/nric.js +186 -0
- package/dist/my/nric.js.map +1 -0
- package/dist/ng/mod.d.ts +8 -0
- package/dist/ng/mod.js +8 -0
- package/dist/ng/mod.js.map +1 -0
- package/dist/ng/nin.d.ts +13 -0
- package/dist/ng/nin.js +54 -0
- package/dist/ng/nin.js.map +1 -0
- package/dist/ni/mod.d.ts +8 -0
- package/dist/ni/mod.js +8 -0
- package/dist/ni/mod.js.map +1 -0
- package/dist/ni/ruc.d.ts +23 -0
- package/dist/ni/ruc.js +113 -0
- package/dist/ni/ruc.js.map +1 -0
- package/dist/nl/bsn.d.ts +14 -0
- package/dist/nl/bsn.js +70 -0
- package/dist/nl/bsn.js.map +1 -0
- package/dist/nl/kvk.d.ts +13 -0
- package/dist/nl/kvk.js +45 -0
- package/dist/nl/kvk.js.map +1 -0
- package/dist/nl/mod.d.ts +10 -0
- package/dist/nl/mod.js +14 -0
- package/dist/nl/mod.js.map +1 -0
- package/dist/nl/vat.d.ts +14 -0
- package/dist/nl/vat.js +94 -0
- package/dist/nl/vat.js.map +1 -0
- package/dist/no/fodselsnummer.d.ts +20 -0
- package/dist/no/fodselsnummer.js +134 -0
- package/dist/no/fodselsnummer.js.map +1 -0
- package/dist/no/mod.d.ts +10 -0
- package/dist/no/mod.js +14 -0
- package/dist/no/mod.js.map +1 -0
- package/dist/no/mva.d.ts +14 -0
- package/dist/no/mva.js +54 -0
- package/dist/no/mva.js.map +1 -0
- package/dist/no/orgnr.d.ts +14 -0
- package/dist/no/orgnr.js +66 -0
- package/dist/no/orgnr.js.map +1 -0
- package/dist/nz/ird.d.ts +14 -0
- package/dist/nz/ird.js +105 -0
- package/dist/nz/ird.js.map +1 -0
- package/dist/nz/mod.d.ts +8 -0
- package/dist/nz/mod.js +8 -0
- package/dist/nz/mod.js.map +1 -0
- package/dist/pa/mod.d.ts +8 -0
- package/dist/pa/mod.js +8 -0
- package/dist/pa/mod.js.map +1 -0
- package/dist/pa/ruc.d.ts +23 -0
- package/dist/pa/ruc.js +200 -0
- package/dist/pa/ruc.js.map +1 -0
- package/dist/patterns.d.ts +45 -0
- package/dist/patterns.js +123 -0
- package/dist/patterns.js.map +1 -0
- package/dist/pe/mod.d.ts +8 -0
- package/dist/pe/mod.js +8 -0
- package/dist/pe/mod.js.map +1 -0
- package/dist/pe/ruc.d.ts +19 -0
- package/dist/pe/ruc.js +109 -0
- package/dist/pe/ruc.js.map +1 -0
- package/dist/ph/mod.d.ts +8 -0
- package/dist/ph/mod.js +8 -0
- package/dist/ph/mod.js.map +1 -0
- package/dist/ph/philid.d.ts +13 -0
- package/dist/ph/philid.js +60 -0
- package/dist/ph/philid.js.map +1 -0
- package/dist/pk/cnic.d.ts +13 -0
- package/dist/pk/cnic.js +69 -0
- package/dist/pk/cnic.js.map +1 -0
- package/dist/pk/mod.d.ts +8 -0
- package/dist/pk/mod.js +8 -0
- package/dist/pk/mod.js.map +1 -0
- package/dist/pl/mod.d.ts +10 -0
- package/dist/pl/mod.js +14 -0
- package/dist/pl/mod.js.map +1 -0
- package/dist/pl/nip.d.ts +18 -0
- package/dist/pl/nip.js +77 -0
- package/dist/pl/nip.js.map +1 -0
- package/dist/pl/pesel.d.ts +19 -0
- package/dist/pl/pesel.js +109 -0
- package/dist/pl/pesel.js.map +1 -0
- package/dist/pl/regon.d.ts +14 -0
- package/dist/pl/regon.js +85 -0
- package/dist/pl/regon.js.map +1 -0
- package/dist/pt/cc.d.ts +14 -0
- package/dist/pt/cc.js +77 -0
- package/dist/pt/cc.js.map +1 -0
- package/dist/pt/mod.d.ts +9 -0
- package/dist/pt/mod.js +12 -0
- package/dist/pt/mod.js.map +1 -0
- package/dist/pt/vat.d.ts +14 -0
- package/dist/pt/vat.js +73 -0
- package/dist/pt/vat.js.map +1 -0
- package/dist/ro/cnp.d.ts +19 -0
- package/dist/ro/cnp.js +176 -0
- package/dist/ro/cnp.js.map +1 -0
- package/dist/ro/mod.d.ts +9 -0
- package/dist/ro/mod.js +12 -0
- package/dist/ro/mod.js.map +1 -0
- package/dist/ro/vat.d.ts +14 -0
- package/dist/ro/vat.js +76 -0
- package/dist/ro/vat.js.map +1 -0
- package/dist/rs/mod.d.ts +8 -0
- package/dist/rs/mod.js +8 -0
- package/dist/rs/mod.js.map +1 -0
- package/dist/rs/pib.d.ts +14 -0
- package/dist/rs/pib.js +60 -0
- package/dist/rs/pib.js.map +1 -0
- package/dist/ru/inn.d.ts +14 -0
- package/dist/ru/inn.js +103 -0
- package/dist/ru/inn.js.map +1 -0
- package/dist/ru/mod.d.ts +8 -0
- package/dist/ru/mod.js +8 -0
- package/dist/ru/mod.js.map +1 -0
- package/dist/se/mod.d.ts +10 -0
- package/dist/se/mod.js +14 -0
- package/dist/se/mod.js.map +1 -0
- package/dist/se/orgnr.d.ts +14 -0
- package/dist/se/orgnr.js +59 -0
- package/dist/se/orgnr.js.map +1 -0
- package/dist/se/personnummer.d.ts +23 -0
- package/dist/se/personnummer.js +122 -0
- package/dist/se/personnummer.js.map +1 -0
- package/dist/se/vat.d.ts +14 -0
- package/dist/se/vat.js +63 -0
- package/dist/se/vat.js.map +1 -0
- package/dist/sg/mod.d.ts +8 -0
- package/dist/sg/mod.js +8 -0
- package/dist/sg/mod.js.map +1 -0
- package/dist/sg/uen.d.ts +14 -0
- package/dist/sg/uen.js +207 -0
- package/dist/sg/uen.js.map +1 -0
- package/dist/si/emso.d.ts +19 -0
- package/dist/si/emso.js +108 -0
- package/dist/si/emso.js.map +1 -0
- package/dist/si/mod.d.ts +9 -0
- package/dist/si/mod.js +12 -0
- package/dist/si/mod.js.map +1 -0
- package/dist/si/vat.d.ts +14 -0
- package/dist/si/vat.js +74 -0
- package/dist/si/vat.js.map +1 -0
- package/dist/sk/dic.d.ts +14 -0
- package/dist/sk/dic.js +66 -0
- package/dist/sk/dic.js.map +1 -0
- package/dist/sk/ico.d.ts +10 -0
- package/dist/sk/ico.js +30 -0
- package/dist/sk/ico.js.map +1 -0
- package/dist/sk/mod.d.ts +10 -0
- package/dist/sk/mod.js +14 -0
- package/dist/sk/mod.js.map +1 -0
- package/dist/sk/rc.d.ts +10 -0
- package/dist/sk/rc.js +30 -0
- package/dist/sk/rc.js.map +1 -0
- package/dist/th/mod.d.ts +8 -0
- package/dist/th/mod.js +8 -0
- package/dist/th/mod.js.map +1 -0
- package/dist/th/tin.d.ts +14 -0
- package/dist/th/tin.js +63 -0
- package/dist/th/tin.js.map +1 -0
- package/dist/tr/mod.d.ts +9 -0
- package/dist/tr/mod.js +12 -0
- package/dist/tr/mod.js.map +1 -0
- package/dist/tr/tckimlik.d.ts +15 -0
- package/dist/tr/tckimlik.js +79 -0
- package/dist/tr/tckimlik.js.map +1 -0
- package/dist/tr/vkn.d.ts +15 -0
- package/dist/tr/vkn.js +79 -0
- package/dist/tr/vkn.js.map +1 -0
- package/dist/tw/mod.d.ts +8 -0
- package/dist/tw/mod.js +8 -0
- package/dist/tw/mod.js.map +1 -0
- package/dist/tw/ubn.d.ts +14 -0
- package/dist/tw/ubn.js +86 -0
- package/dist/tw/ubn.js.map +1 -0
- package/dist/types.d.ts +95 -0
- package/dist/types.js +1 -0
- package/dist/ua/edrpou.d.ts +14 -0
- package/dist/ua/edrpou.js +103 -0
- package/dist/ua/edrpou.js.map +1 -0
- package/dist/ua/mod.d.ts +8 -0
- package/dist/ua/mod.js +8 -0
- package/dist/ua/mod.js.map +1 -0
- package/dist/us/ein.d.ts +13 -0
- package/dist/us/ein.js +234 -0
- package/dist/us/ein.js.map +1 -0
- package/dist/us/itin.d.ts +15 -0
- package/dist/us/itin.js +69 -0
- package/dist/us/itin.js.map +1 -0
- package/dist/us/mod.d.ts +11 -0
- package/dist/us/mod.js +16 -0
- package/dist/us/mod.js.map +1 -0
- package/dist/us/rtn.d.ts +14 -0
- package/dist/us/rtn.js +91 -0
- package/dist/us/rtn.js.map +1 -0
- package/dist/us/ssn.d.ts +13 -0
- package/dist/us/ssn.js +77 -0
- package/dist/us/ssn.js.map +1 -0
- package/dist/uy/mod.d.ts +8 -0
- package/dist/uy/mod.js +8 -0
- package/dist/uy/mod.js.map +1 -0
- package/dist/uy/rut.d.ts +18 -0
- package/dist/uy/rut.js +105 -0
- package/dist/uy/rut.js.map +1 -0
- package/dist/ve/mod.d.ts +8 -0
- package/dist/ve/mod.js +8 -0
- package/dist/ve/mod.js.map +1 -0
- package/dist/ve/rif.d.ts +18 -0
- package/dist/ve/rif.js +109 -0
- package/dist/ve/rif.js.map +1 -0
- package/dist/vn/mod.d.ts +8 -0
- package/dist/vn/mod.js +8 -0
- package/dist/vn/mod.js.map +1 -0
- package/dist/vn/mst.d.ts +14 -0
- package/dist/vn/mst.js +82 -0
- package/dist/vn/mst.js.map +1 -0
- package/dist/za/idnr.d.ts +19 -0
- package/dist/za/idnr.js +110 -0
- package/dist/za/idnr.js.map +1 -0
- package/dist/za/mod.d.ts +8 -0
- package/dist/za/mod.js +8 -0
- package/dist/za/mod.js.map +1 -0
- package/package.json +936 -0
- package/src/_checksums/luhn.ts +24 -0
- package/src/_checksums/mod1110.ts +24 -0
- package/src/_checksums/mod112.ts +40 -0
- package/src/_checksums/mod97.ts +28 -0
- package/src/_checksums/verhoeff.ts +71 -0
- package/src/_checksums/weighted-sum.ts +23 -0
- package/src/_util/arabic.ts +48 -0
- package/src/_util/clean.ts +86 -0
- package/src/_util/date.ts +23 -0
- package/src/_util/generate.ts +24 -0
- package/src/_util/result.ts +10 -0
- package/src/_util/strings.ts +32 -0
- package/src/ad/mod.ts +1 -0
- package/src/ad/nrt.ts +111 -0
- package/src/ae/eid.ts +106 -0
- package/src/ae/mod.ts +1 -0
- package/src/ai/mod.ts +1 -0
- package/src/ai/tin.ts +98 -0
- package/src/al/mod.ts +1 -0
- package/src/al/nipt.ts +78 -0
- package/src/am/mod.ts +1 -0
- package/src/am/tin.ts +73 -0
- package/src/ar/cbu.ts +106 -0
- package/src/ar/cuit.ts +137 -0
- package/src/ar/dni.ts +79 -0
- package/src/ar/mod.ts +3 -0
- package/src/at/businessid.ts +74 -0
- package/src/at/mod.ts +4 -0
- package/src/at/tin.ts +90 -0
- package/src/at/uid.ts +92 -0
- package/src/at/vnr.ts +111 -0
- package/src/au/abn.ts +85 -0
- package/src/au/acn.ts +86 -0
- package/src/au/mod.ts +3 -0
- package/src/au/tfn.ts +85 -0
- package/src/az/mod.ts +1 -0
- package/src/az/voen.ts +125 -0
- package/src/ba/jmbg.ts +128 -0
- package/src/ba/mod.ts +1 -0
- package/src/bd/mod.ts +1 -0
- package/src/bd/nid.ts +139 -0
- package/src/be/bis.ts +105 -0
- package/src/be/mod.ts +3 -0
- package/src/be/nn.ts +125 -0
- package/src/be/vat.ts +107 -0
- package/src/bg/egn.ts +155 -0
- package/src/bg/mod.ts +3 -0
- package/src/bg/pnf.ts +86 -0
- package/src/bg/vat.ts +155 -0
- package/src/bh/cpr.ts +81 -0
- package/src/bh/mod.ts +1 -0
- package/src/bic.ts +99 -0
- package/src/br/cnpj.ts +152 -0
- package/src/br/cpf.ts +114 -0
- package/src/br/mod.ts +2 -0
- package/src/by/mod.ts +1 -0
- package/src/by/unp.ts +153 -0
- package/src/bz/mod.ts +1 -0
- package/src/bz/tin.ts +107 -0
- package/src/ca/bn.ts +107 -0
- package/src/ca/mod.ts +2 -0
- package/src/ca/sin.ts +91 -0
- package/src/ch/mod.ts +3 -0
- package/src/ch/ssn.ts +95 -0
- package/src/ch/uid.ts +108 -0
- package/src/ch/vat.ts +85 -0
- package/src/cl/mod.ts +1 -0
- package/src/cl/rut.ts +118 -0
- package/src/cn/mod.ts +2 -0
- package/src/cn/ric.ts +180 -0
- package/src/cn/uscc.ts +111 -0
- package/src/co/mod.ts +1 -0
- package/src/co/nit.ts +108 -0
- package/src/cr/cpf.ts +111 -0
- package/src/cr/mod.ts +1 -0
- package/src/creditcard.ts +190 -0
- package/src/cu/mod.ts +1 -0
- package/src/cu/ni.ts +125 -0
- package/src/cy/mod.ts +1 -0
- package/src/cy/vat.ts +130 -0
- package/src/cz/dic.ts +135 -0
- package/src/cz/ico.ts +82 -0
- package/src/cz/mod.ts +3 -0
- package/src/cz/rc.ts +190 -0
- package/src/de/handelsreg.ts +107 -0
- package/src/de/idnr.ts +140 -0
- package/src/de/mod.ts +5 -0
- package/src/de/stnr.ts +214 -0
- package/src/de/svnr.ts +162 -0
- package/src/de/vat.ts +98 -0
- package/src/dk/cpr.ts +122 -0
- package/src/dk/cvr.ts +87 -0
- package/src/dk/mod.ts +3 -0
- package/src/dk/vat.ts +91 -0
- package/src/do/mod.ts +1 -0
- package/src/do/rnc.ts +126 -0
- package/src/ec/mod.ts +1 -0
- package/src/ec/ruc.ts +195 -0
- package/src/ee/ik.ts +156 -0
- package/src/ee/mod.ts +3 -0
- package/src/ee/registrikood.ts +81 -0
- package/src/ee/vat.ts +85 -0
- package/src/eg/mod.ts +1 -0
- package/src/eg/tn.ts +103 -0
- package/src/es/cif.ts +105 -0
- package/src/es/dni.ts +90 -0
- package/src/es/mod.ts +5 -0
- package/src/es/nie.ts +102 -0
- package/src/es/nss.ts +109 -0
- package/src/es/vat.ts +178 -0
- package/src/eu/mod.ts +1 -0
- package/src/eu/vat.ts +171 -0
- package/src/fi/hetu.ts +182 -0
- package/src/fi/mod.ts +3 -0
- package/src/fi/vat.ts +82 -0
- package/src/fi/ytunnus.ts +83 -0
- package/src/fr/mod.ts +5 -0
- package/src/fr/nif.ts +93 -0
- package/src/fr/nir.ts +195 -0
- package/src/fr/siren.ts +79 -0
- package/src/fr/siret.ts +122 -0
- package/src/fr/tva.ts +146 -0
- package/src/gb/mod.ts +4 -0
- package/src/gb/nino.ts +153 -0
- package/src/gb/sedol.ts +137 -0
- package/src/gb/utr.ts +81 -0
- package/src/gb/vat.ts +158 -0
- package/src/ge/mod.ts +1 -0
- package/src/ge/pin.ts +71 -0
- package/src/gh/mod.ts +1 -0
- package/src/gh/tin.ts +100 -0
- package/src/gr/amka.ts +104 -0
- package/src/gr/mod.ts +2 -0
- package/src/gr/vat.ts +96 -0
- package/src/gt/mod.ts +1 -0
- package/src/gt/nit.ts +116 -0
- package/src/hk/hkid.ts +131 -0
- package/src/hk/mod.ts +1 -0
- package/src/hr/mod.ts +1 -0
- package/src/hr/vat.ts +79 -0
- package/src/hu/mod.ts +1 -0
- package/src/hu/vat.ts +82 -0
- package/src/iban.ts +340 -0
- package/src/id/mod.ts +1 -0
- package/src/id/npwp.ts +187 -0
- package/src/ie/mod.ts +2 -0
- package/src/ie/pps.ts +105 -0
- package/src/ie/vat.ts +138 -0
- package/src/il/idnr.ts +87 -0
- package/src/il/mod.ts +1 -0
- package/src/in/aadhaar.ts +96 -0
- package/src/in/gstin.ts +169 -0
- package/src/in/mod.ts +3 -0
- package/src/in/pan.ts +88 -0
- package/src/index.ts +116 -0
- package/src/iq/mod.ts +1 -0
- package/src/iq/nid.ts +71 -0
- package/src/ir/mod.ts +1 -0
- package/src/ir/nid.ts +120 -0
- package/src/is/kennitala.ts +125 -0
- package/src/is/mod.ts +2 -0
- package/src/is/vsk.ts +63 -0
- package/src/isin.ts +114 -0
- package/src/it/codicefiscale.ts +290 -0
- package/src/it/iva.ts +115 -0
- package/src/it/mod.ts +2 -0
- package/src/jp/cn.ts +91 -0
- package/src/jp/mod.ts +2 -0
- package/src/jp/mynumber.ts +103 -0
- package/src/kr/brn.ts +101 -0
- package/src/kr/mod.ts +2 -0
- package/src/kr/rrn.ts +170 -0
- package/src/kw/civil.ts +144 -0
- package/src/kw/mod.ts +1 -0
- package/src/kz/iin.ts +183 -0
- package/src/kz/mod.ts +1 -0
- package/src/lei.ts +98 -0
- package/src/li/mod.ts +1 -0
- package/src/li/peid.ts +66 -0
- package/src/lk/mod.ts +1 -0
- package/src/lk/nic.ts +210 -0
- package/src/lt/asmens.ts +120 -0
- package/src/lt/mod.ts +2 -0
- package/src/lt/vat.ts +109 -0
- package/src/lu/mod.ts +1 -0
- package/src/lu/vat.ts +80 -0
- package/src/luhn.ts +72 -0
- package/src/lv/mod.ts +1 -0
- package/src/lv/vat.ts +139 -0
- package/src/ma/ice.ts +79 -0
- package/src/ma/mod.ts +1 -0
- package/src/mc/mod.ts +1 -0
- package/src/mc/tva.ts +74 -0
- package/src/md/idno.ts +86 -0
- package/src/md/mod.ts +1 -0
- package/src/me/mod.ts +1 -0
- package/src/me/pib.ts +79 -0
- package/src/mk/edb.ts +91 -0
- package/src/mk/mod.ts +1 -0
- package/src/mt/mod.ts +1 -0
- package/src/mt/vat.ts +88 -0
- package/src/mu/brn.ts +102 -0
- package/src/mu/mod.ts +1 -0
- package/src/mx/clabe.ts +111 -0
- package/src/mx/curp.ts +210 -0
- package/src/mx/mod.ts +3 -0
- package/src/mx/rfc.ts +144 -0
- package/src/my/mod.ts +1 -0
- package/src/my/nric.ts +235 -0
- package/src/ng/mod.ts +1 -0
- package/src/ng/nin.ts +72 -0
- package/src/ni/mod.ts +1 -0
- package/src/ni/ruc.ts +176 -0
- package/src/nl/bsn.ts +87 -0
- package/src/nl/kvk.ts +59 -0
- package/src/nl/mod.ts +3 -0
- package/src/nl/vat.ts +146 -0
- package/src/no/fodselsnummer.ts +192 -0
- package/src/no/mod.ts +3 -0
- package/src/no/mva.ts +73 -0
- package/src/no/orgnr.ts +79 -0
- package/src/nz/ird.ts +128 -0
- package/src/nz/mod.ts +1 -0
- package/src/pa/mod.ts +1 -0
- package/src/pa/ruc.ts +359 -0
- package/src/patterns.ts +252 -0
- package/src/pe/mod.ts +1 -0
- package/src/pe/ruc.ts +121 -0
- package/src/ph/mod.ts +1 -0
- package/src/ph/philid.ts +76 -0
- package/src/pk/cnic.ts +103 -0
- package/src/pk/mod.ts +1 -0
- package/src/pl/mod.ts +3 -0
- package/src/pl/nip.ts +96 -0
- package/src/pl/pesel.ts +153 -0
- package/src/pl/regon.ts +98 -0
- package/src/pt/cc.ts +106 -0
- package/src/pt/mod.ts +2 -0
- package/src/pt/vat.ts +93 -0
- package/src/ro/cnp.ts +171 -0
- package/src/ro/mod.ts +2 -0
- package/src/ro/vat.ts +94 -0
- package/src/rs/mod.ts +1 -0
- package/src/rs/pib.ts +83 -0
- package/src/ru/inn.ts +109 -0
- package/src/ru/mod.ts +1 -0
- package/src/se/mod.ts +3 -0
- package/src/se/orgnr.ts +81 -0
- package/src/se/personnummer.ts +180 -0
- package/src/se/vat.ts +92 -0
- package/src/sg/mod.ts +1 -0
- package/src/sg/uen.ts +267 -0
- package/src/si/emso.ts +152 -0
- package/src/si/mod.ts +2 -0
- package/src/si/vat.ts +108 -0
- package/src/sk/dic.ts +106 -0
- package/src/sk/ico.ts +39 -0
- package/src/sk/mod.ts +3 -0
- package/src/sk/rc.ts +31 -0
- package/src/th/mod.ts +1 -0
- package/src/th/tin.ts +102 -0
- package/src/tr/mod.ts +2 -0
- package/src/tr/tckimlik.ts +111 -0
- package/src/tr/vkn.ts +97 -0
- package/src/tw/mod.ts +1 -0
- package/src/tw/ubn.ts +108 -0
- package/src/types.ts +200 -0
- package/src/ua/edrpou.ts +103 -0
- package/src/ua/mod.ts +1 -0
- package/src/us/ein.ts +257 -0
- package/src/us/itin.ts +126 -0
- package/src/us/mod.ts +4 -0
- package/src/us/rtn.ts +126 -0
- package/src/us/ssn.ts +117 -0
- package/src/uy/mod.ts +1 -0
- package/src/uy/rut.ts +146 -0
- package/src/ve/mod.ts +1 -0
- package/src/ve/rif.ts +140 -0
- package/src/vn/mod.ts +1 -0
- package/src/vn/mst.ts +128 -0
- package/src/za/idnr.ts +157 -0
- package/src/za/mod.ts +1 -0
package/dist/ni/mod.d.ts
ADDED
package/dist/ni/mod.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import ruc from "./ruc.js";
|
|
3
|
+
//#region src/ni/mod.ts
|
|
4
|
+
var ni_exports = /* @__PURE__ */ __exportAll({ ruc: () => ruc });
|
|
5
|
+
//#endregion
|
|
6
|
+
export { ni_exports, ruc };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=mod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","names":[],"sources":["../../src/ni/mod.ts"],"sourcesContent":["export { default as ruc } from \"./ruc\";\n"],"mappings":""}
|
package/dist/ni/ruc.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ValidateResult, Validator } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/ni/ruc.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Compact: strip spaces, hyphens, and uppercase.
|
|
7
|
+
*/
|
|
8
|
+
declare const compact: (value: string) => string;
|
|
9
|
+
declare const validate: (value: string) => ValidateResult;
|
|
10
|
+
/**
|
|
11
|
+
* Format: insert hyphens as MMM-DDMMYY-NNNNL
|
|
12
|
+
* for natural persons. Legal entities are returned
|
|
13
|
+
* in compact form (JNNNNNNNNNNNNN); no documented
|
|
14
|
+
* segmentation exists for the J-prefix format.
|
|
15
|
+
*/
|
|
16
|
+
declare const format: (value: string) => string;
|
|
17
|
+
/** Generate a random valid Nicaraguan RUC (legal entity). */
|
|
18
|
+
declare const generate: () => string;
|
|
19
|
+
/** Nicaragua tax identification number. */
|
|
20
|
+
declare const ruc: Validator;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { compact, ruc as default, format, generate, validate };
|
|
23
|
+
//# sourceMappingURL=ruc.d.ts.map
|
package/dist/ni/ruc.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomDigits } from "../_util/generate.js";
|
|
3
|
+
import { err } from "../_util/result.js";
|
|
4
|
+
import { isdigits } from "../_util/strings.js";
|
|
5
|
+
//#region src/ni/ruc.ts
|
|
6
|
+
/**
|
|
7
|
+
* RUC (Registro Único de Contribuyente, Nicaragua
|
|
8
|
+
* tax number).
|
|
9
|
+
*
|
|
10
|
+
* For natural persons the RUC is the cédula de
|
|
11
|
+
* identidad: 14 characters structured as
|
|
12
|
+
* MMM-DDMMYY-NNNNL where:
|
|
13
|
+
* - MMM = municipality code (001–999)
|
|
14
|
+
* - DDMMYY = birth date
|
|
15
|
+
* - NNNN = sequential number
|
|
16
|
+
* - L = check letter (mod 23, ISO 7064)
|
|
17
|
+
*
|
|
18
|
+
* For legal entities (Personas Jurídicas) the RUC
|
|
19
|
+
* starts with "J" followed by 13 digits. No public
|
|
20
|
+
* check-digit algorithm is documented for the "J"
|
|
21
|
+
* format, so validation is format-only.
|
|
22
|
+
*
|
|
23
|
+
* The check letter for natural persons uses modulo 23
|
|
24
|
+
* with a 23-letter alphabet that excludes I, O, and Z
|
|
25
|
+
* to avoid confusion with digits.
|
|
26
|
+
*
|
|
27
|
+
* @see https://www.dgi.gob.ni/
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Check letter alphabet (mod 23). Excludes I, O, Z
|
|
31
|
+
* to prevent transcription errors.
|
|
32
|
+
*/
|
|
33
|
+
const CHECK_ALPHABET = "ABCDEFGHJKLMNPQRSTUVWXY";
|
|
34
|
+
/**
|
|
35
|
+
* Compact: strip spaces, hyphens, and uppercase.
|
|
36
|
+
*/
|
|
37
|
+
const compact = (value) => clean(value, " -").trim().toUpperCase();
|
|
38
|
+
/**
|
|
39
|
+
* Validate a birth date encoded as DDMMYY.
|
|
40
|
+
* Returns true if the date components are plausible.
|
|
41
|
+
*/
|
|
42
|
+
const isValidDate = (ddmmyy) => {
|
|
43
|
+
const day = Number(ddmmyy.slice(0, 2));
|
|
44
|
+
const month = Number(ddmmyy.slice(2, 4));
|
|
45
|
+
if (month < 1 || month > 12) return false;
|
|
46
|
+
if (day < 1 || day > 31) return false;
|
|
47
|
+
return true;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Calculate the check letter for a 13-digit body
|
|
51
|
+
* using modulo 23.
|
|
52
|
+
*/
|
|
53
|
+
const calcCheckLetter = (body) => {
|
|
54
|
+
let n = 0n;
|
|
55
|
+
for (const ch of body) n = n * 10n + BigInt(ch);
|
|
56
|
+
return CHECK_ALPHABET[Number(n % 23n)];
|
|
57
|
+
};
|
|
58
|
+
const validate = (value) => {
|
|
59
|
+
const v = compact(value);
|
|
60
|
+
if (v.length !== 14) return err("INVALID_LENGTH", "Nicaragua RUC must be 14 characters");
|
|
61
|
+
if (v[0] === "J") {
|
|
62
|
+
if (!isdigits(v.slice(1))) return err("INVALID_FORMAT", "Nicaragua legal entity RUC must be J followed by 13 digits");
|
|
63
|
+
return {
|
|
64
|
+
valid: true,
|
|
65
|
+
compact: v
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const body = v.slice(0, 13);
|
|
69
|
+
const check = v[13];
|
|
70
|
+
if (!isdigits(body)) return err("INVALID_FORMAT", "Nicaragua RUC body must contain only digits");
|
|
71
|
+
if (!CHECK_ALPHABET.includes(check)) return err("INVALID_FORMAT", "Nicaragua RUC check letter is invalid");
|
|
72
|
+
if (!isValidDate(body.slice(3, 9))) return err("INVALID_COMPONENT", "Nicaragua RUC contains an invalid birth date");
|
|
73
|
+
if (check !== calcCheckLetter(body)) return err("INVALID_CHECKSUM", "Nicaragua RUC check letter does not match");
|
|
74
|
+
return {
|
|
75
|
+
valid: true,
|
|
76
|
+
compact: v
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Format: insert hyphens as MMM-DDMMYY-NNNNL
|
|
81
|
+
* for natural persons. Legal entities are returned
|
|
82
|
+
* in compact form (JNNNNNNNNNNNNN); no documented
|
|
83
|
+
* segmentation exists for the J-prefix format.
|
|
84
|
+
*/
|
|
85
|
+
const format = (value) => {
|
|
86
|
+
const v = compact(value);
|
|
87
|
+
if (v[0] === "J") return `J-${v.slice(1)}`;
|
|
88
|
+
return `${v.slice(0, 3)}-${v.slice(3, 9)}-${v.slice(9)}`;
|
|
89
|
+
};
|
|
90
|
+
/** Generate a random valid Nicaraguan RUC (legal entity). */
|
|
91
|
+
const generate = () => "J" + randomDigits(13);
|
|
92
|
+
/** Nicaragua tax identification number. */
|
|
93
|
+
const ruc = {
|
|
94
|
+
name: "Tax Identification Number",
|
|
95
|
+
localName: "Registro Único de Contribuyente",
|
|
96
|
+
abbreviation: "RUC",
|
|
97
|
+
aliases: ["RUC"],
|
|
98
|
+
candidatePattern: "[JKME]\\d{13}",
|
|
99
|
+
country: "NI",
|
|
100
|
+
entityType: "any",
|
|
101
|
+
description: "Tax identifier issued by Nicaragua's DGI",
|
|
102
|
+
sourceUrl: "https://www.dgi.gob.ni/",
|
|
103
|
+
lengths: [14],
|
|
104
|
+
examples: ["6071904680001F", "2811505850012D"],
|
|
105
|
+
compact,
|
|
106
|
+
format,
|
|
107
|
+
validate,
|
|
108
|
+
generate
|
|
109
|
+
};
|
|
110
|
+
//#endregion
|
|
111
|
+
export { compact, ruc as default, format, generate, validate };
|
|
112
|
+
|
|
113
|
+
//# sourceMappingURL=ruc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruc.js","names":[],"sources":["../../src/ni/ruc.ts"],"sourcesContent":["/**\n * RUC (Registro Único de Contribuyente, Nicaragua\n * tax number).\n *\n * For natural persons the RUC is the cédula de\n * identidad: 14 characters structured as\n * MMM-DDMMYY-NNNNL where:\n * - MMM = municipality code (001–999)\n * - DDMMYY = birth date\n * - NNNN = sequential number\n * - L = check letter (mod 23, ISO 7064)\n *\n * For legal entities (Personas Jurídicas) the RUC\n * starts with \"J\" followed by 13 digits. No public\n * check-digit algorithm is documented for the \"J\"\n * format, so validation is format-only.\n *\n * The check letter for natural persons uses modulo 23\n * with a 23-letter alphabet that excludes I, O, and Z\n * to avoid confusion with digits.\n *\n * @see https://www.dgi.gob.ni/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/**\n * Check letter alphabet (mod 23). Excludes I, O, Z\n * to prevent transcription errors.\n */\nconst CHECK_ALPHABET = \"ABCDEFGHJKLMNPQRSTUVWXY\";\n\n/**\n * Compact: strip spaces, hyphens, and uppercase.\n */\nconst compact = (value: string): string =>\n clean(value, \" -\").trim().toUpperCase();\n\n/**\n * Validate a birth date encoded as DDMMYY.\n * Returns true if the date components are plausible.\n */\nconst isValidDate = (ddmmyy: string): boolean => {\n const day = Number(ddmmyy.slice(0, 2));\n const month = Number(ddmmyy.slice(2, 4));\n\n if (month < 1 || month > 12) return false;\n if (day < 1 || day > 31) return false;\n\n return true;\n};\n\n/**\n * Calculate the check letter for a 13-digit body\n * using modulo 23.\n */\nconst calcCheckLetter = (body: string): string => {\n let n = 0n;\n for (const ch of body) {\n n = n * 10n + BigInt(ch);\n }\n const idx = Number(n % 23n);\n // SAFETY: idx is always 0–22 (mod 23), and\n // CHECK_ALPHABET has exactly 23 characters.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return CHECK_ALPHABET[idx]!;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 14) {\n return err(\n \"INVALID_LENGTH\",\n \"Nicaragua RUC must be 14 characters\",\n );\n }\n\n // Legal entity: starts with J + 13 digits\n if (v[0] === \"J\") {\n if (!isdigits(v.slice(1))) {\n return err(\n \"INVALID_FORMAT\",\n \"Nicaragua legal entity RUC must be \" +\n \"J followed by 13 digits\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // Natural person: 13 digits + 1 letter\n const body = v.slice(0, 13);\n // SAFETY: length is validated as exactly 14 above.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const check = v[13]!;\n\n if (!isdigits(body)) {\n return err(\n \"INVALID_FORMAT\",\n \"Nicaragua RUC body must contain only digits\",\n );\n }\n\n if (!CHECK_ALPHABET.includes(check)) {\n return err(\n \"INVALID_FORMAT\",\n \"Nicaragua RUC check letter is invalid\",\n );\n }\n\n // Validate date portion (positions 3–8: DDMMYY)\n const datePart = body.slice(3, 9);\n if (!isValidDate(datePart)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Nicaragua RUC contains an invalid \" + \"birth date\",\n );\n }\n\n // Verify check letter\n const expected = calcCheckLetter(body);\n if (check !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Nicaragua RUC check letter does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\n/**\n * Format: insert hyphens as MMM-DDMMYY-NNNNL\n * for natural persons. Legal entities are returned\n * in compact form (JNNNNNNNNNNNNN); no documented\n * segmentation exists for the J-prefix format.\n */\nconst format = (value: string): string => {\n const v = compact(value);\n if (v[0] === \"J\") {\n return `J-${v.slice(1)}`;\n }\n return (\n `${v.slice(0, 3)}-${v.slice(3, 9)}` + `-${v.slice(9)}`\n );\n};\n\n/** Generate a random valid Nicaraguan RUC (legal entity). */\nconst generate = (): string => \"J\" + randomDigits(13);\n\n/** Nicaragua tax identification number. */\nconst ruc: Validator = {\n name: \"Tax Identification Number\",\n localName: \"Registro Único de Contribuyente\",\n abbreviation: \"RUC\",\n aliases: [\"RUC\"] as const,\n candidatePattern: \"[JKME]\\\\d{13}\",\n country: \"NI\",\n entityType: \"any\",\n description: \"Tax identifier issued by Nicaragua's DGI\",\n sourceUrl: \"https://www.dgi.gob.ni/\",\n lengths: [14] as const,\n examples: [\"6071904680001F\", \"2811505850012D\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ruc;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAM,iBAAiB;;;;AAKvB,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa;;;;;AAMzC,MAAM,eAAe,WAA4B;CAC/C,MAAM,MAAM,OAAO,OAAO,MAAM,GAAG,EAAE,CAAC;CACtC,MAAM,QAAQ,OAAO,OAAO,MAAM,GAAG,EAAE,CAAC;AAExC,KAAI,QAAQ,KAAK,QAAQ,GAAI,QAAO;AACpC,KAAI,MAAM,KAAK,MAAM,GAAI,QAAO;AAEhC,QAAO;;;;;;AAOT,MAAM,mBAAmB,SAAyB;CAChD,IAAI,IAAI;AACR,MAAK,MAAM,MAAM,KACf,KAAI,IAAI,MAAM,OAAO,GAAG;AAM1B,QAAO,eAJK,OAAO,IAAI,IAAI;;AAO7B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,sCACD;AAIH,KAAI,EAAE,OAAO,KAAK;AAChB,MAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CACvB,QAAO,IACL,kBACA,6DAED;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;CAIpC,MAAM,OAAO,EAAE,MAAM,GAAG,GAAG;CAG3B,MAAM,QAAQ,EAAE;AAEhB,KAAI,CAAC,SAAS,KAAK,CACjB,QAAO,IACL,kBACA,8CACD;AAGH,KAAI,CAAC,eAAe,SAAS,MAAM,CACjC,QAAO,IACL,kBACA,wCACD;AAKH,KAAI,CAAC,YADY,KAAK,MAAM,GAAG,EAAE,CACP,CACxB,QAAO,IACL,qBACA,+CACD;AAKH,KAAI,UADa,gBAAgB,KAAK,CAEpC,QAAO,IACL,oBACA,4CACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;;;;;;;AASpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,OAAO,IACX,QAAO,KAAK,EAAE,MAAM,EAAE;AAExB,QACE,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAA,GAAS,EAAE,MAAM,EAAE;;;AAKxD,MAAM,iBAAyB,MAAM,aAAa,GAAG;;AAGrD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,MAAM;CAChB,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,aAAa;CACb,WAAW;CACX,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,kBAAkB,iBAAiB;CAC9C;CACA;CACA;CACA;CACD"}
|
package/dist/nl/bsn.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ValidateResult, Validator } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/nl/bsn.d.ts
|
|
4
|
+
|
|
5
|
+
declare const compact: (value: string) => string;
|
|
6
|
+
declare const validate: (value: string) => ValidateResult;
|
|
7
|
+
declare const format: (value: string) => string;
|
|
8
|
+
/** Generate a random valid Dutch BSN. */
|
|
9
|
+
declare const generate: () => string;
|
|
10
|
+
/** Dutch Citizen Service Number. */
|
|
11
|
+
declare const bsn: Validator;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { compact, bsn as default, format, generate, validate };
|
|
14
|
+
//# sourceMappingURL=bsn.d.ts.map
|
package/dist/nl/bsn.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomDigits } from "../_util/generate.js";
|
|
3
|
+
import { err } from "../_util/result.js";
|
|
4
|
+
import { isdigits } from "../_util/strings.js";
|
|
5
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
|
+
//#region src/nl/bsn.ts
|
|
7
|
+
/**
|
|
8
|
+
* BSN (Burgerservicenummer).
|
|
9
|
+
*
|
|
10
|
+
* Dutch citizen service number. 9 digits (zero-padded)
|
|
11
|
+
* with a weighted checksum where the last digit has
|
|
12
|
+
* weight -1.
|
|
13
|
+
*
|
|
14
|
+
* @see https://www.government.nl/topics/personal-data/citizen-service-number-bsn
|
|
15
|
+
*/
|
|
16
|
+
const WEIGHTS = [
|
|
17
|
+
9,
|
|
18
|
+
8,
|
|
19
|
+
7,
|
|
20
|
+
6,
|
|
21
|
+
5,
|
|
22
|
+
4,
|
|
23
|
+
3,
|
|
24
|
+
2,
|
|
25
|
+
-1
|
|
26
|
+
];
|
|
27
|
+
const compact = (value) => clean(value, " -.").padStart(9, "0");
|
|
28
|
+
const validate = (value) => {
|
|
29
|
+
const v = compact(value);
|
|
30
|
+
if (v.length !== 9) return err("INVALID_LENGTH", "BSN must be exactly 9 digits");
|
|
31
|
+
if (!isdigits(v)) return err("INVALID_FORMAT", "BSN must contain only digits");
|
|
32
|
+
if (Number(v) === 0) return err("INVALID_FORMAT", "BSN cannot be all zeros");
|
|
33
|
+
if (weightedSum(v, WEIGHTS, 11) !== 0) return err("INVALID_CHECKSUM", "BSN check does not match");
|
|
34
|
+
return {
|
|
35
|
+
valid: true,
|
|
36
|
+
compact: v
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
const format = (value) => compact(value);
|
|
40
|
+
/** Generate a random valid Dutch BSN. */
|
|
41
|
+
const generate = () => {
|
|
42
|
+
for (;;) {
|
|
43
|
+
const c = randomDigits(9);
|
|
44
|
+
if (validate(c).valid) return c;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/** Dutch Citizen Service Number. */
|
|
48
|
+
const bsn = {
|
|
49
|
+
name: "Dutch Citizen Service Number",
|
|
50
|
+
localName: "Burgerservicenummer",
|
|
51
|
+
abbreviation: "BSN",
|
|
52
|
+
aliases: [
|
|
53
|
+
"burgerservicenummer",
|
|
54
|
+
"BSN",
|
|
55
|
+
"sofinummer"
|
|
56
|
+
],
|
|
57
|
+
candidatePattern: "\\d{9}",
|
|
58
|
+
country: "NL",
|
|
59
|
+
entityType: "person",
|
|
60
|
+
sourceUrl: "https://www.government.nl/topics/personal-data/citizen-service-number-bsn",
|
|
61
|
+
examples: ["111222333"],
|
|
62
|
+
compact,
|
|
63
|
+
format,
|
|
64
|
+
validate,
|
|
65
|
+
generate
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { compact, bsn as default, format, generate, validate };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=bsn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bsn.js","names":[],"sources":["../../src/nl/bsn.ts"],"sourcesContent":["/**\n * BSN (Burgerservicenummer).\n *\n * Dutch citizen service number. 9 digits (zero-padded)\n * with a weighted checksum where the last digit has\n * weight -1.\n *\n * @see https://www.government.nl/topics/personal-data/citizen-service-number-bsn\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\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst WEIGHTS = [9, 8, 7, 6, 5, 4, 3, 2, -1] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").padStart(9, \"0\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"BSN must be exactly 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"BSN must contain only digits\",\n );\n }\n\n if (Number(v) === 0) {\n return err(\"INVALID_FORMAT\", \"BSN cannot be all zeros\");\n }\n\n const sum = weightedSum(v, WEIGHTS, 11);\n if (sum !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"BSN check does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Dutch BSN. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Dutch Citizen Service Number. */\nconst bsn: Validator = {\n name: \"Dutch Citizen Service Number\",\n localName: \"Burgerservicenummer\",\n abbreviation: \"BSN\",\n aliases: [\n \"burgerservicenummer\",\n \"BSN\",\n \"sofinummer\",\n ] as const,\n candidatePattern: \"\\\\d{9}\",\n country: \"NL\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.government.nl/topics/personal-data/citizen-service-number-bsn\",\n examples: [\"111222333\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default bsn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAE5C,MAAM,WAAW,UACf,MAAM,OAAO,MAAM,CAAC,SAAS,GAAG,IAAI;AAEtC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,+BACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;AAGH,KAAI,OAAO,EAAE,KAAK,EAChB,QAAO,IAAI,kBAAkB,0BAA0B;AAIzD,KADY,YAAY,GAAG,SAAS,GAAG,KAC3B,EACV,QAAO,IACL,oBACA,2BACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,IAAI,aAAa,EAAE;AACzB,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;CACD"}
|
package/dist/nl/kvk.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ValidateResult, Validator } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/nl/kvk.d.ts
|
|
4
|
+
/** Generate a random valid Dutch KvK number. */
|
|
5
|
+
declare const generate: () => string;
|
|
6
|
+
declare const compact: (value: string) => string;
|
|
7
|
+
declare const validate: (value: string) => ValidateResult;
|
|
8
|
+
declare const format: (value: string) => string;
|
|
9
|
+
/** Dutch Chamber of Commerce Number. */
|
|
10
|
+
declare const kvk: Validator;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { compact, kvk as default, format, generate, validate };
|
|
13
|
+
//# sourceMappingURL=kvk.d.ts.map
|
package/dist/nl/kvk.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomDigits } from "../_util/generate.js";
|
|
3
|
+
import { err } from "../_util/result.js";
|
|
4
|
+
import { isdigits } from "../_util/strings.js";
|
|
5
|
+
//#region src/nl/kvk.ts
|
|
6
|
+
/**
|
|
7
|
+
* KvK-nummer (Dutch Chamber of Commerce number).
|
|
8
|
+
*
|
|
9
|
+
* 8 digits. Format-only validation; no checksum.
|
|
10
|
+
*
|
|
11
|
+
* @see https://www.kvk.nl/
|
|
12
|
+
*/
|
|
13
|
+
/** Generate a random valid Dutch KvK number. */
|
|
14
|
+
const generate = () => randomDigits(8);
|
|
15
|
+
const compact = (value) => clean(value, " -/.");
|
|
16
|
+
const validate = (value) => {
|
|
17
|
+
const v = compact(value);
|
|
18
|
+
if (v.length !== 8) return err("INVALID_LENGTH", "Dutch KvK number must be 8 digits");
|
|
19
|
+
if (!isdigits(v)) return err("INVALID_FORMAT", "Dutch KvK number must contain only digits");
|
|
20
|
+
return {
|
|
21
|
+
valid: true,
|
|
22
|
+
compact: v
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
const format = (value) => compact(value);
|
|
26
|
+
/** Dutch Chamber of Commerce Number. */
|
|
27
|
+
const kvk = {
|
|
28
|
+
name: "Dutch Chamber of Commerce Number",
|
|
29
|
+
localName: "KvK-nummer",
|
|
30
|
+
abbreviation: "KvK",
|
|
31
|
+
aliases: ["KVK-nummer", "Kamer van Koophandel"],
|
|
32
|
+
candidatePattern: "\\d{8}",
|
|
33
|
+
country: "NL",
|
|
34
|
+
entityType: "company",
|
|
35
|
+
sourceUrl: "https://www.kvk.nl/",
|
|
36
|
+
examples: ["12345678"],
|
|
37
|
+
compact,
|
|
38
|
+
format,
|
|
39
|
+
validate,
|
|
40
|
+
generate
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { compact, kvk as default, format, generate, validate };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=kvk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kvk.js","names":[],"sources":["../../src/nl/kvk.ts"],"sourcesContent":["/** Generate a random valid Dutch KvK number. */\nconst generate = (): string => randomDigits(8);\n\n/**\n * KvK-nummer (Dutch Chamber of Commerce number).\n *\n * 8 digits. Format-only validation; no checksum.\n *\n * @see https://www.kvk.nl/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\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 \"Dutch KvK number must be 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch KvK number must contain only digits\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Dutch Chamber of Commerce Number. */\nconst kvk: Validator = {\n name: \"Dutch Chamber of Commerce Number\",\n localName: \"KvK-nummer\",\n abbreviation: \"KvK\",\n aliases: [\"KVK-nummer\", \"Kamer van Koophandel\"] as const,\n candidatePattern: \"\\\\d{8}\",\n country: \"NL\",\n entityType: \"company\",\n sourceUrl: \"https://www.kvk.nl/\",\n examples: [\"12345678\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default kvk;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;AACA,MAAM,iBAAyB,aAAa,EAAE;AAiB9C,MAAM,WAAW,UACf,MAAM,OAAO,OAAO;AAEtB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,oCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,4CACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,cAAc,uBAAuB;CAC/C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;CACD"}
|
package/dist/nl/mod.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import bsn from "./bsn.js";
|
|
3
|
+
import kvk from "./kvk.js";
|
|
4
|
+
import vat from "./vat.js";
|
|
5
|
+
|
|
6
|
+
//#region src/nl/mod.d.ts
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
export { bsn, kvk, mod_d_exports, vat };
|
|
10
|
+
//# sourceMappingURL=mod.d.ts.map
|
package/dist/nl/mod.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import vat from "./vat.js";
|
|
3
|
+
import bsn from "./bsn.js";
|
|
4
|
+
import kvk from "./kvk.js";
|
|
5
|
+
//#region src/nl/mod.ts
|
|
6
|
+
var nl_exports = /* @__PURE__ */ __exportAll({
|
|
7
|
+
bsn: () => bsn,
|
|
8
|
+
kvk: () => kvk,
|
|
9
|
+
vat: () => vat
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { bsn, kvk, nl_exports, vat };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=mod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","names":[],"sources":["../../src/nl/mod.ts"],"sourcesContent":["export { default as bsn } from \"./bsn\";\nexport { default as kvk } from \"./kvk\";\nexport { default as vat } from \"./vat\";\n"],"mappings":""}
|
package/dist/nl/vat.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ValidateResult, Validator } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/nl/vat.d.ts
|
|
4
|
+
|
|
5
|
+
declare const compact: (value: string) => string;
|
|
6
|
+
declare const validate: (value: string) => ValidateResult;
|
|
7
|
+
declare const format: (value: string) => string;
|
|
8
|
+
/** Generate a random valid Dutch VAT number. */
|
|
9
|
+
declare const generate: () => string;
|
|
10
|
+
/** Dutch VAT Number. */
|
|
11
|
+
declare const vat: Validator;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { compact, vat as default, format, generate, validate };
|
|
14
|
+
//# sourceMappingURL=vat.d.ts.map
|
package/dist/nl/vat.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomDigits } from "../_util/generate.js";
|
|
3
|
+
import { err } from "../_util/result.js";
|
|
4
|
+
import { isdigits } from "../_util/strings.js";
|
|
5
|
+
//#region src/nl/vat.ts
|
|
6
|
+
/**
|
|
7
|
+
* BTW (Dutch VAT number).
|
|
8
|
+
*
|
|
9
|
+
* 12 characters: 9 digits + "B" + 2 digits.
|
|
10
|
+
* Mod 97 check: convert "NL" + number to numeric
|
|
11
|
+
* (N=23, L=21, B=11), mod 97 === 1.
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.vatify.eu/netherlands-vat-number.html
|
|
14
|
+
* @see https://business.gov.nl/regulations/using-checking-vat-numbers/
|
|
15
|
+
*/
|
|
16
|
+
const compact = (value) => {
|
|
17
|
+
let v = clean(value, " -/.");
|
|
18
|
+
if (v.startsWith("NL") || v.startsWith("nl")) v = v.slice(2);
|
|
19
|
+
v = v.toUpperCase();
|
|
20
|
+
const bIdx = v.indexOf("B");
|
|
21
|
+
if (bIdx > 0 && bIdx < 9) v = v.slice(0, bIdx).padStart(9, "0") + v.slice(bIdx);
|
|
22
|
+
return v;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Compute mod 97 of a string containing digits and
|
|
26
|
+
* uppercase letters (A=10, B=11, ..., Z=35).
|
|
27
|
+
*/
|
|
28
|
+
const mod97 = (value) => {
|
|
29
|
+
let remainder = 0;
|
|
30
|
+
for (const ch of value) {
|
|
31
|
+
const code = ch.charCodeAt(0);
|
|
32
|
+
if (code >= 48 && code <= 57) remainder = (remainder * 10 + (code - 48)) % 97;
|
|
33
|
+
else if (code >= 65 && code <= 90) {
|
|
34
|
+
const num = code - 55;
|
|
35
|
+
remainder = (remainder * 100 + num) % 97;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return remainder;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Check if a 9-digit string is a valid BSN (Dutch citizen
|
|
42
|
+
* identification number). Weights [9,8,7,6,5,4,3,2,-1],
|
|
43
|
+
* sum % 11 === 0.
|
|
44
|
+
*/
|
|
45
|
+
const bsnValid = (num) => {
|
|
46
|
+
if (!isdigits(num) || num.length !== 9) return false;
|
|
47
|
+
if (Number.parseInt(num, 10) <= 0) return false;
|
|
48
|
+
let sum = 0;
|
|
49
|
+
for (let i = 0; i < 8; i++) sum += (9 - i) * Number(num[i]);
|
|
50
|
+
sum -= Number(num[8]);
|
|
51
|
+
return sum % 11 === 0;
|
|
52
|
+
};
|
|
53
|
+
const validate = (value) => {
|
|
54
|
+
const v = compact(value);
|
|
55
|
+
if (v.length !== 12) return err("INVALID_LENGTH", "Dutch VAT number must be 12 characters");
|
|
56
|
+
if (!isdigits(v.slice(0, 9))) return err("INVALID_FORMAT", "Dutch VAT number must start with 9 digits");
|
|
57
|
+
if (v[9] !== "B") return err("INVALID_COMPONENT", "Dutch VAT number digit 10 must be B");
|
|
58
|
+
if (!isdigits(v.slice(10, 12))) return err("INVALID_FORMAT", "Dutch VAT number must end with 2 digits");
|
|
59
|
+
if (Number.parseInt(v.slice(0, 9), 10) <= 0) return err("INVALID_FORMAT", "Dutch VAT number first 9 digits must be > 0");
|
|
60
|
+
if (Number.parseInt(v.slice(10, 12), 10) <= 0) return err("INVALID_FORMAT", "Dutch VAT number last 2 digits must be > 0");
|
|
61
|
+
if (!bsnValid(v.slice(0, 9)) && mod97(`NL${v}`) !== 1) return err("INVALID_CHECKSUM", "Dutch VAT number checksum failed");
|
|
62
|
+
return {
|
|
63
|
+
valid: true,
|
|
64
|
+
compact: v
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
const format = (value) => `NL${compact(value)}`;
|
|
68
|
+
/** Generate a random valid Dutch VAT number. */
|
|
69
|
+
const generate = () => {
|
|
70
|
+
for (;;) {
|
|
71
|
+
const c = randomDigits(9) + "B" + randomDigits(2);
|
|
72
|
+
if (validate(c).valid) return c;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
/** Dutch VAT Number. */
|
|
76
|
+
const vat = {
|
|
77
|
+
name: "Dutch VAT Number",
|
|
78
|
+
localName: "BTW-identificatienummer",
|
|
79
|
+
abbreviation: "BTW",
|
|
80
|
+
aliases: ["BTW-nummer", "BTW-id"],
|
|
81
|
+
candidatePattern: "NL\\d{9}B\\d{2}",
|
|
82
|
+
country: "NL",
|
|
83
|
+
entityType: "company",
|
|
84
|
+
sourceUrl: "https://www.belastingdienst.nl/",
|
|
85
|
+
examples: ["123456789B13"],
|
|
86
|
+
compact,
|
|
87
|
+
format,
|
|
88
|
+
validate,
|
|
89
|
+
generate
|
|
90
|
+
};
|
|
91
|
+
//#endregion
|
|
92
|
+
export { compact, vat as default, format, generate, validate };
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=vat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/nl/vat.ts"],"sourcesContent":["/**\n * BTW (Dutch VAT number).\n *\n * 12 characters: 9 digits + \"B\" + 2 digits.\n * Mod 97 check: convert \"NL\" + number to numeric\n * (N=23, L=21, B=11), mod 97 === 1.\n *\n * @see https://www.vatify.eu/netherlands-vat-number.html\n * @see https://business.gov.nl/regulations/using-checking-vat-numbers/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"NL\") || v.startsWith(\"nl\")) {\n v = v.slice(2);\n }\n v = v.toUpperCase();\n // Zero-pad numeric part to 9 digits if B is found\n const bIdx = v.indexOf(\"B\");\n if (bIdx > 0 && bIdx < 9) {\n v = v.slice(0, bIdx).padStart(9, \"0\") + v.slice(bIdx);\n }\n return v;\n};\n\n/**\n * Compute mod 97 of a string containing digits and\n * uppercase letters (A=10, B=11, ..., Z=35).\n */\nconst mod97 = (value: string): number => {\n let remainder = 0;\n for (const ch of value) {\n const code = ch.charCodeAt(0);\n if (code >= 48 && code <= 57) {\n // Digit\n remainder = (remainder * 10 + (code - 48)) % 97;\n } else if (code >= 65 && code <= 90) {\n // Letter: two decimal digits (A=10, ..., Z=35)\n const num = code - 55;\n remainder = (remainder * 100 + num) % 97;\n }\n }\n return remainder;\n};\n\n/**\n * Check if a 9-digit string is a valid BSN (Dutch citizen\n * identification number). Weights [9,8,7,6,5,4,3,2,-1],\n * sum % 11 === 0.\n */\nconst bsnValid = (num: string): boolean => {\n if (!isdigits(num) || num.length !== 9) return false;\n if (Number.parseInt(num, 10) <= 0) return false;\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n sum += (9 - i) * Number(num[i]);\n }\n sum -= Number(num[8]);\n return sum % 11 === 0;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"Dutch VAT number must be 12 characters\",\n );\n }\n if (!isdigits(v.slice(0, 9))) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number must start with 9 digits\",\n );\n }\n if (v[9] !== \"B\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Dutch VAT number digit 10 must be B\",\n );\n }\n if (!isdigits(v.slice(10, 12))) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number must end with 2 digits\",\n );\n }\n if (Number.parseInt(v.slice(0, 9), 10) <= 0) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number first 9 digits must be > 0\",\n );\n }\n if (Number.parseInt(v.slice(10, 12), 10) <= 0) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number last 2 digits must be > 0\",\n );\n }\n // Valid if BSN check passes OR mod 97 check passes\n if (!bsnValid(v.slice(0, 9)) && mod97(`NL${v}`) !== 1) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Dutch VAT number checksum failed\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `NL${compact(value)}`;\n\n/** Generate a random valid Dutch VAT number. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9) + \"B\" + randomDigits(2);\n if (validate(c).valid) return c;\n }\n};\n\n/** Dutch VAT Number. */\nconst vat: Validator = {\n name: \"Dutch VAT Number\",\n localName: \"BTW-identificatienummer\",\n abbreviation: \"BTW\",\n aliases: [\"BTW-nummer\", \"BTW-id\"] as const,\n candidatePattern: \"NL\\\\d{9}B\\\\d{2}\",\n country: \"NL\",\n entityType: \"company\",\n sourceUrl: \"https://www.belastingdienst.nl/\",\n examples: [\"123456789B13\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,OAAO;AAC5B,KAAI,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,CAC1C,KAAI,EAAE,MAAM,EAAE;AAEhB,KAAI,EAAE,aAAa;CAEnB,MAAM,OAAO,EAAE,QAAQ,IAAI;AAC3B,KAAI,OAAO,KAAK,OAAO,EACrB,KAAI,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,MAAM,KAAK;AAEvD,QAAO;;;;;;AAOT,MAAM,SAAS,UAA0B;CACvC,IAAI,YAAY;AAChB,MAAK,MAAM,MAAM,OAAO;EACtB,MAAM,OAAO,GAAG,WAAW,EAAE;AAC7B,MAAI,QAAQ,MAAM,QAAQ,GAExB,cAAa,YAAY,MAAM,OAAO,OAAO;WACpC,QAAQ,MAAM,QAAQ,IAAI;GAEnC,MAAM,MAAM,OAAO;AACnB,gBAAa,YAAY,MAAM,OAAO;;;AAG1C,QAAO;;;;;;;AAQT,MAAM,YAAY,QAAyB;AACzC,KAAI,CAAC,SAAS,IAAI,IAAI,IAAI,WAAW,EAAG,QAAO;AAC/C,KAAI,OAAO,SAAS,KAAK,GAAG,IAAI,EAAG,QAAO;CAC1C,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,SAAQ,IAAI,KAAK,OAAO,IAAI,GAAG;AAEjC,QAAO,OAAO,IAAI,GAAG;AACrB,QAAO,MAAM,OAAO;;AAGtB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,yCACD;AAEH,KAAI,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,CAC1B,QAAO,IACL,kBACA,4CACD;AAEH,KAAI,EAAE,OAAO,IACX,QAAO,IACL,qBACA,sCACD;AAEH,KAAI,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,CAAC,CAC5B,QAAO,IACL,kBACA,0CACD;AAEH,KAAI,OAAO,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,IAAI,EACxC,QAAO,IACL,kBACA,8CACD;AAEH,KAAI,OAAO,SAAS,EAAE,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAC1C,QAAO,IACL,kBACA,6CACD;AAGH,KAAI,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,MAAM,KAAK,IAAI,KAAK,EAClD,QAAO,IACL,oBACA,mCACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UACd,KAAK,QAAQ,MAAM;;AAGrB,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,IAAI,aAAa,EAAE,GAAG,MAAM,aAAa,EAAE;AACjD,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,cAAc,SAAS;CACjC,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,eAAe;CAC1B;CACA;CACA;CACA;CACD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ParsedPersonId, ValidateResult, Validator } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/no/fodselsnummer.d.ts
|
|
4
|
+
|
|
5
|
+
declare const compact: (value: string) => string;
|
|
6
|
+
declare const validate: (value: string) => ValidateResult;
|
|
7
|
+
declare const format: (value: string) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Extract birth date and gender from a Norwegian
|
|
10
|
+
* birth number. Returns null if the value is not
|
|
11
|
+
* valid.
|
|
12
|
+
*/
|
|
13
|
+
declare const parse: (value: string) => ParsedPersonId | null;
|
|
14
|
+
/** Generate a random valid Norwegian birth number. */
|
|
15
|
+
declare const generate: () => string;
|
|
16
|
+
/** Norwegian Birth Number. */
|
|
17
|
+
declare const fodselsnummer: Validator;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { compact, fodselsnummer as default, format, generate, parse, validate };
|
|
20
|
+
//# sourceMappingURL=fodselsnummer.d.ts.map
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
3
|
+
import { err } from "../_util/result.js";
|
|
4
|
+
import { isdigits } from "../_util/strings.js";
|
|
5
|
+
import { isValidDate } from "../_util/date.js";
|
|
6
|
+
//#region src/no/fodselsnummer.ts
|
|
7
|
+
/**
|
|
8
|
+
* Fødselsnummer (Norwegian birth number).
|
|
9
|
+
*
|
|
10
|
+
* 11 digits: DDMMYY + 3-digit individual number + 2
|
|
11
|
+
* check digits. Supports D-numbers (day + 40) and
|
|
12
|
+
* H-numbers (month + 40).
|
|
13
|
+
*
|
|
14
|
+
* @see https://www.skatteetaten.no/
|
|
15
|
+
*/
|
|
16
|
+
const WEIGHTS_D1 = [
|
|
17
|
+
3,
|
|
18
|
+
7,
|
|
19
|
+
6,
|
|
20
|
+
1,
|
|
21
|
+
8,
|
|
22
|
+
9,
|
|
23
|
+
4,
|
|
24
|
+
5,
|
|
25
|
+
2
|
|
26
|
+
];
|
|
27
|
+
const WEIGHTS_D2 = [
|
|
28
|
+
5,
|
|
29
|
+
4,
|
|
30
|
+
3,
|
|
31
|
+
2,
|
|
32
|
+
7,
|
|
33
|
+
6,
|
|
34
|
+
5,
|
|
35
|
+
4,
|
|
36
|
+
3,
|
|
37
|
+
2
|
|
38
|
+
];
|
|
39
|
+
const compact = (value) => clean(value, " -");
|
|
40
|
+
const getCentury = (yy, individual) => {
|
|
41
|
+
if (individual >= 0 && individual <= 499) return 1900;
|
|
42
|
+
if (individual >= 500 && individual <= 749 && yy >= 54) return 1800;
|
|
43
|
+
if (individual >= 500 && individual <= 999 && yy < 40) return 2e3;
|
|
44
|
+
if (individual >= 900 && individual <= 999 && yy >= 40) return 1900;
|
|
45
|
+
};
|
|
46
|
+
const checkDigit = (v, weights) => {
|
|
47
|
+
let sum = 0;
|
|
48
|
+
for (let i = 0; i < weights.length; i++) sum += Number(v.charAt(i)) * (weights[i] ?? 0);
|
|
49
|
+
const remainder = (11 - sum % 11) % 11;
|
|
50
|
+
if (remainder === 10) return void 0;
|
|
51
|
+
return remainder;
|
|
52
|
+
};
|
|
53
|
+
const validate = (value) => {
|
|
54
|
+
const v = compact(value);
|
|
55
|
+
if (v.length !== 11) return err("INVALID_LENGTH", "Norwegian birth number must be 11 digits");
|
|
56
|
+
if (!isdigits(v)) return err("INVALID_FORMAT", "Norwegian birth number must contain only digits");
|
|
57
|
+
const d1 = checkDigit(v, WEIGHTS_D1);
|
|
58
|
+
if (d1 === void 0 || d1 !== Number(v[9])) return err("INVALID_CHECKSUM", "Norwegian birth number check digit 1 mismatch");
|
|
59
|
+
const d2 = checkDigit(v, WEIGHTS_D2);
|
|
60
|
+
if (d2 === void 0 || d2 !== Number(v[10])) return err("INVALID_CHECKSUM", "Norwegian birth number check digit 2 mismatch");
|
|
61
|
+
let dd = Number(v.slice(0, 2));
|
|
62
|
+
let mm = Number(v.slice(2, 4));
|
|
63
|
+
const yy = Number(v.slice(4, 6));
|
|
64
|
+
const individual = Number(v.slice(6, 9));
|
|
65
|
+
if (dd > 40) dd -= 40;
|
|
66
|
+
if (mm > 40) mm -= 40;
|
|
67
|
+
const century = getCentury(yy, individual);
|
|
68
|
+
if (century === void 0) return err("INVALID_COMPONENT", "Norwegian birth number has invalid individual/century combination");
|
|
69
|
+
const year = century + yy;
|
|
70
|
+
if (!isValidDate(year, mm, dd)) return err("INVALID_COMPONENT", "Norwegian birth number contains an invalid date");
|
|
71
|
+
if (new Date(year, mm - 1, dd) > /* @__PURE__ */ new Date()) return err("INVALID_COMPONENT", "Birth date is in the future");
|
|
72
|
+
return {
|
|
73
|
+
valid: true,
|
|
74
|
+
compact: v
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
const format = (value) => {
|
|
78
|
+
const v = compact(value);
|
|
79
|
+
return `${v.slice(0, 6)} ${v.slice(6)}`;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Extract birth date and gender from a Norwegian
|
|
83
|
+
* birth number. Returns null if the value is not
|
|
84
|
+
* valid.
|
|
85
|
+
*/
|
|
86
|
+
const parse = (value) => {
|
|
87
|
+
const result = validate(value);
|
|
88
|
+
if (!result.valid) return null;
|
|
89
|
+
const v = result.compact;
|
|
90
|
+
let dd = Number(v.slice(0, 2));
|
|
91
|
+
let mm = Number(v.slice(2, 4));
|
|
92
|
+
const yy = Number(v.slice(4, 6));
|
|
93
|
+
const individual = Number(v.slice(6, 9));
|
|
94
|
+
if (dd > 40) dd -= 40;
|
|
95
|
+
if (mm > 40) mm -= 40;
|
|
96
|
+
const century = getCentury(yy, individual);
|
|
97
|
+
if (century === void 0) return null;
|
|
98
|
+
const year = century + yy;
|
|
99
|
+
return {
|
|
100
|
+
birthDate: new Date(year, mm - 1, dd),
|
|
101
|
+
gender: individual % 2 === 0 ? "female" : "male"
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
/** Generate a random valid Norwegian birth number. */
|
|
105
|
+
const generate = () => {
|
|
106
|
+
for (;;) {
|
|
107
|
+
const dd = String(randomInt(1, 28)).padStart(2, "0");
|
|
108
|
+
const mm = String(randomInt(1, 12)).padStart(2, "0");
|
|
109
|
+
const yy = String(randomInt(50, 99)).padStart(2, "0");
|
|
110
|
+
const ind = String(randomInt(0, 499)).padStart(3, "0");
|
|
111
|
+
const c = dd + mm + yy + ind + randomDigits(2);
|
|
112
|
+
if (validate(c).valid) return c;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
/** Norwegian Birth Number. */
|
|
116
|
+
const fodselsnummer = {
|
|
117
|
+
name: "Norwegian Birth Number",
|
|
118
|
+
localName: "Fødselsnummer",
|
|
119
|
+
abbreviation: "Fødselsnr",
|
|
120
|
+
aliases: ["fødselsnummer", "personnummer"],
|
|
121
|
+
candidatePattern: "\\d{11}",
|
|
122
|
+
country: "NO",
|
|
123
|
+
entityType: "person",
|
|
124
|
+
sourceUrl: "https://www.skatteetaten.no/",
|
|
125
|
+
examples: ["15108695088"],
|
|
126
|
+
compact,
|
|
127
|
+
format,
|
|
128
|
+
validate,
|
|
129
|
+
generate
|
|
130
|
+
};
|
|
131
|
+
//#endregion
|
|
132
|
+
export { compact, fodselsnummer as default, format, generate, parse, validate };
|
|
133
|
+
|
|
134
|
+
//# sourceMappingURL=fodselsnummer.js.map
|