@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/se/orgnr.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomDigits } from "../_util/generate.js";
|
|
3
|
+
import { err } from "../_util/result.js";
|
|
4
|
+
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
5
|
+
import { isdigits } from "../_util/strings.js";
|
|
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
|
+
const compact = (value) => clean(value, " -");
|
|
16
|
+
const validate = (value) => {
|
|
17
|
+
const v = compact(value);
|
|
18
|
+
if (v.length !== 10) return err("INVALID_LENGTH", "Swedish Organisationsnummer must be 10 digits");
|
|
19
|
+
if (!isdigits(v)) return err("INVALID_FORMAT", "Swedish Organisationsnummer must contain only digits");
|
|
20
|
+
if (!luhnValidate(v)) return err("INVALID_CHECKSUM", "Swedish Organisationsnummer Luhn check failed");
|
|
21
|
+
return {
|
|
22
|
+
valid: true,
|
|
23
|
+
compact: v
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
const format = (value) => {
|
|
27
|
+
const v = compact(value);
|
|
28
|
+
return `${v.slice(0, 6)}-${v.slice(6)}`;
|
|
29
|
+
};
|
|
30
|
+
/** Generate a random valid Swedish org number. */
|
|
31
|
+
const generate = () => {
|
|
32
|
+
const p = randomDigits(9);
|
|
33
|
+
const cs = luhnChecksum(p + "0");
|
|
34
|
+
return p + String((10 - cs) % 10);
|
|
35
|
+
};
|
|
36
|
+
/** Swedish Organization Number. */
|
|
37
|
+
const orgnr = {
|
|
38
|
+
name: "Swedish Organization Number",
|
|
39
|
+
localName: "Organisationsnummer",
|
|
40
|
+
abbreviation: "Orgnr",
|
|
41
|
+
aliases: [
|
|
42
|
+
"organisationsnummer",
|
|
43
|
+
"org.nr",
|
|
44
|
+
"org nr"
|
|
45
|
+
],
|
|
46
|
+
candidatePattern: "\\d{6}-\\d{4}",
|
|
47
|
+
country: "SE",
|
|
48
|
+
entityType: "company",
|
|
49
|
+
sourceUrl: "https://www.skatteverket.se/",
|
|
50
|
+
examples: ["1234567897"],
|
|
51
|
+
compact,
|
|
52
|
+
format,
|
|
53
|
+
validate,
|
|
54
|
+
generate
|
|
55
|
+
};
|
|
56
|
+
//#endregion
|
|
57
|
+
export { compact, orgnr as default, format, generate, validate };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=orgnr.js.map
|
|
@@ -0,0 +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\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 !== 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: Validator = {\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 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":";;;;;;;;;;;;;;AAoBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,gDACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,uDACD;AAEH,KAAI,CAAC,aAAa,EAAE,CAClB,QAAO,IACL,oBACA,gDACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE;;;AAIvC,MAAM,iBAAyB;CAC7B,MAAM,IAAI,aAAa,EAAE;CACzB,MAAM,KAAK,aAAa,IAAI,IAAI;AAChC,QAAO,IAAI,QAAQ,KAAK,MAAM,GAAG;;;AAInC,MAAM,QAAmB;CACvB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;CACD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ParsedPersonId, ValidateResult, Validator } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/se/personnummer.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Match python-stdnum's compact: preserve the '-' or '+'
|
|
7
|
+
* separator at position -5, and strip any others.
|
|
8
|
+
*/
|
|
9
|
+
declare const compact: (value: string) => string;
|
|
10
|
+
declare const validate: (value: string) => ValidateResult;
|
|
11
|
+
declare const format: (value: string) => string;
|
|
12
|
+
/**
|
|
13
|
+
* Extract birth date and gender from a Personnummer.
|
|
14
|
+
* Returns null if the value is not valid.
|
|
15
|
+
*/
|
|
16
|
+
declare const parse: (value: string) => ParsedPersonId | null;
|
|
17
|
+
/** Generate a random valid Swedish personnummer. */
|
|
18
|
+
declare const generate: () => string;
|
|
19
|
+
/** Swedish Personal Identity Number. */
|
|
20
|
+
declare const personnummer: Validator;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { compact, personnummer as default, format, generate, parse, validate };
|
|
23
|
+
//# sourceMappingURL=personnummer.d.ts.map
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomInt } from "../_util/generate.js";
|
|
3
|
+
import { err } from "../_util/result.js";
|
|
4
|
+
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
5
|
+
import { isdigits } from "../_util/strings.js";
|
|
6
|
+
import { isValidDate } from "../_util/date.js";
|
|
7
|
+
//#region src/se/personnummer.ts
|
|
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
|
+
* Match python-stdnum's compact: preserve the '-' or '+'
|
|
19
|
+
* separator at position -5, and strip any others.
|
|
20
|
+
*/
|
|
21
|
+
const compact = (value) => {
|
|
22
|
+
let v = clean(value, " :");
|
|
23
|
+
if ((v.length === 10 || v.length === 12) && v[v.length - 5] !== "-" && v[v.length - 5] !== "+") v = `${v.slice(0, -4)}-${v.slice(-4)}`;
|
|
24
|
+
return `${v.slice(0, -5).replace(/-/g, "").replace(/\+/g, "")}${v.slice(-5)}`;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Extract the birth date from the compacted number.
|
|
28
|
+
* Matches python-stdnum's get_birth_date.
|
|
29
|
+
*/
|
|
30
|
+
const getBirthDate = (v) => {
|
|
31
|
+
let year;
|
|
32
|
+
let month;
|
|
33
|
+
let day;
|
|
34
|
+
if (v.length === 13) {
|
|
35
|
+
year = Number(v.slice(0, 4));
|
|
36
|
+
month = Number(v.slice(4, 6));
|
|
37
|
+
day = Number(v.slice(6, 8));
|
|
38
|
+
} else {
|
|
39
|
+
const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
40
|
+
let century = Math.floor(currentYear / 100);
|
|
41
|
+
const yy = Number(v.slice(0, 2));
|
|
42
|
+
if (yy > currentYear % 100) century -= 1;
|
|
43
|
+
if (v[v.length - 5] === "+") century -= 1;
|
|
44
|
+
year = century * 100 + yy;
|
|
45
|
+
month = Number(v.slice(2, 4));
|
|
46
|
+
day = Number(v.slice(4, 6));
|
|
47
|
+
}
|
|
48
|
+
if (!isValidDate(year, month, day)) return null;
|
|
49
|
+
return {
|
|
50
|
+
year,
|
|
51
|
+
month,
|
|
52
|
+
day
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
const validate = (value) => {
|
|
56
|
+
const v = compact(value);
|
|
57
|
+
if (v.length !== 11 && v.length !== 13) return err("INVALID_LENGTH", "Personnummer must be 10 or 12 digits");
|
|
58
|
+
const digits = v.slice(0, -5) + v.slice(-4);
|
|
59
|
+
const sep = v[v.length - 5];
|
|
60
|
+
if (sep !== "-" && sep !== "+" || !isdigits(digits)) return err("INVALID_FORMAT", "Personnummer has invalid format");
|
|
61
|
+
if (getBirthDate(v) === null) return err("INVALID_COMPONENT", "Personnummer contains an invalid date");
|
|
62
|
+
if (!luhnValidate(digits.slice(-10))) return err("INVALID_CHECKSUM", "Personnummer Luhn check does not match");
|
|
63
|
+
return {
|
|
64
|
+
valid: true,
|
|
65
|
+
compact: v
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
const format = (value) => compact(value);
|
|
69
|
+
/**
|
|
70
|
+
* Extract birth date and gender from a Personnummer.
|
|
71
|
+
* Returns null if the value is not valid.
|
|
72
|
+
*/
|
|
73
|
+
const parse = (value) => {
|
|
74
|
+
const result = validate(value);
|
|
75
|
+
if (!result.valid) return null;
|
|
76
|
+
const v = result.compact;
|
|
77
|
+
const birthDate = getBirthDate(v);
|
|
78
|
+
if (birthDate === null) return null;
|
|
79
|
+
const genderDigit = Number(v[v.length - 2]);
|
|
80
|
+
return {
|
|
81
|
+
birthDate: new Date(birthDate.year, birthDate.month - 1, birthDate.day),
|
|
82
|
+
gender: genderDigit % 2 === 0 ? "female" : "male"
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
/** Generate a random valid Swedish personnummer. */
|
|
86
|
+
const generate = () => {
|
|
87
|
+
for (;;) {
|
|
88
|
+
const yy = String(randomInt(50, 99)).padStart(2, "0");
|
|
89
|
+
const mm = String(randomInt(1, 12)).padStart(2, "0");
|
|
90
|
+
const dd = String(randomInt(1, 28)).padStart(2, "0");
|
|
91
|
+
const serial = String(randomInt(0, 999)).padStart(3, "0");
|
|
92
|
+
const payload = yy + mm + dd + serial;
|
|
93
|
+
const cs = luhnChecksum(payload + "0");
|
|
94
|
+
const result = validate(payload + String((10 - cs) % 10));
|
|
95
|
+
if (result.valid) return result.compact;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
/** Swedish Personal Identity Number. */
|
|
99
|
+
const personnummer = {
|
|
100
|
+
name: "Swedish Personal ID",
|
|
101
|
+
localName: "Personnummer",
|
|
102
|
+
abbreviation: "PN",
|
|
103
|
+
aliases: [
|
|
104
|
+
"personnummer",
|
|
105
|
+
"personnr",
|
|
106
|
+
"pers.nr",
|
|
107
|
+
"personal identity number"
|
|
108
|
+
],
|
|
109
|
+
candidatePattern: "\\d{6,8}-\\d{4}",
|
|
110
|
+
country: "SE",
|
|
111
|
+
entityType: "person",
|
|
112
|
+
sourceUrl: "https://www.skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html",
|
|
113
|
+
examples: ["880320-0016"],
|
|
114
|
+
compact,
|
|
115
|
+
format,
|
|
116
|
+
validate,
|
|
117
|
+
generate
|
|
118
|
+
};
|
|
119
|
+
//#endregion
|
|
120
|
+
export { compact, personnummer as default, format, generate, parse, validate };
|
|
121
|
+
|
|
122
|
+
//# sourceMappingURL=personnummer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personnummer.js","names":[],"sources":["../../src/se/personnummer.ts"],"sourcesContent":["/**\n * Personnummer (Personal Identity Number).\n *\n * Swedish personal identification number. 10 digits\n * in compact form (YYMMDDNNNC) with a Luhn checksum\n * on all 10 digits.\n *\n * @see https://www.skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html\n */\n\nimport {\n luhnValidate,\n luhnChecksum,\n} from \"#checksums/luhn\";\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\nimport type {\n ParsedPersonId,\n ValidateResult,\n Validator,\n} from \"../types\";\n\n/**\n * Match python-stdnum's compact: preserve the '-' or '+'\n * separator at position -5, and strip any others.\n */\nconst compact = (value: string): string => {\n let v = clean(value, \" :\");\n if (\n (v.length === 10 || v.length === 12) &&\n v[v.length - 5] !== \"-\" &&\n v[v.length - 5] !== \"+\"\n ) {\n v = `${v.slice(0, -4)}-${v.slice(-4)}`;\n }\n const prefix = v\n .slice(0, -5)\n .replace(/-/g, \"\")\n .replace(/\\+/g, \"\");\n return `${prefix}${v.slice(-5)}`;\n};\n\n/**\n * Extract the birth date from the compacted number.\n * Matches python-stdnum's get_birth_date.\n */\nconst getBirthDate = (\n v: string,\n): { year: number; month: number; day: number } | null => {\n let year: number;\n let month: number;\n let day: number;\n\n if (v.length === 13) {\n year = Number(v.slice(0, 4));\n month = Number(v.slice(4, 6));\n day = Number(v.slice(6, 8));\n } else {\n const currentYear = new Date().getFullYear();\n let century = Math.floor(currentYear / 100);\n const yy = Number(v.slice(0, 2));\n if (yy > currentYear % 100) century -= 1;\n if (v[v.length - 5] === \"+\") century -= 1;\n year = century * 100 + yy;\n month = Number(v.slice(2, 4));\n day = Number(v.slice(4, 6));\n }\n\n if (!isValidDate(year, month, day)) return null;\n return { year, month, day };\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11 && v.length !== 13) {\n return err(\n \"INVALID_LENGTH\",\n \"Personnummer must be 10 or 12 digits\",\n );\n }\n\n const digits = v.slice(0, -5) + v.slice(-4);\n const sep = v[v.length - 5];\n if ((sep !== \"-\" && sep !== \"+\") || !isdigits(digits)) {\n return err(\n \"INVALID_FORMAT\",\n \"Personnummer has invalid format\",\n );\n }\n\n if (getBirthDate(v) === null) {\n return err(\n \"INVALID_COMPONENT\",\n \"Personnummer contains an invalid date\",\n );\n }\n\n if (!luhnValidate(digits.slice(-10))) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Personnummer Luhn check 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 Personnummer.\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 birthDate = getBirthDate(v);\n if (birthDate === null) return null;\n\n const genderDigit = Number(v[v.length - 2]);\n\n return {\n birthDate: new Date(\n birthDate.year,\n birthDate.month - 1,\n birthDate.day,\n ),\n gender: genderDigit % 2 === 0 ? \"female\" : \"male\",\n };\n};\n\n/** Generate a random valid Swedish personnummer. */\nconst generate = (): string => {\n for (;;) {\n const yy = String(randomInt(50, 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 serial = String(randomInt(0, 999)).padStart(\n 3,\n \"0\",\n );\n const payload = yy + mm + dd + serial;\n const cs = luhnChecksum(payload + \"0\");\n const c = payload + String((10 - cs) % 10);\n const result = validate(c);\n if (result.valid) return result.compact;\n }\n};\n\n/** Swedish Personal Identity Number. */\nconst personnummer: Validator = {\n name: \"Swedish Personal ID\",\n localName: \"Personnummer\",\n abbreviation: \"PN\",\n aliases: [\n \"personnummer\",\n \"personnr\",\n \"pers.nr\",\n \"personal identity number\",\n ] as const,\n candidatePattern: \"\\\\d{6,8}-\\\\d{4}\",\n country: \"SE\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html\",\n examples: [\"880320-0016\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default personnummer;\nexport { compact, format, parse, validate, generate };\n"],"mappings":"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"}
|
package/dist/se/vat.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ValidateResult, Validator } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/se/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 Swedish VAT number. */
|
|
9
|
+
declare const generate: () => string;
|
|
10
|
+
/** Swedish 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/se/vat.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomDigits } from "../_util/generate.js";
|
|
3
|
+
import { err } from "../_util/result.js";
|
|
4
|
+
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
5
|
+
import { isdigits } from "../_util/strings.js";
|
|
6
|
+
//#region src/se/vat.ts
|
|
7
|
+
/**
|
|
8
|
+
* Momsnr. (Swedish VAT number).
|
|
9
|
+
*
|
|
10
|
+
* 12 digits, last 2 must be "01".
|
|
11
|
+
* Luhn check on first 10 digits.
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.vatify.eu/sweden-vat-number.html
|
|
14
|
+
* @see https://www.skatteverket.se/
|
|
15
|
+
*/
|
|
16
|
+
const compact = (value) => {
|
|
17
|
+
let v = clean(value, " -/.");
|
|
18
|
+
if (v.startsWith("SE") || v.startsWith("se")) v = v.slice(2);
|
|
19
|
+
return v;
|
|
20
|
+
};
|
|
21
|
+
const validate = (value) => {
|
|
22
|
+
const v = compact(value);
|
|
23
|
+
if (v.length !== 12) return err("INVALID_LENGTH", "Swedish VAT number must be 12 digits");
|
|
24
|
+
if (!isdigits(v)) return err("INVALID_FORMAT", "Swedish VAT number must contain only digits");
|
|
25
|
+
if (v.slice(10, 12) !== "01") return err("INVALID_COMPONENT", "Swedish VAT number must end with 01");
|
|
26
|
+
if (!luhnValidate(v.slice(0, 10))) return err("INVALID_CHECKSUM", "Swedish VAT number Luhn check failed");
|
|
27
|
+
return {
|
|
28
|
+
valid: true,
|
|
29
|
+
compact: v
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
const format = (value) => `SE${compact(value)}`;
|
|
33
|
+
/** Generate a random valid Swedish VAT number. */
|
|
34
|
+
const generate = () => {
|
|
35
|
+
const p = randomDigits(9);
|
|
36
|
+
const cs = luhnChecksum(p + "0");
|
|
37
|
+
return p + String((10 - cs) % 10) + "01";
|
|
38
|
+
};
|
|
39
|
+
/** Swedish VAT Number. */
|
|
40
|
+
const vat = {
|
|
41
|
+
name: "Swedish VAT Number",
|
|
42
|
+
localName: "Momsregistreringsnummer",
|
|
43
|
+
abbreviation: "Momsnr.",
|
|
44
|
+
aliases: [
|
|
45
|
+
"Momsnr.",
|
|
46
|
+
"Momsregistreringsnummer",
|
|
47
|
+
"Swedish VAT Number",
|
|
48
|
+
"SE VAT"
|
|
49
|
+
],
|
|
50
|
+
candidatePattern: "SE\\s?\\d{10}01",
|
|
51
|
+
country: "SE",
|
|
52
|
+
entityType: "company",
|
|
53
|
+
sourceUrl: "https://www.skatteverket.se/",
|
|
54
|
+
examples: ["556188840401"],
|
|
55
|
+
compact,
|
|
56
|
+
format,
|
|
57
|
+
validate,
|
|
58
|
+
generate
|
|
59
|
+
};
|
|
60
|
+
//#endregion
|
|
61
|
+
export { compact, vat as default, format, generate, validate };
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=vat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/se/vat.ts"],"sourcesContent":["/**\n * Momsnr. (Swedish VAT number).\n *\n * 12 digits, last 2 must be \"01\".\n * Luhn check on first 10 digits.\n *\n * @see https://www.vatify.eu/sweden-vat-number.html\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\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"SE\") || v.startsWith(\"se\")) {\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 !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"Swedish VAT number must be 12 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Swedish VAT number must contain only digits\",\n );\n }\n if (v.slice(10, 12) !== \"01\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Swedish VAT number must end with 01\",\n );\n }\n if (!luhnValidate(v.slice(0, 10))) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Swedish VAT number Luhn check failed\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `SE${compact(value)}`;\n\n/** Generate a random valid Swedish VAT number. */\nconst generate = (): string => {\n const p = randomDigits(9);\n const cs = luhnChecksum(p + \"0\");\n return p + String((10 - cs) % 10) + \"01\";\n};\n\n/** Swedish VAT Number. */\nconst vat: Validator = {\n name: \"Swedish VAT Number\",\n localName: \"Momsregistreringsnummer\",\n abbreviation: \"Momsnr.\",\n aliases: [\n \"Momsnr.\",\n \"Momsregistreringsnummer\",\n \"Swedish VAT Number\",\n \"SE VAT\",\n ] as const,\n candidatePattern: \"SE\\\\s?\\\\d{10}01\",\n country: \"SE\",\n entityType: \"company\",\n sourceUrl: \"https://www.skatteverket.se/\",\n examples: [\"556188840401\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAqBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,OAAO;AAC5B,KAAI,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,CAC1C,KAAI,EAAE,MAAM,EAAE;AAEhB,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,uCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,8CACD;AAEH,KAAI,EAAE,MAAM,IAAI,GAAG,KAAK,KACtB,QAAO,IACL,qBACA,sCACD;AAEH,KAAI,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,CAC/B,QAAO,IACL,oBACA,uCACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UACd,KAAK,QAAQ,MAAM;;AAGrB,MAAM,iBAAyB;CAC7B,MAAM,IAAI,aAAa,EAAE;CACzB,MAAM,KAAK,aAAa,IAAI,IAAI;AAChC,QAAO,IAAI,QAAQ,KAAK,MAAM,GAAG,GAAG;;;AAItC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,eAAe;CAC1B;CACA;CACA;CACA;CACD"}
|
package/dist/sg/mod.d.ts
ADDED
package/dist/sg/mod.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import uen from "./uen.js";
|
|
3
|
+
//#region src/sg/mod.ts
|
|
4
|
+
var sg_exports = /* @__PURE__ */ __exportAll({ uen: () => uen });
|
|
5
|
+
//#endregion
|
|
6
|
+
export { sg_exports, uen };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=mod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","names":[],"sources":["../../src/sg/mod.ts"],"sourcesContent":["export { default as uen } from \"./uen\";\n"],"mappings":""}
|
package/dist/sg/uen.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ValidateResult, Validator } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/sg/uen.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 Singapore UEN (business format). */
|
|
9
|
+
declare const generate: () => string;
|
|
10
|
+
/** Singapore Unique Entity Number. */
|
|
11
|
+
declare const uen: Validator;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { compact, uen as default, format, generate, validate };
|
|
14
|
+
//# sourceMappingURL=uen.d.ts.map
|
package/dist/sg/uen.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
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/sg/uen.ts
|
|
6
|
+
/**
|
|
7
|
+
* UEN (Singapore Unique Entity Number).
|
|
8
|
+
*
|
|
9
|
+
* 9 or 10 characters identifying businesses and
|
|
10
|
+
* entities registered in Singapore. Three formats:
|
|
11
|
+
*
|
|
12
|
+
* - Business (ROB): 8 digits + 1 check letter
|
|
13
|
+
* - Local company (ROC): 4-digit year + 5 digits
|
|
14
|
+
* + 1 check letter
|
|
15
|
+
* - Other entities: R/S/T + 2-digit year + 2-letter
|
|
16
|
+
* entity type + 4 digits + 1 check letter
|
|
17
|
+
*
|
|
18
|
+
* @see https://www.uen.gov.sg/
|
|
19
|
+
* @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Singapore-TIN.pdf
|
|
20
|
+
*/
|
|
21
|
+
/** Check letter alphabet for "Other" format. */
|
|
22
|
+
const OTHER_ALPHA = "ABCDEFGHJKLMNPQRSTUVWX0123456789";
|
|
23
|
+
const ENTITY_TYPES = new Set([
|
|
24
|
+
"CC",
|
|
25
|
+
"CD",
|
|
26
|
+
"CH",
|
|
27
|
+
"CL",
|
|
28
|
+
"CM",
|
|
29
|
+
"CP",
|
|
30
|
+
"CS",
|
|
31
|
+
"CX",
|
|
32
|
+
"DP",
|
|
33
|
+
"FB",
|
|
34
|
+
"FC",
|
|
35
|
+
"FM",
|
|
36
|
+
"FN",
|
|
37
|
+
"GA",
|
|
38
|
+
"GB",
|
|
39
|
+
"GS",
|
|
40
|
+
"HS",
|
|
41
|
+
"LL",
|
|
42
|
+
"LP",
|
|
43
|
+
"MB",
|
|
44
|
+
"MC",
|
|
45
|
+
"MD",
|
|
46
|
+
"MH",
|
|
47
|
+
"MM",
|
|
48
|
+
"MQ",
|
|
49
|
+
"NB",
|
|
50
|
+
"NR",
|
|
51
|
+
"PA",
|
|
52
|
+
"PB",
|
|
53
|
+
"PF",
|
|
54
|
+
"RF",
|
|
55
|
+
"RP",
|
|
56
|
+
"SM",
|
|
57
|
+
"SS",
|
|
58
|
+
"TC",
|
|
59
|
+
"TU",
|
|
60
|
+
"VH",
|
|
61
|
+
"XL"
|
|
62
|
+
]);
|
|
63
|
+
const compact = (value) => clean(value, " -").toUpperCase();
|
|
64
|
+
/**
|
|
65
|
+
* Validate Business (ROB) UEN (9 chars):
|
|
66
|
+
* 8 digits + 1 check letter.
|
|
67
|
+
*/
|
|
68
|
+
const validateBusiness = (v) => {
|
|
69
|
+
if (!isdigits(v.slice(0, 8))) return err("INVALID_FORMAT", "Business UEN must start with 8 digits");
|
|
70
|
+
if (!/^[A-Z]$/.test(v[8])) return err("INVALID_FORMAT", "Business UEN must end with a letter");
|
|
71
|
+
const weights = [
|
|
72
|
+
10,
|
|
73
|
+
4,
|
|
74
|
+
9,
|
|
75
|
+
3,
|
|
76
|
+
8,
|
|
77
|
+
2,
|
|
78
|
+
7,
|
|
79
|
+
1
|
|
80
|
+
];
|
|
81
|
+
const checkAlpha = "XMKECAWLJDB";
|
|
82
|
+
let sum = 0;
|
|
83
|
+
for (let i = 0; i < 8; i++) sum += Number(v[i]) * weights[i];
|
|
84
|
+
const expected = checkAlpha[sum % 11];
|
|
85
|
+
if (v[8] !== expected) return err("INVALID_CHECKSUM", "UEN check letter does not match");
|
|
86
|
+
return {
|
|
87
|
+
valid: true,
|
|
88
|
+
compact: v
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Validate Local Company (ROC) UEN (10 chars):
|
|
93
|
+
* 9 digits (year prefix) + 1 check letter.
|
|
94
|
+
*/
|
|
95
|
+
const validateLocalCompany = (v) => {
|
|
96
|
+
if (!isdigits(v.slice(0, 9))) return err("INVALID_FORMAT", "Company UEN must have 9 digits");
|
|
97
|
+
if (!/^[A-Z]$/.test(v[9])) return err("INVALID_FORMAT", "Company UEN must end with a letter");
|
|
98
|
+
const weights = [
|
|
99
|
+
10,
|
|
100
|
+
8,
|
|
101
|
+
6,
|
|
102
|
+
4,
|
|
103
|
+
9,
|
|
104
|
+
7,
|
|
105
|
+
5,
|
|
106
|
+
3,
|
|
107
|
+
1
|
|
108
|
+
];
|
|
109
|
+
const checkAlpha = "ZKCMDNERGWH";
|
|
110
|
+
let sum = 0;
|
|
111
|
+
for (let i = 0; i < 9; i++) sum += Number(v[i]) * weights[i];
|
|
112
|
+
const expected = checkAlpha[sum % 11];
|
|
113
|
+
if (v[9] !== expected) return err("INVALID_CHECKSUM", "UEN check letter does not match");
|
|
114
|
+
return {
|
|
115
|
+
valid: true,
|
|
116
|
+
compact: v
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Validate Other entity UEN (10 chars):
|
|
121
|
+
* R/S/T + 2 digits + 2-letter type + 4 digits
|
|
122
|
+
* + 1 check letter.
|
|
123
|
+
*/
|
|
124
|
+
const validateOther = (v) => {
|
|
125
|
+
const prefix = v[0];
|
|
126
|
+
if (prefix !== "R" && prefix !== "S" && prefix !== "T") return err("INVALID_COMPONENT", "Other UEN must start with R, S, or T");
|
|
127
|
+
if (!isdigits(v.slice(1, 3))) return err("INVALID_FORMAT", "Other UEN positions 2-3 must be digits");
|
|
128
|
+
const entityType = v.slice(3, 5);
|
|
129
|
+
if (!ENTITY_TYPES.has(entityType)) return err("INVALID_COMPONENT", "Unknown entity type: " + entityType);
|
|
130
|
+
if (!isdigits(v.slice(5, 9))) return err("INVALID_FORMAT", "Other UEN positions 6-9 must be digits");
|
|
131
|
+
const weights = [
|
|
132
|
+
4,
|
|
133
|
+
3,
|
|
134
|
+
5,
|
|
135
|
+
3,
|
|
136
|
+
10,
|
|
137
|
+
2,
|
|
138
|
+
2,
|
|
139
|
+
5,
|
|
140
|
+
7
|
|
141
|
+
];
|
|
142
|
+
let sum = 0;
|
|
143
|
+
for (let i = 0; i < 9; i++) {
|
|
144
|
+
const idx = OTHER_ALPHA.indexOf(v[i]);
|
|
145
|
+
if (idx === -1) return err("INVALID_FORMAT", `Unexpected character at position ${i + 1}: ${v[i]}`);
|
|
146
|
+
sum += idx * weights[i];
|
|
147
|
+
}
|
|
148
|
+
const expected = OTHER_ALPHA[((sum - 5) % 11 + 11) % 11];
|
|
149
|
+
if (v[9] !== expected) return err("INVALID_CHECKSUM", "UEN check letter does not match");
|
|
150
|
+
return {
|
|
151
|
+
valid: true,
|
|
152
|
+
compact: v
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
const validate = (value) => {
|
|
156
|
+
const v = compact(value);
|
|
157
|
+
if (v.length !== 9 && v.length !== 10) return err("INVALID_LENGTH", "UEN must be 9 or 10 characters");
|
|
158
|
+
if (!/^[A-Z0-9]+$/.test(v)) return err("INVALID_FORMAT", "UEN must contain only digits and letters");
|
|
159
|
+
if (v.length === 9) return validateBusiness(v);
|
|
160
|
+
if (isdigits(v[0])) return validateLocalCompany(v);
|
|
161
|
+
return validateOther(v);
|
|
162
|
+
};
|
|
163
|
+
const format = (value) => compact(value);
|
|
164
|
+
/** Generate a random valid Singapore UEN (business format). */
|
|
165
|
+
const generate = () => {
|
|
166
|
+
const weights = [
|
|
167
|
+
10,
|
|
168
|
+
4,
|
|
169
|
+
9,
|
|
170
|
+
3,
|
|
171
|
+
8,
|
|
172
|
+
2,
|
|
173
|
+
7,
|
|
174
|
+
1
|
|
175
|
+
];
|
|
176
|
+
const checkAlpha = "XMKECAWLJDB";
|
|
177
|
+
const body = randomDigits(8);
|
|
178
|
+
let sum = 0;
|
|
179
|
+
for (let i = 0; i < 8; i++) sum += Number(body[i]) * weights[i];
|
|
180
|
+
return body + checkAlpha[sum % 11];
|
|
181
|
+
};
|
|
182
|
+
/** Singapore Unique Entity Number. */
|
|
183
|
+
const uen = {
|
|
184
|
+
name: "Singapore Unique Entity Number",
|
|
185
|
+
localName: "Unique Entity Number",
|
|
186
|
+
abbreviation: "UEN",
|
|
187
|
+
aliases: ["UEN", "Unique Entity Number"],
|
|
188
|
+
candidatePattern: "[\\dSTR]\\d{7}[A-Z]",
|
|
189
|
+
country: "SG",
|
|
190
|
+
entityType: "company",
|
|
191
|
+
description: "9 or 10-character business identifier issued by ACRA",
|
|
192
|
+
sourceUrl: "https://www.uen.gov.sg/",
|
|
193
|
+
lengths: [9, 10],
|
|
194
|
+
examples: [
|
|
195
|
+
"00192200M",
|
|
196
|
+
"197401143C",
|
|
197
|
+
"S16FC0121D"
|
|
198
|
+
],
|
|
199
|
+
compact,
|
|
200
|
+
format,
|
|
201
|
+
validate,
|
|
202
|
+
generate
|
|
203
|
+
};
|
|
204
|
+
//#endregion
|
|
205
|
+
export { compact, uen as default, format, generate, validate };
|
|
206
|
+
|
|
207
|
+
//# sourceMappingURL=uen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uen.js","names":[],"sources":["../../src/sg/uen.ts"],"sourcesContent":["/**\n * UEN (Singapore Unique Entity Number).\n *\n * 9 or 10 characters identifying businesses and\n * entities registered in Singapore. Three formats:\n *\n * - Business (ROB): 8 digits + 1 check letter\n * - Local company (ROC): 4-digit year + 5 digits\n * + 1 check letter\n * - Other entities: R/S/T + 2-digit year + 2-letter\n * entity type + 4 digits + 1 check letter\n *\n * @see https://www.uen.gov.sg/\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Singapore-TIN.pdf\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/** Check letter alphabet for \"Other\" format. */\nconst OTHER_ALPHA = \"ABCDEFGHJKLMNPQRSTUVWX0123456789\";\n\nconst ENTITY_TYPES = new Set([\n \"CC\",\n \"CD\",\n \"CH\",\n \"CL\",\n \"CM\",\n \"CP\",\n \"CS\",\n \"CX\",\n \"DP\",\n \"FB\",\n \"FC\",\n \"FM\",\n \"FN\",\n \"GA\",\n \"GB\",\n \"GS\",\n \"HS\",\n \"LL\",\n \"LP\",\n \"MB\",\n \"MC\",\n \"MD\",\n \"MH\",\n \"MM\",\n \"MQ\",\n \"NB\",\n \"NR\",\n \"PA\",\n \"PB\",\n \"PF\",\n \"RF\",\n \"RP\",\n \"SM\",\n \"SS\",\n \"TC\",\n \"TU\",\n \"VH\",\n \"XL\",\n]);\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\n/**\n * Validate Business (ROB) UEN (9 chars):\n * 8 digits + 1 check letter.\n */\nconst validateBusiness = (v: string): ValidateResult => {\n if (!isdigits(v.slice(0, 8))) {\n return err(\n \"INVALID_FORMAT\",\n \"Business UEN must start with 8 digits\",\n );\n }\n if (!/^[A-Z]$/.test(v[8]!)) {\n return err(\n \"INVALID_FORMAT\",\n \"Business UEN must end with a letter\",\n );\n }\n\n const weights = [10, 4, 9, 3, 8, 2, 7, 1];\n const checkAlpha = \"XMKECAWLJDB\";\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n sum += Number(v[i]) * weights[i]!;\n }\n const expected = checkAlpha[sum % 11];\n if (v[8] !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"UEN check letter does not match\",\n );\n }\n return { valid: true, compact: v };\n};\n\n/**\n * Validate Local Company (ROC) UEN (10 chars):\n * 9 digits (year prefix) + 1 check letter.\n */\nconst validateLocalCompany = (\n v: string,\n): ValidateResult => {\n if (!isdigits(v.slice(0, 9))) {\n return err(\n \"INVALID_FORMAT\",\n \"Company UEN must have 9 digits\",\n );\n }\n if (!/^[A-Z]$/.test(v[9]!)) {\n return err(\n \"INVALID_FORMAT\",\n \"Company UEN must end with a letter\",\n );\n }\n\n const weights = [10, 8, 6, 4, 9, 7, 5, 3, 1];\n const checkAlpha = \"ZKCMDNERGWH\";\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n sum += Number(v[i]) * weights[i]!;\n }\n const expected = checkAlpha[sum % 11];\n if (v[9] !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"UEN check letter does not match\",\n );\n }\n return { valid: true, compact: v };\n};\n\n/**\n * Validate Other entity UEN (10 chars):\n * R/S/T + 2 digits + 2-letter type + 4 digits\n * + 1 check letter.\n */\nconst validateOther = (v: string): ValidateResult => {\n const prefix = v[0]!;\n if (prefix !== \"R\" && prefix !== \"S\" && prefix !== \"T\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Other UEN must start with R, S, or T\",\n );\n }\n if (!isdigits(v.slice(1, 3))) {\n return err(\n \"INVALID_FORMAT\",\n \"Other UEN positions 2-3 must be digits\",\n );\n }\n const entityType = v.slice(3, 5);\n if (!ENTITY_TYPES.has(entityType)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Unknown entity type: \" + entityType,\n );\n }\n if (!isdigits(v.slice(5, 9))) {\n return err(\n \"INVALID_FORMAT\",\n \"Other UEN positions 6-9 must be digits\",\n );\n }\n\n const weights = [4, 3, 5, 3, 10, 2, 2, 5, 7];\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n const idx = OTHER_ALPHA.indexOf(v[i]!);\n if (idx === -1) {\n return err(\n \"INVALID_FORMAT\",\n `Unexpected character at position ${i + 1}: ${v[i]}`,\n );\n }\n sum += idx * weights[i]!;\n }\n const expected =\n OTHER_ALPHA[(((sum - 5) % 11) + 11) % 11];\n if (v[9] !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"UEN check letter does not match\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 9 && v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"UEN must be 9 or 10 characters\",\n );\n }\n\n if (!/^[A-Z0-9]+$/.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"UEN must contain only digits and letters\",\n );\n }\n\n // 9 chars: business (ROB)\n if (v.length === 9) {\n return validateBusiness(v);\n }\n\n // 10 chars: first char digit => local company,\n // otherwise \"other\" entity\n if (isdigits(v[0]!)) {\n return validateLocalCompany(v);\n }\n return validateOther(v);\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Singapore UEN (business format). */\nconst generate = (): string => {\n const weights = [10, 4, 9, 3, 8, 2, 7, 1];\n const checkAlpha = \"XMKECAWLJDB\";\n const body = randomDigits(8);\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n sum += Number(body[i]) * weights[i]!;\n }\n const check = checkAlpha[sum % 11]!;\n return body + check;\n};\n\n/** Singapore Unique Entity Number. */\nconst uen: Validator = {\n name: \"Singapore Unique Entity Number\",\n localName: \"Unique Entity Number\",\n abbreviation: \"UEN\",\n aliases: [\"UEN\", \"Unique Entity Number\"] as const,\n candidatePattern: \"[\\\\dSTR]\\\\d{7}[A-Z]\",\n country: \"SG\",\n entityType: \"company\",\n description:\n \"9 or 10-character business identifier issued by ACRA\",\n sourceUrl: \"https://www.uen.gov.sg/\",\n lengths: [9, 10] as const,\n examples: [\n \"00192200M\",\n \"197401143C\",\n \"S16FC0121D\",\n ] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default uen;\nexport { compact, format, validate, generate };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ParsedPersonId, ValidateResult, Validator } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/si/emso.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 an EMSO.
|
|
10
|
+
* Returns null if the value is not valid.
|
|
11
|
+
*/
|
|
12
|
+
declare const parse: (value: string) => ParsedPersonId | null;
|
|
13
|
+
/** Generate a random valid Slovenian EMSO. */
|
|
14
|
+
declare const generate: () => string;
|
|
15
|
+
/** Slovenian Unique Master Citizen Number. */
|
|
16
|
+
declare const emso: Validator;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { compact, emso as default, format, generate, parse, validate };
|
|
19
|
+
//# sourceMappingURL=emso.d.ts.map
|