@stll/stdnum 0.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -5
- package/README.md +28 -4
- package/dist/_checksums/luhn.js.map +1 -1
- package/dist/_checksums/mod1110.js +1 -1
- package/dist/_checksums/mod1110.js.map +1 -1
- package/dist/_checksums/mod112.js +5 -5
- package/dist/_checksums/mod112.js.map +1 -1
- package/dist/_checksums/mod97.js.map +1 -1
- package/dist/_checksums/verhoeff.js.map +1 -1
- package/dist/_checksums/weighted-sum.js.map +1 -1
- package/dist/_util/arabic.js.map +1 -1
- package/dist/_util/clean.js.map +1 -1
- package/dist/_util/date.js.map +1 -1
- package/dist/_util/generate.d.ts +13 -1
- package/dist/_util/generate.js +23 -1
- package/dist/_util/generate.js.map +1 -1
- package/dist/_util/result.js.map +1 -1
- package/dist/_util/strings.js.map +1 -1
- package/dist/ad/mod.d.ts +3 -2
- package/dist/ad/nrt.d.ts +16 -2
- package/dist/ad/nrt.js +4 -16
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +2 -3
- package/dist/ae/eid.js +2 -12
- package/dist/ae/eid.js.map +1 -1
- package/dist/ae/mod.d.ts +3 -2
- package/dist/ai/mod.d.ts +3 -2
- package/dist/ai/tin.d.ts +20 -2
- package/dist/ai/tin.js +1 -18
- package/dist/ai/tin.js.map +1 -1
- package/dist/al/mod.d.ts +3 -2
- package/dist/al/nipt.d.ts +13 -2
- package/dist/al/nipt.js +1 -11
- package/dist/al/nipt.js.map +1 -1
- package/dist/am/mod.d.ts +3 -2
- package/dist/am/tin.d.ts +16 -2
- package/dist/am/tin.js +1 -14
- package/dist/am/tin.js.map +1 -1
- package/dist/ar/cbu.d.ts +2 -3
- package/dist/ar/cbu.js +2 -10
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +2 -3
- package/dist/ar/cuit.js +13 -29
- package/dist/ar/cuit.js.map +1 -1
- package/dist/ar/dni.d.ts +11 -2
- package/dist/ar/dni.js +1 -9
- package/dist/ar/dni.js.map +1 -1
- package/dist/ar/mod.d.ts +3 -2
- package/dist/at/businessid.d.ts +10 -2
- package/dist/at/businessid.js +1 -8
- package/dist/at/businessid.js.map +1 -1
- package/dist/at/mod.d.ts +3 -2
- package/dist/at/tin.d.ts +2 -3
- package/dist/at/tin.js +1 -11
- package/dist/at/tin.js.map +1 -1
- package/dist/at/uid.d.ts +2 -3
- package/dist/at/uid.js +2 -10
- package/dist/at/uid.js.map +1 -1
- package/dist/at/vnr.d.ts +5 -4
- package/dist/at/vnr.js +23 -16
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +2 -3
- package/dist/au/abn.js +1 -10
- package/dist/au/abn.js.map +1 -1
- package/dist/au/acn.d.ts +2 -3
- package/dist/au/acn.js +1 -10
- package/dist/au/acn.js.map +1 -1
- package/dist/au/mod.d.ts +3 -2
- package/dist/au/tfn.d.ts +2 -3
- package/dist/au/tfn.js +1 -10
- package/dist/au/tfn.js.map +1 -1
- package/dist/az/mod.d.ts +3 -2
- package/dist/az/voen.d.ts +2 -3
- package/dist/az/voen.js +1 -14
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +2 -3
- package/dist/ba/jmbg.js +4 -11
- package/dist/ba/jmbg.js.map +1 -1
- package/dist/ba/mod.d.ts +3 -2
- package/dist/bd/mod.d.ts +3 -2
- package/dist/bd/nid.d.ts +23 -2
- package/dist/bd/nid.js +11 -32
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +2 -3
- package/dist/be/bis.js +1 -11
- package/dist/be/bis.js.map +1 -1
- package/dist/be/mod.d.ts +3 -2
- package/dist/be/nn.d.ts +2 -3
- package/dist/be/nn.js +1 -11
- package/dist/be/nn.js.map +1 -1
- package/dist/be/vat.d.ts +2 -3
- package/dist/be/vat.js +1 -9
- package/dist/be/vat.js.map +1 -1
- package/dist/bg/egn.d.ts +2 -3
- package/dist/bg/egn.js +5 -13
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/mod.d.ts +3 -2
- package/dist/bg/pnf.d.ts +2 -3
- package/dist/bg/pnf.js +1 -8
- package/dist/bg/pnf.js.map +1 -1
- package/dist/bg/vat.d.ts +2 -3
- package/dist/bg/vat.js +3 -9
- package/dist/bg/vat.js.map +1 -1
- package/dist/bh/cpr.d.ts +5 -4
- package/dist/bh/cpr.js +9 -19
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bh/mod.d.ts +3 -2
- package/dist/bic.d.ts +13 -2
- package/dist/bic.js +14 -26
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +2 -3
- package/dist/br/cnpj.js +1 -20
- package/dist/br/cnpj.js.map +1 -1
- package/dist/br/cpf.d.ts +2 -3
- package/dist/br/cpf.js +1 -14
- package/dist/br/cpf.js.map +1 -1
- package/dist/br/mod.d.ts +3 -2
- package/dist/by/mod.d.ts +3 -2
- package/dist/by/unp.d.ts +2 -3
- package/dist/by/unp.js +9 -17
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/mod.d.ts +3 -2
- package/dist/bz/tin.d.ts +5 -4
- package/dist/bz/tin.js +10 -27
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +2 -3
- package/dist/ca/bn.js +2 -10
- package/dist/ca/bn.js.map +1 -1
- package/dist/ca/mod.d.ts +3 -2
- package/dist/ca/sin.d.ts +2 -3
- package/dist/ca/sin.js +2 -10
- package/dist/ca/sin.js.map +1 -1
- package/dist/ch/mod.d.ts +3 -2
- package/dist/ch/ssn.d.ts +2 -3
- package/dist/ch/ssn.js +1 -9
- package/dist/ch/ssn.js.map +1 -1
- package/dist/ch/uid.d.ts +2 -3
- package/dist/ch/uid.js +1 -9
- package/dist/ch/uid.js.map +1 -1
- package/dist/ch/vat.d.ts +2 -3
- package/dist/ch/vat.js +1 -9
- package/dist/ch/vat.js.map +1 -1
- package/dist/cl/mod.d.ts +3 -2
- package/dist/cl/rut.d.ts +2 -3
- package/dist/cl/rut.js +2 -15
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/mod.d.ts +3 -2
- package/dist/cn/ric.d.ts +2 -3
- package/dist/cn/ric.js +4 -14
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +2 -3
- package/dist/cn/uscc.js +8 -16
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/mod.d.ts +3 -2
- package/dist/co/nit.d.ts +2 -3
- package/dist/co/nit.js +6 -13
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.d.ts +18 -2
- package/dist/cr/cpf.js +5 -19
- package/dist/cr/cpf.js.map +1 -1
- package/dist/cr/mod.d.ts +3 -2
- package/dist/creditcard.d.ts +2 -3
- package/dist/creditcard.js +5 -14
- package/dist/creditcard.js.map +1 -1
- package/dist/cu/mod.d.ts +3 -2
- package/dist/cu/ni.d.ts +5 -4
- package/dist/cu/ni.js +13 -18
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/mod.d.ts +3 -2
- package/dist/cy/vat.d.ts +2 -3
- package/dist/cy/vat.js +1 -8
- package/dist/cy/vat.js.map +1 -1
- package/dist/cz/dic.d.ts +2 -3
- package/dist/cz/dic.js +7 -13
- package/dist/cz/dic.js.map +1 -1
- package/dist/cz/ico.d.ts +2 -3
- package/dist/cz/ico.js +2 -10
- package/dist/cz/ico.js.map +1 -1
- package/dist/cz/mod.d.ts +3 -2
- package/dist/cz/rc.d.ts +2 -3
- package/dist/cz/rc.js +22 -21
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.d.ts +19 -2
- package/dist/de/handelsreg.js +10 -26
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +2 -3
- package/dist/de/idnr.js +2 -12
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/mod.d.ts +3 -2
- package/dist/de/stnr.d.ts +17 -3
- package/dist/de/stnr.js +1 -15
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +2 -3
- package/dist/de/svnr.js +4 -13
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +2 -3
- package/dist/de/vat.js +2 -11
- package/dist/de/vat.js.map +1 -1
- package/dist/dk/cpr.d.ts +5 -4
- package/dist/dk/cpr.js +14 -12
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +2 -3
- package/dist/dk/cvr.js +2 -15
- package/dist/dk/cvr.js.map +1 -1
- package/dist/dk/mod.d.ts +3 -2
- package/dist/dk/vat.d.ts +2 -3
- package/dist/dk/vat.js +3 -13
- package/dist/dk/vat.js.map +1 -1
- package/dist/do/mod.d.ts +3 -2
- package/dist/do/rnc.d.ts +2 -3
- package/dist/do/rnc.js +3 -17
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/mod.d.ts +3 -2
- package/dist/ec/ruc.d.ts +2 -3
- package/dist/ec/ruc.js +2 -19
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +2 -3
- package/dist/ee/ik.js +6 -15
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/mod.d.ts +3 -2
- package/dist/ee/registrikood.d.ts +2 -3
- package/dist/ee/registrikood.js +9 -15
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +2 -3
- package/dist/ee/vat.js +2 -10
- package/dist/ee/vat.js.map +1 -1
- package/dist/eg/mod.d.ts +3 -2
- package/dist/eg/tn.d.ts +11 -2
- package/dist/eg/tn.js +1 -9
- package/dist/eg/tn.js.map +1 -1
- package/dist/es/cif.d.ts +2 -3
- package/dist/es/cif.js +3 -12
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +2 -3
- package/dist/es/dni.js +1 -9
- package/dist/es/dni.js.map +1 -1
- package/dist/es/mod.d.ts +3 -2
- package/dist/es/nie.d.ts +2 -3
- package/dist/es/nie.js +14 -22
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +2 -3
- package/dist/es/nss.js +1 -16
- package/dist/es/nss.js.map +1 -1
- package/dist/es/vat.d.ts +2 -3
- package/dist/es/vat.js +5 -10
- package/dist/es/vat.js.map +1 -1
- package/dist/eu/mod.d.ts +3 -2
- package/dist/eu/vat.d.ts +5 -4
- package/dist/eu/vat.js +44 -2
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +5 -4
- package/dist/fi/hetu.js +19 -12
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/mod.d.ts +3 -2
- package/dist/fi/vat.d.ts +2 -3
- package/dist/fi/vat.js +3 -10
- package/dist/fi/vat.js.map +1 -1
- package/dist/fi/ytunnus.d.ts +2 -3
- package/dist/fi/ytunnus.js +2 -10
- package/dist/fi/ytunnus.js.map +1 -1
- package/dist/fr/mod.d.ts +3 -2
- package/dist/fr/nif.d.ts +2 -3
- package/dist/fr/nif.js +1 -9
- package/dist/fr/nif.js.map +1 -1
- package/dist/fr/nir.d.ts +2 -3
- package/dist/fr/nir.js +3 -14
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +2 -3
- package/dist/fr/siren.js +2 -10
- package/dist/fr/siren.js.map +1 -1
- package/dist/fr/siret.d.ts +2 -3
- package/dist/fr/siret.js +2 -11
- package/dist/fr/siret.js.map +1 -1
- package/dist/fr/tva.d.ts +2 -3
- package/dist/fr/tva.js +2 -12
- package/dist/fr/tva.js.map +1 -1
- package/dist/gb/mod.d.ts +3 -2
- package/dist/gb/nino.d.ts +12 -2
- package/dist/gb/nino.js +8 -17
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +2 -3
- package/dist/gb/sedol.js +9 -18
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +2 -3
- package/dist/gb/utr.js +2 -10
- package/dist/gb/utr.js.map +1 -1
- package/dist/gb/vat.d.ts +2 -3
- package/dist/gb/vat.js +2 -11
- package/dist/gb/vat.js.map +1 -1
- package/dist/ge/mod.d.ts +3 -2
- package/dist/ge/pin.d.ts +14 -2
- package/dist/ge/pin.js +1 -12
- package/dist/ge/pin.js.map +1 -1
- package/dist/gh/mod.d.ts +3 -2
- package/dist/gh/tin.d.ts +2 -3
- package/dist/gh/tin.js +10 -24
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +2 -3
- package/dist/gr/amka.js +3 -11
- package/dist/gr/amka.js.map +1 -1
- package/dist/gr/mod.d.ts +3 -2
- package/dist/gr/vat.d.ts +2 -3
- package/dist/gr/vat.js +1 -10
- package/dist/gr/vat.js.map +1 -1
- package/dist/gt/mod.d.ts +3 -2
- package/dist/gt/nit.d.ts +2 -3
- package/dist/gt/nit.js +6 -14
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +2 -3
- package/dist/hk/hkid.js +2 -10
- package/dist/hk/hkid.js.map +1 -1
- package/dist/hk/mod.d.ts +3 -2
- package/dist/hr/mod.d.ts +3 -2
- package/dist/hr/vat.d.ts +2 -3
- package/dist/hr/vat.js +2 -9
- package/dist/hr/vat.js.map +1 -1
- package/dist/hu/mod.d.ts +3 -2
- package/dist/hu/vat.d.ts +2 -3
- package/dist/hu/vat.js +3 -10
- package/dist/hu/vat.js.map +1 -1
- package/dist/iban.d.ts +2 -3
- package/dist/iban.js +2 -8
- package/dist/iban.js.map +1 -1
- package/dist/id/mod.d.ts +3 -2
- package/dist/id/npwp.d.ts +2 -3
- package/dist/id/npwp.js +3 -13
- package/dist/id/npwp.js.map +1 -1
- package/dist/ie/mod.d.ts +3 -2
- package/dist/ie/pps.d.ts +2 -3
- package/dist/ie/pps.js +1 -10
- package/dist/ie/pps.js.map +1 -1
- package/dist/ie/vat.d.ts +2 -3
- package/dist/ie/vat.js +1 -9
- package/dist/ie/vat.js.map +1 -1
- package/dist/il/idnr.d.ts +2 -3
- package/dist/il/idnr.js +2 -9
- package/dist/il/idnr.js.map +1 -1
- package/dist/il/mod.d.ts +3 -2
- package/dist/in/aadhaar.d.ts +2 -3
- package/dist/in/aadhaar.js +2 -12
- package/dist/in/aadhaar.js.map +1 -1
- package/dist/in/gstin.d.ts +2 -3
- package/dist/in/gstin.js +4 -11
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/mod.d.ts +3 -2
- package/dist/in/pan.d.ts +15 -2
- package/dist/in/pan.js +3 -15
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/iq/mod.d.ts +3 -2
- package/dist/iq/nid.d.ts +16 -2
- package/dist/iq/nid.js +2 -15
- package/dist/iq/nid.js.map +1 -1
- package/dist/ir/mod.d.ts +3 -2
- package/dist/ir/nid.d.ts +2 -3
- package/dist/ir/nid.js +2 -24
- package/dist/ir/nid.js.map +1 -1
- package/dist/is/kennitala.d.ts +2 -3
- package/dist/is/kennitala.js +2 -13
- package/dist/is/kennitala.js.map +1 -1
- package/dist/is/mod.d.ts +3 -2
- package/dist/is/vsk.d.ts +9 -2
- package/dist/is/vsk.js +1 -7
- package/dist/is/vsk.js.map +1 -1
- package/dist/isin.d.ts +2 -3
- package/dist/isin.js +11 -21
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +5 -4
- package/dist/it/codicefiscale.js +27 -23
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +2 -3
- package/dist/it/iva.js +2 -9
- package/dist/it/iva.js.map +1 -1
- package/dist/it/mod.d.ts +3 -2
- package/dist/jp/cn.d.ts +2 -3
- package/dist/jp/cn.js +1 -9
- package/dist/jp/cn.js.map +1 -1
- package/dist/jp/mod.d.ts +3 -2
- package/dist/jp/mynumber.d.ts +2 -3
- package/dist/jp/mynumber.js +1 -10
- package/dist/jp/mynumber.js.map +1 -1
- package/dist/kr/brn.d.ts +11 -2
- package/dist/kr/brn.js +1 -9
- package/dist/kr/brn.js.map +1 -1
- package/dist/kr/mod.d.ts +3 -2
- package/dist/kr/rrn.d.ts +5 -4
- package/dist/kr/rrn.js +15 -13
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +6 -5
- package/dist/kw/civil.js +20 -17
- package/dist/kw/civil.js.map +1 -1
- package/dist/kw/mod.d.ts +3 -2
- package/dist/kz/iin.d.ts +2 -3
- package/dist/kz/iin.js +4 -18
- package/dist/kz/iin.js.map +1 -1
- package/dist/kz/mod.d.ts +3 -2
- package/dist/lei.d.ts +2 -3
- package/dist/lei.js +2 -11
- package/dist/lei.js.map +1 -1
- package/dist/li/mod.d.ts +3 -2
- package/dist/li/peid.d.ts +11 -2
- package/dist/li/peid.js +1 -9
- package/dist/li/peid.js.map +1 -1
- package/dist/lk/mod.d.ts +3 -2
- package/dist/lk/nic.d.ts +5 -4
- package/dist/lk/nic.js +16 -16
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +2 -3
- package/dist/lt/asmens.js +2 -1
- package/dist/lt/asmens.js.map +1 -1
- package/dist/lt/mod.d.ts +3 -2
- package/dist/lt/vat.d.ts +2 -3
- package/dist/lt/vat.js +2 -10
- package/dist/lt/vat.js.map +1 -1
- package/dist/lu/mod.d.ts +3 -2
- package/dist/lu/vat.d.ts +2 -3
- package/dist/lu/vat.js +2 -8
- package/dist/lu/vat.js.map +1 -1
- package/dist/luhn.d.ts +2 -3
- package/dist/luhn.js +9 -9
- package/dist/luhn.js.map +1 -1
- package/dist/lv/mod.d.ts +3 -2
- package/dist/lv/vat.d.ts +2 -3
- package/dist/lv/vat.js +19 -18
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +2 -3
- package/dist/ma/ice.js +2 -11
- package/dist/ma/ice.js.map +1 -1
- package/dist/ma/mod.d.ts +3 -2
- package/dist/mc/mod.d.ts +3 -2
- package/dist/mc/tva.d.ts +2 -3
- package/dist/mc/tva.js +1 -0
- package/dist/mc/tva.js.map +1 -1
- package/dist/md/idno.d.ts +2 -3
- package/dist/md/idno.js +1 -10
- package/dist/md/idno.js.map +1 -1
- package/dist/md/mod.d.ts +3 -2
- package/dist/me/mod.d.ts +3 -2
- package/dist/me/pib.d.ts +2 -3
- package/dist/me/pib.js +2 -10
- package/dist/me/pib.js.map +1 -1
- package/dist/mk/edb.d.ts +2 -3
- package/dist/mk/edb.js +2 -11
- package/dist/mk/edb.js.map +1 -1
- package/dist/mk/mod.d.ts +3 -2
- package/dist/mt/mod.d.ts +3 -2
- package/dist/mt/vat.d.ts +2 -3
- package/dist/mt/vat.js +3 -10
- package/dist/mt/vat.js.map +1 -1
- package/dist/mu/brn.d.ts +23 -2
- package/dist/mu/brn.js +1 -21
- package/dist/mu/brn.js.map +1 -1
- package/dist/mu/mod.d.ts +3 -2
- package/dist/mx/clabe.d.ts +2 -3
- package/dist/mx/clabe.js +1 -14
- package/dist/mx/clabe.js.map +1 -1
- package/dist/mx/curp.d.ts +5 -4
- package/dist/mx/curp.js +27 -19
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/mod.d.ts +3 -2
- package/dist/mx/rfc.d.ts +5 -4
- package/dist/mx/rfc.js +23 -20
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/mod.d.ts +3 -2
- package/dist/my/nric.d.ts +5 -4
- package/dist/my/nric.js +18 -16
- package/dist/my/nric.js.map +1 -1
- package/dist/ng/mod.d.ts +3 -2
- package/dist/ng/nin.d.ts +13 -2
- package/dist/ng/nin.js +1 -11
- package/dist/ng/nin.js.map +1 -1
- package/dist/ni/mod.d.ts +3 -2
- package/dist/ni/ruc.d.ts +2 -3
- package/dist/ni/ruc.js +1 -23
- package/dist/ni/ruc.js.map +1 -1
- package/dist/nl/bsn.d.ts +2 -3
- package/dist/nl/bsn.js +2 -10
- package/dist/nl/bsn.js.map +1 -1
- package/dist/nl/kvk.d.ts +9 -2
- package/dist/nl/kvk.js +1 -7
- package/dist/nl/kvk.js.map +1 -1
- package/dist/nl/mod.d.ts +3 -2
- package/dist/nl/vat.d.ts +2 -3
- package/dist/nl/vat.js +4 -50
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +2 -3
- package/dist/no/fodselsnummer.js +3 -10
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mod.d.ts +3 -2
- package/dist/no/mva.d.ts +2 -3
- package/dist/no/mva.js +1 -8
- package/dist/no/mva.js.map +1 -1
- package/dist/no/orgnr.d.ts +2 -3
- package/dist/no/orgnr.js +2 -8
- package/dist/no/orgnr.js.map +1 -1
- package/dist/nz/ird.d.ts +2 -3
- package/dist/nz/ird.js +4 -13
- package/dist/nz/ird.js.map +1 -1
- package/dist/nz/mod.d.ts +3 -2
- package/dist/pa/mod.d.ts +3 -2
- package/dist/pa/ruc.d.ts +2 -3
- package/dist/pa/ruc.js +4 -19
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +8 -10
- package/dist/patterns.js +83 -28
- package/dist/patterns.js.map +1 -1
- package/dist/pe/mod.d.ts +3 -2
- package/dist/pe/ruc.d.ts +2 -3
- package/dist/pe/ruc.js +10 -24
- package/dist/pe/ruc.js.map +1 -1
- package/dist/ph/mod.d.ts +3 -2
- package/dist/ph/philid.d.ts +14 -2
- package/dist/ph/philid.js +1 -12
- package/dist/ph/philid.js.map +1 -1
- package/dist/pk/cnic.d.ts +14 -2
- package/dist/pk/cnic.js +1 -12
- package/dist/pk/cnic.js.map +1 -1
- package/dist/pk/mod.d.ts +3 -2
- package/dist/pl/mod.d.ts +3 -2
- package/dist/pl/nip.d.ts +2 -3
- package/dist/pl/nip.js +2 -10
- package/dist/pl/nip.js.map +1 -1
- package/dist/pl/pesel.d.ts +2 -3
- package/dist/pl/pesel.js +4 -13
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +2 -3
- package/dist/pl/regon.js +2 -11
- package/dist/pl/regon.js.map +1 -1
- package/dist/pt/cc.d.ts +2 -3
- package/dist/pt/cc.js +7 -13
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/mod.d.ts +3 -2
- package/dist/pt/vat.d.ts +2 -3
- package/dist/pt/vat.js +3 -11
- package/dist/pt/vat.js.map +1 -1
- package/dist/ro/cnp.d.ts +2 -3
- package/dist/ro/cnp.js +5 -14
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/mod.d.ts +3 -2
- package/dist/ro/vat.d.ts +2 -3
- package/dist/ro/vat.js +13 -11
- package/dist/ro/vat.js.map +1 -1
- package/dist/rs/mod.d.ts +3 -2
- package/dist/rs/pib.d.ts +2 -3
- package/dist/rs/pib.js +1 -9
- package/dist/rs/pib.js.map +1 -1
- package/dist/ru/inn.d.ts +2 -3
- package/dist/ru/inn.js +2 -12
- package/dist/ru/inn.js.map +1 -1
- package/dist/ru/mod.d.ts +3 -2
- package/dist/se/mod.d.ts +3 -2
- package/dist/se/orgnr.d.ts +2 -3
- package/dist/se/orgnr.js +2 -9
- package/dist/se/orgnr.js.map +1 -1
- package/dist/se/personnummer.d.ts +2 -3
- package/dist/se/personnummer.js +8 -15
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +2 -3
- package/dist/se/vat.js +3 -10
- package/dist/se/vat.js.map +1 -1
- package/dist/sg/mod.d.ts +3 -2
- package/dist/sg/uen.d.ts +2 -3
- package/dist/sg/uen.js +47 -70
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +2 -3
- package/dist/si/emso.js +12 -14
- package/dist/si/emso.js.map +1 -1
- package/dist/si/mod.d.ts +3 -2
- package/dist/si/vat.d.ts +2 -3
- package/dist/si/vat.js +3 -12
- package/dist/si/vat.js.map +1 -1
- package/dist/sk/dic.d.ts +2 -3
- package/dist/sk/dic.js +1 -0
- package/dist/sk/dic.js.map +1 -1
- package/dist/sk/ico.d.ts +2 -3
- package/dist/sk/ico.js +1 -0
- package/dist/sk/ico.js.map +1 -1
- package/dist/sk/mod.d.ts +3 -2
- package/dist/sk/rc.d.ts +4 -5
- package/dist/sk/rc.js +6 -2
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/mod.d.ts +3 -2
- package/dist/th/tin.d.ts +2 -3
- package/dist/th/tin.js +1 -11
- package/dist/th/tin.js.map +1 -1
- package/dist/tr/mod.d.ts +3 -2
- package/dist/tr/tckimlik.d.ts +2 -3
- package/dist/tr/tckimlik.js +1 -20
- package/dist/tr/tckimlik.js.map +1 -1
- package/dist/tr/vkn.d.ts +2 -3
- package/dist/tr/vkn.js +1 -20
- package/dist/tr/vkn.js.map +1 -1
- package/dist/tw/mod.d.ts +3 -2
- package/dist/tw/ubn.d.ts +2 -3
- package/dist/tw/ubn.js +2 -12
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +56 -21
- package/dist/ua/edrpou.d.ts +2 -3
- package/dist/ua/edrpou.js +5 -12
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/ua/mod.d.ts +3 -2
- package/dist/us/ein.d.ts +12 -2
- package/dist/us/ein.js +88 -97
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.d.ts +13 -2
- package/dist/us/itin.js +4 -15
- package/dist/us/itin.js.map +1 -1
- package/dist/us/mod.d.ts +3 -2
- package/dist/us/rtn.d.ts +2 -3
- package/dist/us/rtn.js +11 -23
- package/dist/us/rtn.js.map +1 -1
- package/dist/us/ssn.d.ts +13 -2
- package/dist/us/ssn.js +1 -11
- package/dist/us/ssn.js.map +1 -1
- package/dist/uy/mod.d.ts +3 -2
- package/dist/uy/rut.d.ts +2 -3
- package/dist/uy/rut.js +2 -15
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/mod.d.ts +3 -2
- package/dist/ve/rif.d.ts +2 -3
- package/dist/ve/rif.js +13 -26
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mod.d.ts +3 -2
- package/dist/vn/mst.d.ts +2 -3
- package/dist/vn/mst.js +1 -12
- package/dist/vn/mst.js.map +1 -1
- package/dist/za/idnr.d.ts +2 -3
- package/dist/za/idnr.js +4 -16
- package/dist/za/idnr.js.map +1 -1
- package/dist/za/mod.d.ts +3 -2
- package/package.json +34 -21
- package/src/_checksums/mod1110.ts +1 -1
- package/src/_checksums/mod112.ts +7 -6
- package/src/_util/generate.ts +38 -0
- package/src/ad/nrt.ts +19 -7
- package/src/ae/eid.ts +7 -3
- package/src/ai/tin.ts +7 -3
- package/src/al/nipt.ts +7 -3
- package/src/am/tin.ts +7 -3
- package/src/ar/cbu.ts +9 -5
- package/src/ar/cuit.ts +22 -10
- package/src/ar/dni.ts +7 -3
- package/src/at/businessid.ts +7 -3
- package/src/at/tin.ts +7 -3
- package/src/at/uid.ts +7 -3
- package/src/at/vnr.ts +62 -12
- package/src/au/abn.ts +7 -3
- package/src/au/acn.ts +7 -3
- package/src/au/tfn.ts +7 -3
- package/src/az/voen.ts +9 -3
- package/src/ba/jmbg.ts +9 -7
- package/src/bd/nid.ts +11 -7
- package/src/be/bis.ts +8 -4
- package/src/be/nn.ts +7 -3
- package/src/be/vat.ts +7 -3
- package/src/bg/egn.ts +19 -10
- package/src/bg/pnf.ts +7 -3
- package/src/bg/vat.ts +8 -3
- package/src/bh/cpr.ts +17 -4
- package/src/bic.ts +26 -20
- package/src/br/cnpj.ts +7 -3
- package/src/br/cpf.ts +7 -3
- package/src/by/unp.ts +19 -9
- package/src/bz/tin.ts +19 -4
- package/src/ca/bn.ts +7 -3
- package/src/ca/sin.ts +7 -3
- package/src/ch/ssn.ts +7 -3
- package/src/ch/uid.ts +7 -3
- package/src/ch/vat.ts +9 -5
- package/src/cl/rut.ts +11 -5
- package/src/cn/ric.ts +11 -7
- package/src/cn/uscc.ts +27 -11
- package/src/co/nit.ts +14 -6
- package/src/cr/cpf.ts +11 -6
- package/src/creditcard.ts +10 -6
- package/src/cu/ni.ts +28 -7
- package/src/cy/vat.ts +7 -3
- package/src/cz/dic.ts +9 -4
- package/src/cz/ico.ts +7 -3
- package/src/cz/rc.ts +61 -29
- package/src/de/handelsreg.ts +21 -6
- package/src/de/idnr.ts +10 -3
- package/src/de/stnr.ts +11 -3
- package/src/de/svnr.ts +14 -5
- package/src/de/vat.ts +7 -3
- package/src/dk/cpr.ts +23 -8
- package/src/dk/cvr.ts +7 -3
- package/src/dk/vat.ts +8 -3
- package/src/do/rnc.ts +9 -5
- package/src/ec/ruc.ts +9 -5
- package/src/ee/ik.ts +21 -10
- package/src/ee/registrikood.ts +12 -7
- package/src/ee/vat.ts +7 -3
- package/src/eg/tn.ts +7 -3
- package/src/es/cif.ts +10 -7
- package/src/es/dni.ts +7 -3
- package/src/es/nie.ts +18 -9
- package/src/es/nss.ts +7 -3
- package/src/es/vat.ts +13 -5
- package/src/eu/vat.ts +55 -6
- package/src/fi/hetu.ts +26 -8
- package/src/fi/vat.ts +8 -3
- package/src/fi/ytunnus.ts +7 -3
- package/src/fr/nif.ts +7 -3
- package/src/fr/nir.ts +9 -7
- package/src/fr/siren.ts +7 -3
- package/src/fr/siret.ts +7 -3
- package/src/fr/tva.ts +7 -3
- package/src/gb/nino.ts +18 -13
- package/src/gb/sedol.ts +21 -15
- package/src/gb/utr.ts +7 -3
- package/src/gb/vat.ts +7 -3
- package/src/ge/pin.ts +7 -3
- package/src/gh/tin.ts +11 -6
- package/src/gr/amka.ts +7 -3
- package/src/gr/vat.ts +7 -3
- package/src/gt/nit.ts +13 -6
- package/src/hk/hkid.ts +9 -4
- package/src/hr/vat.ts +7 -3
- package/src/hu/vat.ts +8 -3
- package/src/iban.ts +7 -3
- package/src/id/npwp.ts +7 -3
- package/src/ie/pps.ts +7 -3
- package/src/ie/vat.ts +7 -3
- package/src/il/idnr.ts +7 -3
- package/src/in/aadhaar.ts +7 -3
- package/src/in/gstin.ts +10 -4
- package/src/in/pan.ts +15 -6
- package/src/index.ts +6 -0
- package/src/iq/nid.ts +7 -3
- package/src/ir/nid.ts +7 -3
- package/src/is/kennitala.ts +7 -3
- package/src/is/vsk.ts +7 -3
- package/src/isin.ts +17 -7
- package/src/it/codicefiscale.ts +49 -7
- package/src/it/iva.ts +7 -3
- package/src/jp/cn.ts +7 -3
- package/src/jp/mynumber.ts +7 -3
- package/src/kr/brn.ts +7 -3
- package/src/kr/rrn.ts +27 -8
- package/src/kw/civil.ts +31 -14
- package/src/kz/iin.ts +9 -8
- package/src/lei.ts +7 -3
- package/src/li/peid.ts +7 -3
- package/src/lk/nic.ts +31 -8
- package/src/lt/asmens.ts +8 -4
- package/src/lt/vat.ts +8 -3
- package/src/lu/vat.ts +8 -3
- package/src/luhn.ts +10 -3
- package/src/lv/vat.ts +53 -23
- package/src/ma/ice.ts +7 -3
- package/src/mc/tva.ts +9 -5
- package/src/md/idno.ts +7 -3
- package/src/me/pib.ts +7 -3
- package/src/mk/edb.ts +7 -3
- package/src/mt/vat.ts +8 -3
- package/src/mu/brn.ts +7 -3
- package/src/mx/clabe.ts +7 -3
- package/src/mx/curp.ts +47 -10
- package/src/mx/rfc.ts +42 -7
- package/src/my/nric.ts +33 -8
- package/src/ng/nin.ts +7 -3
- package/src/ni/ruc.ts +7 -3
- package/src/nl/bsn.ts +7 -3
- package/src/nl/kvk.ts +7 -3
- package/src/nl/vat.ts +18 -69
- package/src/no/fodselsnummer.ts +12 -7
- package/src/no/mva.ts +9 -5
- package/src/no/orgnr.ts +7 -3
- package/src/nz/ird.ts +12 -8
- package/src/pa/ruc.ts +39 -11
- package/src/patterns.ts +184 -46
- package/src/pe/ruc.ts +13 -10
- package/src/ph/philid.ts +7 -3
- package/src/pk/cnic.ts +9 -3
- package/src/pl/nip.ts +7 -3
- package/src/pl/pesel.ts +9 -7
- package/src/pl/regon.ts +7 -3
- package/src/pt/cc.ts +13 -7
- package/src/pt/vat.ts +8 -3
- package/src/ro/cnp.ts +16 -8
- package/src/ro/vat.ts +8 -3
- package/src/rs/pib.ts +7 -3
- package/src/ru/inn.ts +9 -5
- package/src/se/orgnr.ts +7 -3
- package/src/se/personnummer.ts +35 -32
- package/src/se/vat.ts +8 -3
- package/src/sg/uen.ts +44 -23
- package/src/si/emso.ts +37 -11
- package/src/si/vat.ts +8 -3
- package/src/sk/dic.ts +8 -4
- package/src/sk/ico.ts +3 -2
- package/src/sk/rc.ts +17 -4
- package/src/th/tin.ts +7 -3
- package/src/tr/tckimlik.ts +7 -3
- package/src/tr/vkn.ts +7 -3
- package/src/tw/ubn.ts +9 -5
- package/src/types.ts +69 -7
- package/src/ua/edrpou.ts +10 -5
- package/src/us/ein.ts +95 -91
- package/src/us/itin.ts +14 -11
- package/src/us/rtn.ts +32 -19
- package/src/us/ssn.ts +7 -3
- package/src/uy/rut.ts +9 -5
- package/src/ve/rif.ts +19 -12
- package/src/vn/mst.ts +7 -3
- package/src/za/idnr.ts +9 -7
package/dist/us/ssn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssn.js","names":[],"sources":["../../src/us/ssn.ts"],"sourcesContent":["/** Generate a random valid U.S. SSN. */\nconst generate = (): string => {\n for (;;) {\n let area: string;\n do {\n area = String(randomInt(1, 899)).padStart(3, \"0\");\n } while (area === \"666\");\n const group = String(randomInt(1, 99)).padStart(2, \"0\");\n const serial = String(randomInt(1, 9999)).padStart(\n 4,\n \"0\",\n );\n const ssn = `${area}${group}${serial}`;\n if (!BLACKLIST.has(ssn)) return ssn;\n }\n};\n\n/**\n * SSN (U.S. Social Security Number).\n *\n * 9-digit identifier: 3-digit area, 2-digit group,\n * 4-digit serial. No checksum. Area cannot be 000,\n * 666, or 900-999; group cannot be 00; serial\n * cannot be 0000.\n *\n * @see https://en.wikipedia.org/wiki/Social_Security_number\n * @see https://www.ssa.gov/employer/verifySSN.htm\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"ssn.js","names":[],"sources":["../../src/us/ssn.ts"],"sourcesContent":["/** Generate a random valid U.S. SSN. */\nconst generate = (): string => {\n for (;;) {\n let area: string;\n do {\n area = String(randomInt(1, 899)).padStart(3, \"0\");\n } while (area === \"666\");\n const group = String(randomInt(1, 99)).padStart(2, \"0\");\n const serial = String(randomInt(1, 9999)).padStart(\n 4,\n \"0\",\n );\n const ssn = `${area}${group}${serial}`;\n if (!BLACKLIST.has(ssn)) return ssn;\n }\n};\n\n/**\n * SSN (U.S. Social Security Number).\n *\n * 9-digit identifier: 3-digit area, 2-digit group,\n * 4-digit serial. No checksum. Area cannot be 000,\n * 666, or 900-999; group cannot be 00; serial\n * cannot be 0000.\n *\n * @see https://en.wikipedia.org/wiki/Social_Security_number\n * @see https://www.ssa.gov/employer/verifySSN.htm\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\n/** Known-invalid SSNs used in advertisements. */\nconst BLACKLIST = new Set([\n \"078051120\",\n \"457555462\",\n \"219099999\",\n]);\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"SSN must contain only digits\",\n );\n }\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"SSN must be 9 digits\");\n }\n\n const area = v.slice(0, 3);\n const group = v.slice(3, 5);\n const serial = v.slice(5, 9);\n\n if (area === \"000\" || area === \"666\" || area[0] === \"9\") {\n return err(\n \"INVALID_COMPONENT\",\n \"SSN area number is invalid\",\n );\n }\n if (group === \"00\") {\n return err(\n \"INVALID_COMPONENT\",\n \"SSN group number cannot be 00\",\n );\n }\n if (serial === \"0000\") {\n return err(\n \"INVALID_COMPONENT\",\n \"SSN serial number cannot be 0000\",\n );\n }\n if (BLACKLIST.has(v)) {\n return err(\n \"INVALID_COMPONENT\",\n \"SSN is on the blacklist\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 9) {\n return `${v.slice(0, 3)}-${v.slice(3, 5)}-${v.slice(5)}`;\n }\n return v;\n};\n\n/** U.S. Social Security Number. */\nconst ssn: CountryValidator<\"US\"> = {\n name: \"Social Security Number\",\n localName: \"Social Security Number\",\n abbreviation: \"SSN\",\n aliases: [\"SSN\", \"Social Security Number\"] as const,\n candidatePattern: \"\\\\d{3}-?\\\\d{2}-?\\\\d{4}\",\n scope: \"country\",\n country: \"US\",\n entityType: \"person\",\n sourceUrl: \"https://www.ssa.gov/employer/verifySSN.htm\",\n examples: [\"536904399\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ssn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AACA,MAAM,iBAAyB;CAC7B,SAAS;EACP,IAAI;EACJ;GACE,OAAO,OAAO,UAAU,GAAG,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG;SACzC,SAAS;EAClB,MAAM,QAAQ,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACtD,MAAM,SAAS,OAAO,UAAU,GAAG,IAAI,CAAC,EAAE,SACxC,GACA,GACF;EACA,MAAM,MAAM,GAAG,OAAO,QAAQ;EAC9B,IAAI,CAAC,UAAU,IAAI,GAAG,GAAG,OAAO;CAClC;AACF;;AAyBA,MAAM,YAAY,IAAI,IAAI;CACxB;CACA;CACA;AACF,CAAC;AAED,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,EAAE,WAAW,GACf,OAAO,IAAI,kBAAkB,sBAAsB;CAGrD,MAAM,OAAO,EAAE,MAAM,GAAG,CAAC;CACzB,MAAM,QAAQ,EAAE,MAAM,GAAG,CAAC;CAC1B,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC;CAE3B,IAAI,SAAS,SAAS,SAAS,SAAS,KAAK,OAAO,KAClD,OAAO,IACL,qBACA,4BACF;CAEF,IAAI,UAAU,MACZ,OAAO,IACL,qBACA,+BACF;CAEF,IAAI,WAAW,QACb,OAAO,IACL,qBACA,kCACF;CAEF,IAAI,UAAU,IAAI,CAAC,GACjB,OAAO,IACL,qBACA,yBACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;CAEvD,OAAO;AACT;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,wBAAwB;CACzC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/uy/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import rut from "./rut.js";
|
|
3
2
|
|
|
4
3
|
//#region src/uy/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { rut };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, rut };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/uy/rut.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/uy/rut.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
@@ -12,7 +11,7 @@ declare const generate: () => string;
|
|
|
12
11
|
*
|
|
13
12
|
* Examples sourced from python-stdnum test suite.
|
|
14
13
|
*/
|
|
15
|
-
declare const rut:
|
|
14
|
+
declare const rut: CountryValidator<"UY">;
|
|
16
15
|
//#endregion
|
|
17
16
|
export { compact, rut as default, format, generate, validate };
|
|
18
17
|
//# sourceMappingURL=rut.d.ts.map
|
package/dist/uy/rut.js
CHANGED
|
@@ -3,20 +3,6 @@ import { randomDigits, randomInt } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/uy/rut.ts
|
|
6
|
-
/**
|
|
7
|
-
* RUT (Registro Único Tributario).
|
|
8
|
-
*
|
|
9
|
-
* Uruguayan tax identification number issued by the
|
|
10
|
-
* DGI (Dirección General Impositiva). The number is
|
|
11
|
-
* 12 digits: 2-digit document type (01-22), 6-digit
|
|
12
|
-
* sequence, fixed "001" suffix, and a check digit
|
|
13
|
-
* computed via weighted sum mod 11 (Python-style
|
|
14
|
-
* modulo of the negated sum).
|
|
15
|
-
*
|
|
16
|
-
* Format: ############ (12 digits compact)
|
|
17
|
-
*
|
|
18
|
-
* @see https://www.agesic.gub.uy/
|
|
19
|
-
*/
|
|
20
6
|
const WEIGHTS = [
|
|
21
7
|
4,
|
|
22
8
|
3,
|
|
@@ -42,7 +28,7 @@ const compact = (value) => {
|
|
|
42
28
|
const pymod = (a, b) => (a % b + b) % b;
|
|
43
29
|
const calcCheckDigit = (value) => {
|
|
44
30
|
let sum = 0;
|
|
45
|
-
for (
|
|
31
|
+
for (const [i, weight] of WEIGHTS.entries()) sum += Number(value[i]) * weight;
|
|
46
32
|
const result = pymod(-sum, 11);
|
|
47
33
|
if (result === 10) return null;
|
|
48
34
|
return String(result);
|
|
@@ -89,6 +75,7 @@ const rut = {
|
|
|
89
75
|
abbreviation: "RUT",
|
|
90
76
|
aliases: ["RUT", "Registro Único Tributario"],
|
|
91
77
|
candidatePattern: "\\d{12}",
|
|
78
|
+
scope: "country",
|
|
92
79
|
country: "UY",
|
|
93
80
|
entityType: "any",
|
|
94
81
|
lengths: [12],
|
package/dist/uy/rut.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rut.js","names":[],"sources":["../../src/uy/rut.ts"],"sourcesContent":["/**\n * RUT (Registro Único Tributario).\n *\n * Uruguayan tax identification number issued by the\n * DGI (Dirección General Impositiva). The number is\n * 12 digits: 2-digit document type (01-22), 6-digit\n * sequence, fixed \"001\" suffix, and a check digit\n * computed via weighted sum mod 11 (Python-style\n * modulo of the negated sum).\n *\n * Format: ############ (12 digits compact)\n *\n * @see https://www.agesic.gub.uy/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"rut.js","names":[],"sources":["../../src/uy/rut.ts"],"sourcesContent":["/**\n * RUT (Registro Único Tributario).\n *\n * Uruguayan tax identification number issued by the\n * DGI (Dirección General Impositiva). The number is\n * 12 digits: 2-digit document type (01-22), 6-digit\n * sequence, fixed \"001\" suffix, and a check digit\n * computed via weighted sum mod 11 (Python-style\n * modulo of the negated sum).\n *\n * Format: ############ (12 digits compact)\n *\n * @see https://www.agesic.gub.uy/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -\").trim();\n if (v.toUpperCase().startsWith(\"UY\")) {\n v = v.slice(2);\n }\n return v;\n};\n\n/**\n * Python-style modulo: always returns a non-negative\n * result for a positive divisor.\n */\nconst pymod = (a: number, b: number): number =>\n ((a % b) + b) % b;\n\nconst calcCheckDigit = (value: string): string | null => {\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(value[i]) * weight;\n }\n const result = pymod(-sum, 11);\n // A result of 10 means no valid single-digit check\n // digit exists; the DGI does not issue such numbers.\n if (result === 10) return null;\n return String(result);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 12) {\n return err(\"INVALID_LENGTH\", \"RUT must be 12 digits\");\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"RUT must contain only digits\",\n );\n }\n\n // First 2 digits: document type (01-22)\n const docType = Number.parseInt(v.slice(0, 2), 10);\n if (docType < 1 || docType > 22) {\n return err(\n \"INVALID_COMPONENT\",\n \"RUT document type must be between 01 and 22\",\n );\n }\n\n // Digits 2-8: sequence (must not be all zeros)\n if (v.slice(2, 8) === \"000000\") {\n return err(\n \"INVALID_COMPONENT\",\n \"RUT sequence must not be all zeros\",\n );\n }\n\n // Digits 8-11: must be \"001\"\n if (v.slice(8, 11) !== \"001\") {\n return err(\n \"INVALID_COMPONENT\",\n \"RUT branch code must be 001\",\n );\n }\n\n const expected = calcCheckDigit(v);\n if (expected === null || v.at(-1) !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"RUT check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)}-${v.slice(2, 8)}-${v.slice(8, 11)}-${v.slice(11)}`;\n};\n\n/** Generate a random valid Uruguayan RUT. */\nconst generate = (): string => {\n for (;;) {\n const docType = String(randomInt(1, 22)).padStart(\n 2,\n \"0\",\n );\n const seq = randomDigits(6);\n if (seq === \"000000\") continue;\n const partial = `${docType}${seq}001`;\n const check = calcCheckDigit(partial);\n if (check === null) continue;\n return `${partial}${check}`;\n }\n};\n\n/**\n * Uruguayan RUT (tax identification number).\n *\n * Examples sourced from python-stdnum test suite.\n */\nconst rut: CountryValidator<\"UY\"> = {\n name: \"Uruguayan Tax ID\",\n localName: \"Registro Único Tributario\",\n abbreviation: \"RUT\",\n aliases: [\"RUT\", \"Registro Único Tributario\"] as const,\n candidatePattern: \"\\\\d{12}\",\n scope: \"country\",\n country: \"UY\",\n entityType: \"any\",\n lengths: [12] as const,\n examples: [\"010100010013\", \"102000010017\"] as const,\n compact,\n format,\n validate,\n sourceUrl: \"https://www.agesic.gub.uy/\",\n generate,\n};\n\nexport default rut;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAyBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEhD,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,IAAI,EAAE,KAAK;CAChC,IAAI,EAAE,YAAY,EAAE,WAAW,IAAI,GACjC,IAAI,EAAE,MAAM,CAAC;CAEf,OAAO;AACT;;;;;AAMA,MAAM,SAAS,GAAW,OACtB,IAAI,IAAK,KAAK;AAElB,MAAM,kBAAkB,UAAiC;CACvD,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GACxC,OAAO,OAAO,MAAM,EAAE,IAAI;CAE5B,MAAM,SAAS,MAAM,CAAC,KAAK,EAAE;CAG7B,IAAI,WAAW,IAAI,OAAO;CAC1B,OAAO,OAAO,MAAM;AACtB;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,IACf,OAAO,IAAI,kBAAkB,uBAAuB;CAGtD,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAIF,MAAM,UAAU,OAAO,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;CACjD,IAAI,UAAU,KAAK,UAAU,IAC3B,OAAO,IACL,qBACA,6CACF;CAIF,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,UACpB,OAAO,IACL,qBACA,oCACF;CAIF,IAAI,EAAE,MAAM,GAAG,EAAE,MAAM,OACrB,OAAO,IACL,qBACA,6BACF;CAGF,MAAM,WAAW,eAAe,CAAC;CACjC,IAAI,aAAa,QAAQ,EAAE,GAAG,EAAE,MAAM,UACpC,OAAO,IACL,oBACA,gCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;AAC1E;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,UAAU,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SACvC,GACA,GACF;EACA,MAAM,MAAM,aAAa,CAAC;EAC1B,IAAI,QAAQ,UAAU;EACtB,MAAM,UAAU,GAAG,UAAU,IAAI;EACjC,MAAM,QAAQ,eAAe,OAAO;EACpC,IAAI,UAAU,MAAM;EACpB,OAAO,GAAG,UAAU;CACtB;AACF;;;;;;AAOA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,2BAA2B;CAC5C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,gBAAgB,cAAc;CACzC;CACA;CACA;CACA,WAAW;CACX;AACF"}
|
package/dist/ve/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import rif from "./rif.js";
|
|
3
2
|
|
|
4
3
|
//#region src/ve/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { rif };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, rif };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/ve/rif.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ve/rif.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
@@ -12,7 +11,7 @@ declare const generate: () => string;
|
|
|
12
11
|
*
|
|
13
12
|
* Examples sourced from python-stdnum test suite.
|
|
14
13
|
*/
|
|
15
|
-
declare const rif:
|
|
14
|
+
declare const rif: CountryValidator<"VE">;
|
|
16
15
|
//#endregion
|
|
17
16
|
export { compact, rif as default, format, generate, validate };
|
|
18
17
|
//# sourceMappingURL=rif.d.ts.map
|
package/dist/ve/rif.js
CHANGED
|
@@ -1,23 +1,9 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
-
import { randomDigits,
|
|
2
|
+
import { randomDigits, randomPick } from "../_util/generate.js";
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/ve/rif.ts
|
|
6
6
|
/**
|
|
7
|
-
* RIF (Registro de Información Fiscal).
|
|
8
|
-
*
|
|
9
|
-
* Venezuelan tax identification number issued by the
|
|
10
|
-
* SENIAT. The number consists of 1 letter indicating
|
|
11
|
-
* the entity type (J=juridical, G=government,
|
|
12
|
-
* V=natural/Venezuelan, E=foreign, P=passport)
|
|
13
|
-
* followed by 8 digits and a check digit computed
|
|
14
|
-
* via weighted sum mod 11.
|
|
15
|
-
*
|
|
16
|
-
* Format: X-########-# or X######### (10 chars compact)
|
|
17
|
-
*
|
|
18
|
-
* @see https://en.wikipedia.org/wiki/Tax_Identification_Number#Venezuela
|
|
19
|
-
*/
|
|
20
|
-
/**
|
|
21
7
|
* Map prefix letter to its numeric offset used
|
|
22
8
|
* in the check digit computation.
|
|
23
9
|
*/
|
|
@@ -46,9 +32,9 @@ const WEIGHTS = [
|
|
|
46
32
|
const CHECK_LOOKUP = "00987654321";
|
|
47
33
|
const compact = (value) => clean(value, " -.").trim().toUpperCase();
|
|
48
34
|
const calcCheckDigit = (prefix, body) => {
|
|
49
|
-
const pv = PREFIX_VALUES[prefix];
|
|
35
|
+
const pv = PREFIX_VALUES[prefix] ?? 0;
|
|
50
36
|
let sum = 0;
|
|
51
|
-
for (
|
|
37
|
+
for (const [i, weight] of WEIGHTS.entries()) sum += Number(body[i]) * weight;
|
|
52
38
|
return CHECK_LOOKUP[(pv + sum % 11) % 11];
|
|
53
39
|
};
|
|
54
40
|
const validate = (value) => {
|
|
@@ -69,18 +55,18 @@ const format = (value) => {
|
|
|
69
55
|
const v = compact(value);
|
|
70
56
|
return `${v[0]}-${v.slice(1, 9)}-${v.slice(9)}`;
|
|
71
57
|
};
|
|
58
|
+
const GENERATE_TYPES = [
|
|
59
|
+
"V",
|
|
60
|
+
"E",
|
|
61
|
+
"J",
|
|
62
|
+
"P",
|
|
63
|
+
"G"
|
|
64
|
+
];
|
|
72
65
|
/** Generate a random valid Venezuelan RIF. */
|
|
73
66
|
const generate = () => {
|
|
74
|
-
const
|
|
75
|
-
"V",
|
|
76
|
-
"E",
|
|
77
|
-
"J",
|
|
78
|
-
"P",
|
|
79
|
-
"G"
|
|
80
|
-
];
|
|
81
|
-
const prefix = types[randomInt(0, types.length - 1)];
|
|
67
|
+
const prefix = randomPick(GENERATE_TYPES);
|
|
82
68
|
const body = randomDigits(8);
|
|
83
|
-
return prefix + body +
|
|
69
|
+
return prefix + body + calcCheckDigit(prefix, body);
|
|
84
70
|
};
|
|
85
71
|
/**
|
|
86
72
|
* Venezuelan RIF (tax identification number).
|
|
@@ -93,6 +79,7 @@ const rif = {
|
|
|
93
79
|
abbreviation: "RIF",
|
|
94
80
|
aliases: ["RIF", "Registro de Información Fiscal"],
|
|
95
81
|
candidatePattern: "[VEJPG]-?\\d{8}-?\\d",
|
|
82
|
+
scope: "country",
|
|
96
83
|
country: "VE",
|
|
97
84
|
entityType: "any",
|
|
98
85
|
lengths: [10],
|
package/dist/ve/rif.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rif.js","names":[],"sources":["../../src/ve/rif.ts"],"sourcesContent":["/**\n * RIF (Registro de Información Fiscal).\n *\n * Venezuelan tax identification number issued by the\n * SENIAT. The number consists of 1 letter indicating\n * the entity type (J=juridical, G=government,\n * V=natural/Venezuelan, E=foreign, P=passport)\n * followed by 8 digits and a check digit computed\n * via weighted sum mod 11.\n *\n * Format: X-########-# or X######### (10 chars compact)\n *\n * @see https://en.wikipedia.org/wiki/Tax_Identification_Number#Venezuela\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits,
|
|
1
|
+
{"version":3,"file":"rif.js","names":[],"sources":["../../src/ve/rif.ts"],"sourcesContent":["/**\n * RIF (Registro de Información Fiscal).\n *\n * Venezuelan tax identification number issued by the\n * SENIAT. The number consists of 1 letter indicating\n * the entity type (J=juridical, G=government,\n * V=natural/Venezuelan, E=foreign, P=passport)\n * followed by 8 digits and a check digit computed\n * via weighted sum mod 11.\n *\n * Format: X-########-# or X######### (10 chars compact)\n *\n * @see https://en.wikipedia.org/wiki/Tax_Identification_Number#Venezuela\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\n/**\n * Map prefix letter to its numeric offset used\n * in the check digit computation.\n */\nconst PREFIX_VALUES: Record<string, number> = {\n V: 4,\n E: 8,\n J: 12,\n P: 16,\n G: 20,\n};\n\n/** Weights applied to the 8-digit body. */\nconst WEIGHTS = [3, 2, 7, 6, 5, 4, 3, 2] as const;\n\n/**\n * Lookup table for converting the mod 11 result\n * to the check character.\n */\nconst CHECK_LOOKUP = \"00987654321\";\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").trim().toUpperCase();\n\nconst calcCheckDigit = (\n prefix: string,\n body: string,\n): string => {\n const pv = PREFIX_VALUES[prefix] ?? 0;\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(body[i]) * weight;\n }\n const digit = (pv + (sum % 11)) % 11;\n // SAFETY: digit ∈ [0, 10] and CHECK_LOOKUP has 11 chars.\n // eslint-disable-next-line no-non-null-assertion\n return CHECK_LOOKUP[digit]!;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"RIF must be 10 characters\",\n );\n }\n\n // SAFETY: length check above guarantees v[0] exists.\n // eslint-disable-next-line no-non-null-assertion\n const prefix = v[0]!;\n if (!(prefix in PREFIX_VALUES)) {\n return err(\n \"INVALID_COMPONENT\",\n \"RIF must start with V, E, J, P, or G\",\n );\n }\n\n const body = v.slice(1, 9);\n const check = v.slice(9);\n if (!isdigits(v.slice(1))) {\n return err(\n \"INVALID_FORMAT\",\n \"RIF body must contain only digits\",\n );\n }\n\n const expected = calcCheckDigit(prefix, body);\n if (check !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"RIF check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v[0]}-${v.slice(1, 9)}-${v.slice(9)}`;\n};\n\nconst GENERATE_TYPES = [\"V\", \"E\", \"J\", \"P\", \"G\"] as const;\n\n/** Generate a random valid Venezuelan RIF. */\nconst generate = (): string => {\n const prefix = randomPick(GENERATE_TYPES);\n const body = randomDigits(8);\n return prefix + body + calcCheckDigit(prefix, body);\n};\n\n/**\n * Venezuelan RIF (tax identification number).\n *\n * Examples sourced from python-stdnum test suite.\n */\nconst rif: CountryValidator<\"VE\"> = {\n name: \"Venezuelan Tax ID\",\n localName: \"Registro de Información Fiscal\",\n abbreviation: \"RIF\",\n aliases: [\n \"RIF\",\n \"Registro de Información Fiscal\",\n ] as const,\n candidatePattern: \"[VEJPG]-?\\\\d{8}-?\\\\d\",\n scope: \"country\",\n country: \"VE\",\n entityType: \"any\",\n lengths: [10] as const,\n examples: [\"V309876543\", \"J309876546\"] as const,\n compact,\n format,\n validate,\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Tax_Identification_Number#Venezuela\",\n generate,\n};\n\nexport default rif;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;AA6BA,MAAM,gBAAwC;CAC5C,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;AACL;;AAGA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;;;;;AAMvC,MAAM,eAAe;AAErB,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY;AAEzC,MAAM,kBACJ,QACA,SACW;CACX,MAAM,KAAK,cAAc,WAAW;CACpC,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GACxC,OAAO,OAAO,KAAK,EAAE,IAAI;CAK3B,OAAO,cAHQ,KAAM,MAAM,MAAO;AAIpC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,2BACF;CAKF,MAAM,SAAS,EAAE;CACjB,IAAI,EAAE,UAAU,gBACd,OAAO,IACL,qBACA,sCACF;CAGF,MAAM,OAAO,EAAE,MAAM,GAAG,CAAC;CACzB,MAAM,QAAQ,EAAE,MAAM,CAAC;CACvB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,GACtB,OAAO,IACL,kBACA,mCACF;CAIF,IAAI,UADa,eAAe,QAAQ,IACnB,GACnB,OAAO,IACL,oBACA,gCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;AAC9C;AAEA,MAAM,iBAAiB;CAAC;CAAK;CAAK;CAAK;CAAK;AAAG;;AAG/C,MAAM,iBAAyB;CAC7B,MAAM,SAAS,WAAW,cAAc;CACxC,MAAM,OAAO,aAAa,CAAC;CAC3B,OAAO,SAAS,OAAO,eAAe,QAAQ,IAAI;AACpD;;;;;;AAOA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,OACA,gCACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,cAAc,YAAY;CACrC;CACA;CACA;CACA,WACE;CACF;AACF"}
|
package/dist/vn/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import mst from "./mst.js";
|
|
3
2
|
|
|
4
3
|
//#region src/vn/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { mst };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, mst };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/vn/mst.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/vn/mst.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Vietnamese MST. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Vietnamese Tax Number. */
|
|
11
|
-
declare const mst:
|
|
10
|
+
declare const mst: CountryValidator<"VN">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, mst as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=mst.d.ts.map
|
package/dist/vn/mst.js
CHANGED
|
@@ -3,18 +3,6 @@ import { randomDigits, randomInt } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/vn/mst.ts
|
|
6
|
-
/**
|
|
7
|
-
* MST (Mã số thuế, Vietnam tax number).
|
|
8
|
-
*
|
|
9
|
-
* 10 or 13 digits. The first two digits encode the province
|
|
10
|
-
* where the business was registered. Digits 3-9 are a
|
|
11
|
-
* sequential number (0000001-9999999). Digit 10 is a
|
|
12
|
-
* weighted mod-11 check digit. An optional 3-digit branch
|
|
13
|
-
* suffix (001-999) may follow, separated by a dash.
|
|
14
|
-
*
|
|
15
|
-
* @see https://vi.wikipedia.org/wiki/Thuế_Việt_Nam#Mã_số_thuế_(MST)_của_doanh_nghiệp
|
|
16
|
-
* @see https://easyinvoice.vn/ma-so-thue/
|
|
17
|
-
*/
|
|
18
6
|
const WEIGHTS = [
|
|
19
7
|
31,
|
|
20
8
|
29,
|
|
@@ -65,6 +53,7 @@ const mst = {
|
|
|
65
53
|
abbreviation: "MST",
|
|
66
54
|
aliases: ["MST", "mã số thuế"],
|
|
67
55
|
candidatePattern: "\\d{10}(-\\d{3})?",
|
|
56
|
+
scope: "country",
|
|
68
57
|
country: "VN",
|
|
69
58
|
entityType: "company",
|
|
70
59
|
description: "10- or 13-digit tax identifier for enterprises",
|
package/dist/vn/mst.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mst.js","names":[],"sources":["../../src/vn/mst.ts"],"sourcesContent":["/**\n * MST (Mã số thuế, Vietnam tax number).\n *\n * 10 or 13 digits. The first two digits encode the province\n * where the business was registered. Digits 3-9 are a\n * sequential number (0000001-9999999). Digit 10 is a\n * weighted mod-11 check digit. An optional 3-digit branch\n * suffix (001-999) may follow, separated by a dash.\n *\n * @see https://vi.wikipedia.org/wiki/Thuế_Việt_Nam#Mã_số_thuế_(MST)_của_doanh_nghiệp\n * @see https://easyinvoice.vn/ma-so-thue/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"mst.js","names":[],"sources":["../../src/vn/mst.ts"],"sourcesContent":["/**\n * MST (Mã số thuế, Vietnam tax number).\n *\n * 10 or 13 digits. The first two digits encode the province\n * where the business was registered. Digits 3-9 are a\n * sequential number (0000001-9999999). Digit 10 is a\n * weighted mod-11 check digit. An optional 3-digit branch\n * suffix (001-999) may follow, separated by a dash.\n *\n * @see https://vi.wikipedia.org/wiki/Thuế_Việt_Nam#Mã_số_thuế_(MST)_của_doanh_nghiệp\n * @see https://easyinvoice.vn/ma-so-thue/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [31, 29, 23, 19, 17, 13, 7, 5, 3] as const;\n\nconst calcCheckDigit = (number: string): string => {\n let total = 0;\n for (let i = 0; i < 9; i++) {\n total += (WEIGHTS[i] ?? 0) * Number(number.charAt(i));\n }\n const remainder = 10 - (total % 11);\n // When remainder is 10, the sequential part is\n // never issued by GDT. Returning \"0\" keeps the\n // function correct as a digit calculator (mod 10\n // wrap) while still rejecting these numbers since\n // no real MST will have this combination.\n return String(\n remainder >= 10 ? remainder - 10 : remainder,\n );\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -.\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 10 && v.length !== 13) {\n return err(\n \"INVALID_LENGTH\",\n \"MST must be 10 or 13 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"MST must contain only digits\",\n );\n }\n\n // Sequential part (digits 3-9) must not be all zeros\n if (v.slice(2, 9) === \"0000000\") {\n return err(\n \"INVALID_COMPONENT\",\n \"MST sequential part must not be 0000000\",\n );\n }\n\n // Branch suffix (last 3 digits) must not be 000\n if (v.length === 13 && v.slice(10) === \"000\") {\n return err(\n \"INVALID_COMPONENT\",\n \"MST branch suffix must not be 000\",\n );\n }\n\n // Check digit (position 10, index 9)\n if (v[9] !== calcCheckDigit(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"MST check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 13) {\n return `${v.slice(0, 10)}-${v.slice(10)}`;\n }\n return v;\n};\n\n/** Generate a random valid Vietnamese MST. */\nconst generate = (): string => {\n for (;;) {\n const province = String(randomInt(1, 99)).padStart(\n 2,\n \"0\",\n );\n const payload = province + randomDigits(7);\n const c = payload + calcCheckDigit(payload);\n if (validate(c).valid) return c;\n }\n};\n\n/** Vietnamese Tax Number. */\nconst mst: CountryValidator<\"VN\"> = {\n name: \"Vietnamese Tax Number\",\n localName: \"Mã số thuế\",\n abbreviation: \"MST\",\n aliases: [\"MST\", \"mã số thuế\"] as const,\n candidatePattern: \"\\\\d{10}(-\\\\d{3})?\",\n scope: \"country\",\n country: \"VN\",\n entityType: \"company\",\n description:\n \"10- or 13-digit tax identifier for enterprises\",\n sourceUrl:\n \"https://vi.wikipedia.org/wiki/Thu%E1%BA%BF_Vi%E1%BB%87t_Nam#M%C3%A3_s%E1%BB%91_thu%E1%BA%BF_(MST)_c%E1%BB%A7a_doanh_nghi%E1%BB%87p\",\n lengths: [10, 13] as const,\n examples: [\"0100233488\", \"0314409058002\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default mst;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAuBA,MAAM,UAAU;CAAC;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;AAAC;AAEhD,MAAM,kBAAkB,WAA2B;CACjD,IAAI,QAAQ;CACZ,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,UAAU,QAAQ,MAAM,KAAK,OAAO,OAAO,OAAO,CAAC,CAAC;CAEtD,MAAM,YAAY,KAAM,QAAQ;CAMhC,OAAO,OACL,aAAa,KAAK,YAAY,KAAK,SACrC;AACF;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,MAAM,EAAE,WAAW,IAClC,OAAO,IACL,kBACA,6BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAIF,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,WACpB,OAAO,IACL,qBACA,yCACF;CAIF,IAAI,EAAE,WAAW,MAAM,EAAE,MAAM,EAAE,MAAM,OACrC,OAAO,IACL,qBACA,mCACF;CAIF,IAAI,EAAE,OAAO,eAAe,CAAC,GAC3B,OAAO,IACL,oBACA,gCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;CAExC,OAAO;AACT;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EAKP,MAAM,UAJW,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SACxC,GACA,GAEqB,IAAI,aAAa,CAAC;EACzC,MAAM,IAAI,UAAU,eAAe,OAAO;EAC1C,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,YAAY;CAC7B,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CACF,WACE;CACF,SAAS,CAAC,IAAI,EAAE;CAChB,UAAU,CAAC,cAAc,eAAe;CACxC;CACA;CACA;CACA;AACF"}
|
package/dist/za/idnr.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/za/idnr.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
@@ -13,7 +12,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
13
12
|
/** Generate a random valid South African ID. */
|
|
14
13
|
declare const generate: () => string;
|
|
15
14
|
/** South African Identity Number. */
|
|
16
|
-
declare const idnr:
|
|
15
|
+
declare const idnr: CountryValidator<"ZA", ParsedPersonId>;
|
|
17
16
|
//#endregion
|
|
18
17
|
export { compact, idnr as default, format, generate, parse, validate };
|
|
19
18
|
//# sourceMappingURL=idnr.d.ts.map
|
package/dist/za/idnr.js
CHANGED
|
@@ -1,24 +1,10 @@
|
|
|
1
|
+
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
3
|
+
import { isValidDate } from "../_util/date.js";
|
|
2
4
|
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
3
5
|
import { err } from "../_util/result.js";
|
|
4
|
-
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
5
6
|
import { isdigits } from "../_util/strings.js";
|
|
6
|
-
import { isValidDate } from "../_util/date.js";
|
|
7
7
|
//#region src/za/idnr.ts
|
|
8
|
-
/**
|
|
9
|
-
* South African Identity Number.
|
|
10
|
-
*
|
|
11
|
-
* 13-digit number encoding date of birth, gender,
|
|
12
|
-
* citizenship, and a Luhn check digit.
|
|
13
|
-
* Format: YYMMDD SSSS C A Z
|
|
14
|
-
* - YYMMDD: date of birth
|
|
15
|
-
* - SSSS: sequence (0000-4999 female, 5000-9999 male)
|
|
16
|
-
* - C: citizenship (0 = citizen, 1 = permanent resident)
|
|
17
|
-
* - A: was used for race (now always 8 or 9)
|
|
18
|
-
* - Z: Luhn check digit
|
|
19
|
-
*
|
|
20
|
-
* @see https://en.wikipedia.org/wiki/South_African_identity_document
|
|
21
|
-
*/
|
|
22
8
|
const compact = (value) => clean(value, " ");
|
|
23
9
|
/**
|
|
24
10
|
* Resolve the birth date from the 2-digit year.
|
|
@@ -93,10 +79,12 @@ const idnr = {
|
|
|
93
79
|
abbreviation: "SA ID",
|
|
94
80
|
aliases: ["ID number", "RSA ID"],
|
|
95
81
|
candidatePattern: "\\d{13}",
|
|
82
|
+
scope: "country",
|
|
96
83
|
country: "ZA",
|
|
97
84
|
entityType: "person",
|
|
98
85
|
compact,
|
|
99
86
|
format,
|
|
87
|
+
parse,
|
|
100
88
|
validate,
|
|
101
89
|
description: "South African personal identification number",
|
|
102
90
|
sourceUrl: "https://en.wikipedia.org/wiki/South_African_identity_document",
|
package/dist/za/idnr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idnr.js","names":[],"sources":["../../src/za/idnr.ts"],"sourcesContent":["/**\n * South African Identity Number.\n *\n * 13-digit number encoding date of birth, gender,\n * citizenship, and a Luhn check digit.\n * Format: YYMMDD SSSS C A Z\n * - YYMMDD: date of birth\n * - SSSS: sequence (0000-4999 female, 5000-9999 male)\n * - C: citizenship (0 = citizen, 1 = permanent resident)\n * - A: was used for race (now always 8 or 9)\n * - Z: Luhn check digit\n *\n * @see https://en.wikipedia.org/wiki/South_African_identity_document\n */\n\nimport {\n luhnValidate,\n luhnChecksum,\n} from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"idnr.js","names":[],"sources":["../../src/za/idnr.ts"],"sourcesContent":["/**\n * South African Identity Number.\n *\n * 13-digit number encoding date of birth, gender,\n * citizenship, and a Luhn check digit.\n * Format: YYMMDD SSSS C A Z\n * - YYMMDD: date of birth\n * - SSSS: sequence (0000-4999 female, 5000-9999 male)\n * - C: citizenship (0 = citizen, 1 = permanent resident)\n * - A: was used for race (now always 8 or 9)\n * - Z: Luhn check digit\n *\n * @see https://en.wikipedia.org/wiki/South_African_identity_document\n */\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport {\n luhnValidate,\n luhnChecksum,\n} from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" \");\n\n/**\n * Resolve the birth date from the 2-digit year.\n * Years after the current year are assumed to be\n * in the previous century.\n */\nconst resolveBirthDate = (\n v: string,\n): { year: number; month: number; day: number } | null => {\n const today = new Date();\n const century = Math.floor(today.getFullYear() / 100);\n let year = century * 100 + Number(v.slice(0, 2));\n const month = Number(v.slice(2, 4));\n const day = Number(v.slice(4, 6));\n if (year > today.getFullYear()) {\n year -= 100;\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 !== 13) {\n return err(\n \"INVALID_LENGTH\",\n \"SA ID must be exactly 13 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"SA ID must contain only digits\",\n );\n }\n if (resolveBirthDate(v) === null) {\n return err(\n \"INVALID_COMPONENT\",\n \"SA ID contains an invalid date of birth\",\n );\n }\n const citizenship = v[10];\n if (citizenship !== \"0\" && citizenship !== \"1\") {\n return err(\n \"INVALID_COMPONENT\",\n \"SA ID citizenship digit must be 0 or 1\",\n );\n }\n if (!luhnValidate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"SA ID Luhn check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 13) {\n return `${v.slice(0, 6)} ${v.slice(6, 10)} ${v.slice(10, 12)} ${v.slice(12)}`;\n }\n return v;\n};\n\n/**\n * Extract birth date and gender from a South African\n * ID number. 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 bd = resolveBirthDate(v);\n if (bd === null) return null;\n\n const sequence = Number(v.slice(6, 10));\n\n return {\n birthDate: new Date(bd.year, bd.month - 1, bd.day),\n gender: sequence < 5000 ? \"female\" : \"male\",\n };\n};\n\n/** Generate a random valid South African ID. */\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 = randomDigits(4);\n const citizen = String(randomInt(0, 1));\n const payload = yy + mm + dd + serial + citizen + \"8\";\n const cs = luhnChecksum(payload + \"0\");\n const c = payload + String((10 - cs) % 10);\n if (validate(c).valid) return c;\n }\n};\n\n/** South African Identity Number. */\nconst idnr: CountryValidator<\"ZA\", ParsedPersonId> = {\n name: \"South African Identity Number\",\n localName: \"South African Identity Number\",\n abbreviation: \"SA ID\",\n aliases: [\"ID number\", \"RSA ID\"] as const,\n candidatePattern: \"\\\\d{13}\",\n scope: \"country\",\n country: \"ZA\",\n entityType: \"person\",\n compact,\n format,\n parse,\n validate,\n description:\n \"South African personal identification number\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/\" +\n \"South_African_identity_document\",\n lengths: [13] as const,\n examples: [\"7503305044089\", \"8001015009087\"] as const,\n generate,\n};\n\nexport default idnr;\nexport { compact, format, parse, validate, generate };\n"],"mappings":";;;;;;;AA+BA,MAAM,WAAW,UACf,MAAM,OAAO,GAAG;;;;;;AAOlB,MAAM,oBACJ,MACwD;CACxD,MAAM,wBAAQ,IAAI,KAAK;CAEvB,IAAI,OADY,KAAK,MAAM,MAAM,YAAY,IAAI,GAChC,IAAI,MAAM,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/C,MAAM,QAAQ,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAClC,MAAM,MAAM,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAChC,IAAI,OAAO,MAAM,YAAY,GAC3B,QAAQ;CAEV,IAAI,CAAC,YAAY,MAAM,OAAO,GAAG,GAAG,OAAO;CAC3C,OAAO;EAAE;EAAM;EAAO;CAAI;AAC5B;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,iCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,gCACF;CAEF,IAAI,iBAAiB,CAAC,MAAM,MAC1B,OAAO,IACL,qBACA,yCACF;CAEF,MAAM,cAAc,EAAE;CACtB,IAAI,gBAAgB,OAAO,gBAAgB,KACzC,OAAO,IACL,qBACA,wCACF;CAEF,IAAI,CAAC,aAAa,CAAC,GACjB,OAAO,IACL,oBACA,iCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;CAE5E,OAAO;AACT;;;;;AAMA,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,KAAK;CAC7B,IAAI,CAAC,OAAO,OAAO,OAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,KAAK,iBAAiB,CAAC;CAC7B,IAAI,OAAO,MAAM,OAAO;CAExB,MAAM,WAAW,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAEtC,OAAO;EACL,WAAW,IAAI,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,GAAG,GAAG;EACjD,QAAQ,WAAW,MAAO,WAAW;CACvC;AACF;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,KAAK,OAAO,UAAU,IAAI,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACpD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,SAAS,aAAa,CAAC;EAC7B,MAAM,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC;EACtC,MAAM,UAAU,KAAK,KAAK,KAAK,SAAS,UAAU;EAClD,MAAM,KAAK,aAAa,UAAU,GAAG;EACrC,MAAM,IAAI,UAAU,QAAQ,KAAK,MAAM,EAAE;EACzC,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,OAA+C;CACnD,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,aAAa,QAAQ;CAC/B,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ;CACA;CACA;CACA;CACA,aACE;CACF,WACE;CAEF,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,iBAAiB,eAAe;CAC3C;AACF"}
|
package/dist/za/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import idnr from "./idnr.js";
|
|
3
2
|
|
|
4
3
|
//#region src/za/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { idnr };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { idnr, mod_d_exports };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stll/stdnum",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"description": "Validate, compact, and format standard identifiers
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Validate, compact, and format standard identifiers for Node.js and Bun. Pure TypeScript, zero dependencies, tree-shakeable per identifier.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"credit-card",
|
|
7
7
|
"czech",
|
|
@@ -31,10 +31,6 @@
|
|
|
31
31
|
"main": "dist/index.js",
|
|
32
32
|
"module": "dist/index.js",
|
|
33
33
|
"types": "dist/index.d.ts",
|
|
34
|
-
"imports": {
|
|
35
|
-
"#checksums/*": "./dist/_checksums/*.js",
|
|
36
|
-
"#util/*": "./dist/_util/*.js"
|
|
37
|
-
},
|
|
38
34
|
"exports": {
|
|
39
35
|
".": {
|
|
40
36
|
"types": "./dist/index.d.ts",
|
|
@@ -902,35 +898,52 @@
|
|
|
902
898
|
"default": "./dist/za/idnr.js"
|
|
903
899
|
}
|
|
904
900
|
},
|
|
901
|
+
"publishConfig": {
|
|
902
|
+
"access": "public"
|
|
903
|
+
},
|
|
905
904
|
"scripts": {
|
|
906
905
|
"build": "tsdown",
|
|
907
|
-
"prepublishOnly": "bun run build",
|
|
906
|
+
"prepublishOnly": "bun run typecheck && bun run build && bun run sync-exports:check",
|
|
908
907
|
"catalog": "bun scripts/catalog.ts",
|
|
908
|
+
"sync-ai": "bash scripts/sync-ai-skills.sh",
|
|
909
909
|
"sync-exports": "bun scripts/sync-exports.ts",
|
|
910
|
+
"sync-exports:check": "bun scripts/sync-exports.ts --check",
|
|
910
911
|
"test": "bun test",
|
|
911
|
-
"oracle": "bun scripts/oracle.ts",
|
|
912
|
-
"
|
|
913
|
-
"
|
|
912
|
+
"oracle": "bun scripts/oracle.ts --mode=gate",
|
|
913
|
+
"oracle:gate": "bun scripts/oracle.ts --mode=gate",
|
|
914
|
+
"oracle:survey": "bun scripts/oracle.ts --mode=survey",
|
|
915
|
+
"lint": "bun --bun oxlint -c oxlint.config.ts --report-unused-disable-directives-severity=error --deny-warnings --type-aware .",
|
|
916
|
+
"format": "oxfmt . \"!.ai/**\" \"!.agents/**\" \"!.claude/**\" \"!AGENTS.md\" \"!CLAUDE.md\" \"!GEMINI.md\"",
|
|
917
|
+
"format:check": "oxfmt --check . \"!.ai/**\" \"!.agents/**\" \"!.claude/**\" \"!AGENTS.md\" \"!CLAUDE.md\" \"!GEMINI.md\"",
|
|
918
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
919
|
+
"sync-ai:check": "bash scripts/sync-ai-skills.sh --check",
|
|
920
|
+
"lint:fix": "bun --bun oxlint -c oxlint.config.ts --type-aware --fix .",
|
|
921
|
+
"version:check": "node scripts/version-sync.mjs check",
|
|
922
|
+
"version:sync": "node scripts/version-sync.mjs sync"
|
|
914
923
|
},
|
|
915
924
|
"devDependencies": {
|
|
916
|
-
"
|
|
917
|
-
"
|
|
925
|
+
"@brazilian-utils/brazilian-utils": "^2.3.0",
|
|
926
|
+
"@stll/oxlint-config": "^0.3.0",
|
|
927
|
+
"@stll/typescript-config": "^0.3.0",
|
|
928
|
+
"@types/node": "^25.9.1",
|
|
929
|
+
"bun-types": "^1.3.14",
|
|
930
|
+
"fast-check": "^4.8.0",
|
|
918
931
|
"fast-luhn": "^2.0.2",
|
|
919
932
|
"iban": "^0.0.14",
|
|
920
|
-
"ibantools": "^4.5.
|
|
933
|
+
"ibantools": "^4.5.4",
|
|
921
934
|
"jsvat": "^2.5.4",
|
|
922
935
|
"luhn": "^2.4.1",
|
|
923
|
-
"oxfmt": "^0.
|
|
924
|
-
"oxlint": "^1.
|
|
925
|
-
"
|
|
926
|
-
"
|
|
936
|
+
"oxfmt": "^0.52.0",
|
|
937
|
+
"oxlint": "^1.67.0",
|
|
938
|
+
"oxlint-tsgolint": "^0.23.0",
|
|
939
|
+
"rut.js": "^2.1.0",
|
|
940
|
+
"stdnum": "^1.11.14",
|
|
941
|
+
"tsdown": "0.22.1",
|
|
927
942
|
"typescript": "^5.9.3",
|
|
928
943
|
"validate-polish": "^2.1.40"
|
|
929
944
|
},
|
|
930
|
-
"publishConfig": {
|
|
931
|
-
"access": "restricted"
|
|
932
|
-
},
|
|
933
945
|
"engines": {
|
|
934
946
|
"node": ">= 18"
|
|
935
|
-
}
|
|
947
|
+
},
|
|
948
|
+
"packageManager": "bun@1.3.12"
|
|
936
949
|
}
|
|
@@ -19,6 +19,6 @@ export const mod1110checkDigit = (
|
|
|
19
19
|
/** Validate a string with a Mod 11,10 check digit. */
|
|
20
20
|
export const mod1110validate = (value: string): boolean => {
|
|
21
21
|
const payload = value.slice(0, -1);
|
|
22
|
-
const check = Number(value
|
|
22
|
+
const check = Number(value.at(-1));
|
|
23
23
|
return mod1110checkDigit(payload) === check;
|
|
24
24
|
};
|
package/src/_checksums/mod112.ts
CHANGED
|
@@ -23,10 +23,11 @@ export const mod112checkChar = (
|
|
|
23
23
|
payload: string,
|
|
24
24
|
): string => {
|
|
25
25
|
let sum = 0;
|
|
26
|
-
for (
|
|
27
|
-
sum += Number(payload[i]) *
|
|
26
|
+
for (const [i, weight] of WEIGHTS.entries()) {
|
|
27
|
+
sum += Number(payload[i]) * weight;
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
// SAFETY: sum % 11 is in 0..10 and CHECK_CHARS has 11 chars.
|
|
30
|
+
return CHECK_CHARS[sum % 11] ?? "";
|
|
30
31
|
};
|
|
31
32
|
|
|
32
33
|
/**
|
|
@@ -34,7 +35,7 @@ export const mod112checkChar = (
|
|
|
34
35
|
* check character (last char is 0-9 or X).
|
|
35
36
|
*/
|
|
36
37
|
export const mod112validate = (value: string): boolean => {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
return mod112checkChar(
|
|
38
|
+
const check = value[17]?.toUpperCase();
|
|
39
|
+
if (check === undefined) return false;
|
|
40
|
+
return mod112checkChar(value.slice(0, 17)) === check;
|
|
40
41
|
};
|