@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/src/sg/uen.ts
CHANGED
|
@@ -14,13 +14,16 @@
|
|
|
14
14
|
* @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Singapore-TIN.pdf
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
import type {
|
|
18
|
+
ValidateResult,
|
|
19
|
+
CountryValidator,
|
|
20
|
+
} from "../types";
|
|
21
|
+
|
|
17
22
|
import { clean } from "#util/clean";
|
|
18
23
|
import { randomDigits } from "#util/generate";
|
|
19
24
|
import { err } from "#util/result";
|
|
20
25
|
import { isdigits } from "#util/strings";
|
|
21
26
|
|
|
22
|
-
import type { ValidateResult, Validator } from "../types";
|
|
23
|
-
|
|
24
27
|
/** Check letter alphabet for "Other" format. */
|
|
25
28
|
const OTHER_ALPHA = "ABCDEFGHJKLMNPQRSTUVWX0123456789";
|
|
26
29
|
|
|
@@ -72,6 +75,9 @@ const compact = (value: string): string =>
|
|
|
72
75
|
* Validate Business (ROB) UEN (9 chars):
|
|
73
76
|
* 8 digits + 1 check letter.
|
|
74
77
|
*/
|
|
78
|
+
const BUSINESS_WEIGHTS = [10, 4, 9, 3, 8, 2, 7, 1] as const;
|
|
79
|
+
const BUSINESS_CHECK_ALPHA = "XMKECAWLJDB";
|
|
80
|
+
|
|
75
81
|
const validateBusiness = (v: string): ValidateResult => {
|
|
76
82
|
if (!isdigits(v.slice(0, 8))) {
|
|
77
83
|
return err(
|
|
@@ -79,6 +85,9 @@ const validateBusiness = (v: string): ValidateResult => {
|
|
|
79
85
|
"Business UEN must start with 8 digits",
|
|
80
86
|
);
|
|
81
87
|
}
|
|
88
|
+
// SAFETY: caller routes to this only when
|
|
89
|
+
// v.length === 9.
|
|
90
|
+
// eslint-disable-next-line no-non-null-assertion
|
|
82
91
|
if (!/^[A-Z]$/.test(v[8]!)) {
|
|
83
92
|
return err(
|
|
84
93
|
"INVALID_FORMAT",
|
|
@@ -86,13 +95,11 @@ const validateBusiness = (v: string): ValidateResult => {
|
|
|
86
95
|
);
|
|
87
96
|
}
|
|
88
97
|
|
|
89
|
-
const weights = [10, 4, 9, 3, 8, 2, 7, 1];
|
|
90
|
-
const checkAlpha = "XMKECAWLJDB";
|
|
91
98
|
let sum = 0;
|
|
92
|
-
for (
|
|
93
|
-
sum += Number(v[i]) *
|
|
99
|
+
for (const [i, weight] of BUSINESS_WEIGHTS.entries()) {
|
|
100
|
+
sum += Number(v[i]) * weight;
|
|
94
101
|
}
|
|
95
|
-
const expected =
|
|
102
|
+
const expected = BUSINESS_CHECK_ALPHA[sum % 11];
|
|
96
103
|
if (v[8] !== expected) {
|
|
97
104
|
return err(
|
|
98
105
|
"INVALID_CHECKSUM",
|
|
@@ -106,6 +113,9 @@ const validateBusiness = (v: string): ValidateResult => {
|
|
|
106
113
|
* Validate Local Company (ROC) UEN (10 chars):
|
|
107
114
|
* 9 digits (year prefix) + 1 check letter.
|
|
108
115
|
*/
|
|
116
|
+
const LOCAL_WEIGHTS = [10, 8, 6, 4, 9, 7, 5, 3, 1] as const;
|
|
117
|
+
const LOCAL_CHECK_ALPHA = "ZKCMDNERGWH";
|
|
118
|
+
|
|
109
119
|
const validateLocalCompany = (
|
|
110
120
|
v: string,
|
|
111
121
|
): ValidateResult => {
|
|
@@ -115,6 +125,9 @@ const validateLocalCompany = (
|
|
|
115
125
|
"Company UEN must have 9 digits",
|
|
116
126
|
);
|
|
117
127
|
}
|
|
128
|
+
// SAFETY: caller routes to this only when
|
|
129
|
+
// v.length === 10.
|
|
130
|
+
// eslint-disable-next-line no-non-null-assertion
|
|
118
131
|
if (!/^[A-Z]$/.test(v[9]!)) {
|
|
119
132
|
return err(
|
|
120
133
|
"INVALID_FORMAT",
|
|
@@ -122,13 +135,11 @@ const validateLocalCompany = (
|
|
|
122
135
|
);
|
|
123
136
|
}
|
|
124
137
|
|
|
125
|
-
const weights = [10, 8, 6, 4, 9, 7, 5, 3, 1];
|
|
126
|
-
const checkAlpha = "ZKCMDNERGWH";
|
|
127
138
|
let sum = 0;
|
|
128
|
-
for (
|
|
129
|
-
sum += Number(v[i]) *
|
|
139
|
+
for (const [i, weight] of LOCAL_WEIGHTS.entries()) {
|
|
140
|
+
sum += Number(v[i]) * weight;
|
|
130
141
|
}
|
|
131
|
-
const expected =
|
|
142
|
+
const expected = LOCAL_CHECK_ALPHA[sum % 11];
|
|
132
143
|
if (v[9] !== expected) {
|
|
133
144
|
return err(
|
|
134
145
|
"INVALID_CHECKSUM",
|
|
@@ -143,7 +154,12 @@ const validateLocalCompany = (
|
|
|
143
154
|
* R/S/T + 2 digits + 2-letter type + 4 digits
|
|
144
155
|
* + 1 check letter.
|
|
145
156
|
*/
|
|
157
|
+
const OTHER_WEIGHTS = [4, 3, 5, 3, 10, 2, 2, 5, 7] as const;
|
|
158
|
+
|
|
146
159
|
const validateOther = (v: string): ValidateResult => {
|
|
160
|
+
// SAFETY: caller routes to this only when
|
|
161
|
+
// v.length === 10.
|
|
162
|
+
// eslint-disable-next-line no-non-null-assertion
|
|
147
163
|
const prefix = v[0]!;
|
|
148
164
|
if (prefix !== "R" && prefix !== "S" && prefix !== "T") {
|
|
149
165
|
return err(
|
|
@@ -171,17 +187,18 @@ const validateOther = (v: string): ValidateResult => {
|
|
|
171
187
|
);
|
|
172
188
|
}
|
|
173
189
|
|
|
174
|
-
const weights = [4, 3, 5, 3, 10, 2, 2, 5, 7];
|
|
175
190
|
let sum = 0;
|
|
176
|
-
for (
|
|
177
|
-
const
|
|
191
|
+
for (const [i, weight] of OTHER_WEIGHTS.entries()) {
|
|
192
|
+
const ch = v[i];
|
|
193
|
+
if (ch === undefined) continue;
|
|
194
|
+
const idx = OTHER_ALPHA.indexOf(ch);
|
|
178
195
|
if (idx === -1) {
|
|
179
196
|
return err(
|
|
180
197
|
"INVALID_FORMAT",
|
|
181
|
-
`Unexpected character at position ${i + 1}: ${
|
|
198
|
+
`Unexpected character at position ${i + 1}: ${ch}`,
|
|
182
199
|
);
|
|
183
200
|
}
|
|
184
|
-
sum += idx *
|
|
201
|
+
sum += idx * weight;
|
|
185
202
|
}
|
|
186
203
|
const expected =
|
|
187
204
|
OTHER_ALPHA[(((sum - 5) % 11) + 11) % 11];
|
|
@@ -218,6 +235,8 @@ const validate = (value: string): ValidateResult => {
|
|
|
218
235
|
|
|
219
236
|
// 10 chars: first char digit => local company,
|
|
220
237
|
// otherwise "other" entity
|
|
238
|
+
// SAFETY: v.length === 10 here.
|
|
239
|
+
// eslint-disable-next-line no-non-null-assertion
|
|
221
240
|
if (isdigits(v[0]!)) {
|
|
222
241
|
return validateLocalCompany(v);
|
|
223
242
|
}
|
|
@@ -228,24 +247,26 @@ const format = (value: string): string => compact(value);
|
|
|
228
247
|
|
|
229
248
|
/** Generate a random valid Singapore UEN (business format). */
|
|
230
249
|
const generate = (): string => {
|
|
231
|
-
const weights = [10, 4, 9, 3, 8, 2, 7, 1];
|
|
232
|
-
const checkAlpha = "XMKECAWLJDB";
|
|
233
250
|
const body = randomDigits(8);
|
|
234
251
|
let sum = 0;
|
|
235
|
-
for (
|
|
236
|
-
sum += Number(body[i]) *
|
|
252
|
+
for (const [i, weight] of BUSINESS_WEIGHTS.entries()) {
|
|
253
|
+
sum += Number(body[i]) * weight;
|
|
237
254
|
}
|
|
238
|
-
|
|
255
|
+
// SAFETY: sum % 11 is in 0..10 and BUSINESS_CHECK_ALPHA
|
|
256
|
+
// has 11 characters.
|
|
257
|
+
// eslint-disable-next-line no-non-null-assertion
|
|
258
|
+
const check = BUSINESS_CHECK_ALPHA[sum % 11]!;
|
|
239
259
|
return body + check;
|
|
240
260
|
};
|
|
241
261
|
|
|
242
262
|
/** Singapore Unique Entity Number. */
|
|
243
|
-
const uen:
|
|
263
|
+
const uen: CountryValidator<"SG"> = {
|
|
244
264
|
name: "Singapore Unique Entity Number",
|
|
245
265
|
localName: "Unique Entity Number",
|
|
246
266
|
abbreviation: "UEN",
|
|
247
267
|
aliases: ["UEN", "Unique Entity Number"] as const,
|
|
248
268
|
candidatePattern: "[\\dSTR]\\d{7}[A-Z]",
|
|
269
|
+
scope: "country",
|
|
249
270
|
country: "SG",
|
|
250
271
|
entityType: "company",
|
|
251
272
|
description:
|
package/src/si/emso.ts
CHANGED
|
@@ -5,10 +5,22 @@
|
|
|
5
5
|
* encoding DDMMYYY (7-digit birth year), region code,
|
|
6
6
|
* serial number, and a check digit.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Canonical source:
|
|
9
|
+
* - Slovenia government registry overview
|
|
10
|
+
*
|
|
11
|
+
* This is the source behind the stricter register
|
|
12
|
+
* code check (50-59) and the decision to reject
|
|
13
|
+
* future birth dates in the embedded date field.
|
|
14
|
+
*
|
|
15
|
+
* @see https://www.gov.si/teme/registri-in-evidence-prebivalstva/
|
|
10
16
|
*/
|
|
11
17
|
|
|
18
|
+
import type {
|
|
19
|
+
ParsedPersonId,
|
|
20
|
+
ValidateResult,
|
|
21
|
+
CountryValidator,
|
|
22
|
+
} from "../types";
|
|
23
|
+
|
|
12
24
|
import { weightedSum } from "#checksums/weighted-sum";
|
|
13
25
|
import { clean } from "#util/clean";
|
|
14
26
|
import { isValidDate } from "#util/date";
|
|
@@ -16,12 +28,6 @@ import { randomInt } from "#util/generate";
|
|
|
16
28
|
import { err } from "#util/result";
|
|
17
29
|
import { isdigits } from "#util/strings";
|
|
18
30
|
|
|
19
|
-
import type {
|
|
20
|
-
ParsedPersonId,
|
|
21
|
-
ValidateResult,
|
|
22
|
-
Validator,
|
|
23
|
-
} from "../types";
|
|
24
|
-
|
|
25
31
|
const WEIGHTS = [
|
|
26
32
|
7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2,
|
|
27
33
|
] as const;
|
|
@@ -75,6 +81,23 @@ const validate = (value: string): ValidateResult => {
|
|
|
75
81
|
"EMŠO contains an invalid date",
|
|
76
82
|
);
|
|
77
83
|
}
|
|
84
|
+
const birthDate = new Date(yyyy, mm - 1, dd);
|
|
85
|
+
const today = new Date();
|
|
86
|
+
today.setHours(0, 0, 0, 0);
|
|
87
|
+
if (birthDate > today) {
|
|
88
|
+
return err(
|
|
89
|
+
"INVALID_COMPONENT",
|
|
90
|
+
"EMŠO cannot contain a future birth date",
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const register = Number(v.slice(7, 9));
|
|
95
|
+
if (register < 50 || register > 59) {
|
|
96
|
+
return err(
|
|
97
|
+
"INVALID_COMPONENT",
|
|
98
|
+
"EMSO register code must be between 50 and 59",
|
|
99
|
+
);
|
|
100
|
+
}
|
|
78
101
|
|
|
79
102
|
if (calcCheckDigit(v) !== Number(v[12])) {
|
|
80
103
|
return err(
|
|
@@ -120,7 +143,7 @@ const generate = (): string => {
|
|
|
120
143
|
const dd = String(randomInt(1, 28)).padStart(2, "0");
|
|
121
144
|
const mm = String(randomInt(1, 12)).padStart(2, "0");
|
|
122
145
|
const yyy = String(randomInt(900, 999));
|
|
123
|
-
const rr = String(randomInt(50,
|
|
146
|
+
const rr = String(randomInt(50, 59));
|
|
124
147
|
const sss = String(randomInt(0, 999)).padStart(3, "0");
|
|
125
148
|
const partial = dd + mm + yyy + rr + sss;
|
|
126
149
|
const c = partial + String(calcCheckDigit(partial));
|
|
@@ -129,7 +152,7 @@ const generate = (): string => {
|
|
|
129
152
|
};
|
|
130
153
|
|
|
131
154
|
/** Slovenian Unique Master Citizen Number. */
|
|
132
|
-
const emso:
|
|
155
|
+
const emso: CountryValidator<"SI", ParsedPersonId> = {
|
|
133
156
|
name: "Slovenian Personal ID",
|
|
134
157
|
localName: "Enotna matična številka občana",
|
|
135
158
|
abbreviation: "EMŠO",
|
|
@@ -138,12 +161,15 @@ const emso: Validator = {
|
|
|
138
161
|
"enotna matična številka občana",
|
|
139
162
|
] as const,
|
|
140
163
|
candidatePattern: "\\d{13}",
|
|
164
|
+
scope: "country",
|
|
141
165
|
country: "SI",
|
|
142
166
|
entityType: "person",
|
|
143
|
-
sourceUrl:
|
|
167
|
+
sourceUrl:
|
|
168
|
+
"https://www.gov.si/teme/registri-in-evidence-prebivalstva/",
|
|
144
169
|
examples: ["0101006500006"] as const,
|
|
145
170
|
compact,
|
|
146
171
|
format,
|
|
172
|
+
parse,
|
|
147
173
|
validate,
|
|
148
174
|
generate,
|
|
149
175
|
};
|
package/src/si/vat.ts
CHANGED
|
@@ -10,14 +10,17 @@
|
|
|
10
10
|
* @see https://spot.gov.si/en/info/taxes/value-added-tax-vat
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import type {
|
|
14
|
+
ValidateResult,
|
|
15
|
+
CountryValidator,
|
|
16
|
+
} from "../types";
|
|
17
|
+
|
|
13
18
|
import { weightedSum } from "#checksums/weighted-sum";
|
|
14
19
|
import { clean } from "#util/clean";
|
|
15
20
|
import { randomDigits, randomInt } from "#util/generate";
|
|
16
21
|
import { err } from "#util/result";
|
|
17
22
|
import { isdigits } from "#util/strings";
|
|
18
23
|
|
|
19
|
-
import type { ValidateResult, Validator } from "../types";
|
|
20
|
-
|
|
21
24
|
const WEIGHTS = [8, 7, 6, 5, 4, 3, 2];
|
|
22
25
|
|
|
23
26
|
const compact = (value: string): string => {
|
|
@@ -85,7 +88,7 @@ const generate = (): string => {
|
|
|
85
88
|
};
|
|
86
89
|
|
|
87
90
|
/** Slovenian VAT Number. */
|
|
88
|
-
const vat:
|
|
91
|
+
const vat: CountryValidator<"SI"> = {
|
|
89
92
|
name: "Slovenian VAT Number",
|
|
90
93
|
localName: "Davčna številka",
|
|
91
94
|
abbreviation: "DDV",
|
|
@@ -94,9 +97,11 @@ const vat: Validator = {
|
|
|
94
97
|
"identifikacijska številka za DDV",
|
|
95
98
|
] as const,
|
|
96
99
|
candidatePattern: "SI\\d{8}",
|
|
100
|
+
scope: "country",
|
|
97
101
|
country: "SI",
|
|
98
102
|
entityType: "company",
|
|
99
103
|
sourceUrl: "https://www.fu.gov.si/",
|
|
104
|
+
lengths: [8] as const,
|
|
100
105
|
examples: ["15012557"] as const,
|
|
101
106
|
compact,
|
|
102
107
|
format,
|
package/src/sk/dic.ts
CHANGED
|
@@ -9,14 +9,17 @@
|
|
|
9
9
|
* @see https://www.financnasprava.sk/
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import { validate as validateRc } from "../cz/rc";
|
|
13
|
+
import type {
|
|
14
|
+
ValidateResult,
|
|
15
|
+
CountryValidator,
|
|
16
|
+
} from "../types";
|
|
17
|
+
|
|
12
18
|
import { clean } from "#util/clean";
|
|
13
19
|
import { randomDigits } from "#util/generate";
|
|
14
20
|
import { err } from "#util/result";
|
|
15
21
|
import { isdigits } from "#util/strings";
|
|
16
22
|
|
|
17
|
-
import { validate as validateRc } from "../cz/rc";
|
|
18
|
-
import type { ValidateResult, Validator } from "../types";
|
|
19
|
-
|
|
20
23
|
const compact = (value: string): string => {
|
|
21
24
|
const v = clean(value, " -");
|
|
22
25
|
if (v.startsWith("SK") || v.startsWith("sk")) {
|
|
@@ -85,13 +88,14 @@ const generate = (): string => {
|
|
|
85
88
|
};
|
|
86
89
|
|
|
87
90
|
/** Slovak VAT Number. */
|
|
88
|
-
const dic:
|
|
91
|
+
const dic: CountryValidator<"SK"> = {
|
|
89
92
|
name: "Slovak VAT Number",
|
|
90
93
|
localName:
|
|
91
94
|
"Identifikačné číslo pre daň z pridanej hodnoty",
|
|
92
95
|
abbreviation: "IČ DPH",
|
|
93
96
|
aliases: ["DIČ", "daňové identifikačné číslo"] as const,
|
|
94
97
|
candidatePattern: "SK\\d{10}",
|
|
98
|
+
scope: "country",
|
|
95
99
|
country: "SK",
|
|
96
100
|
entityType: "company",
|
|
97
101
|
sourceUrl: "https://www.financnasprava.sk/",
|
package/src/sk/ico.ts
CHANGED
|
@@ -13,10 +13,10 @@ import {
|
|
|
13
13
|
generate,
|
|
14
14
|
validate,
|
|
15
15
|
} from "../cz/ico";
|
|
16
|
-
import type {
|
|
16
|
+
import type { CountryValidator } from "../types";
|
|
17
17
|
|
|
18
18
|
/** Slovak Company Identification Number. */
|
|
19
|
-
const ico:
|
|
19
|
+
const ico: CountryValidator<"SK"> = {
|
|
20
20
|
name: "Slovak Company ID",
|
|
21
21
|
localName: "Identifikačné číslo organizácie",
|
|
22
22
|
abbreviation: "IČO",
|
|
@@ -25,6 +25,7 @@ const ico: Validator = {
|
|
|
25
25
|
"identifikačné číslo organizácie",
|
|
26
26
|
] as const,
|
|
27
27
|
candidatePattern: "\\d{8}",
|
|
28
|
+
scope: "country",
|
|
28
29
|
country: "SK",
|
|
29
30
|
entityType: "company",
|
|
30
31
|
sourceUrl: "https://www.statistics.sk/",
|
package/src/sk/rc.ts
CHANGED
|
@@ -8,24 +8,37 @@
|
|
|
8
8
|
* @see https://www.minv.sk/
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
|
|
11
|
+
import {
|
|
12
|
+
compact,
|
|
13
|
+
format,
|
|
14
|
+
generate,
|
|
15
|
+
parse,
|
|
16
|
+
validate,
|
|
17
|
+
} from "../cz/rc";
|
|
18
|
+
import type {
|
|
19
|
+
ParsedPersonId,
|
|
20
|
+
CountryValidator,
|
|
21
|
+
} from "../types";
|
|
13
22
|
|
|
14
23
|
/** Slovak Birth Number. */
|
|
15
|
-
const rc:
|
|
24
|
+
const rc: CountryValidator<"SK", ParsedPersonId> = {
|
|
16
25
|
name: "Slovak Birth Number",
|
|
17
26
|
localName: "Rodné číslo",
|
|
18
27
|
abbreviation: "RČ",
|
|
19
28
|
aliases: ["rodné číslo", "RČ"] as const,
|
|
20
29
|
candidatePattern: "\\d{6}/\\d{3,4}",
|
|
30
|
+
scope: "country",
|
|
21
31
|
country: "SK",
|
|
22
32
|
entityType: "person",
|
|
23
33
|
sourceUrl: "https://www.minv.sk/",
|
|
34
|
+
lengths: [9, 10] as const,
|
|
24
35
|
examples: ["7103192745"] as const,
|
|
25
36
|
compact,
|
|
26
37
|
format,
|
|
38
|
+
generate,
|
|
39
|
+
parse,
|
|
27
40
|
validate,
|
|
28
41
|
};
|
|
29
42
|
|
|
30
43
|
export default rc;
|
|
31
|
-
export { compact, format, parse, validate };
|
|
44
|
+
export { compact, format, generate, parse, validate };
|
package/src/th/tin.ts
CHANGED
|
@@ -10,13 +10,16 @@
|
|
|
10
10
|
* @see https://en.wikipedia.org/wiki/Thai_identity_card
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import type {
|
|
14
|
+
ValidateResult,
|
|
15
|
+
CountryValidator,
|
|
16
|
+
} from "../types";
|
|
17
|
+
|
|
13
18
|
import { clean } from "#util/clean";
|
|
14
19
|
import { randomDigits, randomInt } from "#util/generate";
|
|
15
20
|
import { err } from "#util/result";
|
|
16
21
|
import { isdigits } from "#util/strings";
|
|
17
22
|
|
|
18
|
-
import type { ValidateResult, Validator } from "../types";
|
|
19
|
-
|
|
20
23
|
const compact = (value: string): string =>
|
|
21
24
|
clean(value, " -");
|
|
22
25
|
|
|
@@ -79,12 +82,13 @@ const generate = (): string => {
|
|
|
79
82
|
};
|
|
80
83
|
|
|
81
84
|
/** Thai Tax Identification Number. */
|
|
82
|
-
const tin:
|
|
85
|
+
const tin: CountryValidator<"TH"> = {
|
|
83
86
|
name: "Thai Tax Identification Number",
|
|
84
87
|
localName: "เลขประจำตัวผู้เสียภาษี",
|
|
85
88
|
abbreviation: "TIN",
|
|
86
89
|
aliases: ["เลขประจำตัวผู้เสียภาษี", "TIN"] as const,
|
|
87
90
|
candidatePattern: "\\d{13}",
|
|
91
|
+
scope: "country",
|
|
88
92
|
country: "TH",
|
|
89
93
|
entityType: "any",
|
|
90
94
|
description:
|
package/src/tr/tckimlik.ts
CHANGED
|
@@ -19,13 +19,16 @@
|
|
|
19
19
|
* @see https://www.turkiye.gov.tr/nvi-tckn-dogrulama
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
+
import type {
|
|
23
|
+
ValidateResult,
|
|
24
|
+
CountryValidator,
|
|
25
|
+
} from "../types";
|
|
26
|
+
|
|
22
27
|
import { clean } from "#util/clean";
|
|
23
28
|
import { randomDigits, randomInt } from "#util/generate";
|
|
24
29
|
import { err } from "#util/result";
|
|
25
30
|
import { isdigits } from "#util/strings";
|
|
26
31
|
|
|
27
|
-
import type { ValidateResult, Validator } from "../types";
|
|
28
|
-
|
|
29
32
|
const compact = (value: string): string =>
|
|
30
33
|
clean(value, " -./");
|
|
31
34
|
|
|
@@ -88,7 +91,7 @@ const generate = (): string => {
|
|
|
88
91
|
};
|
|
89
92
|
|
|
90
93
|
/** Turkish Personal Identification Number. */
|
|
91
|
-
const tckimlik:
|
|
94
|
+
const tckimlik: CountryValidator<"TR"> = {
|
|
92
95
|
name: "Turkish Personal ID",
|
|
93
96
|
localName: "T.C. Kimlik Numarası",
|
|
94
97
|
abbreviation: "T.C. Kimlik",
|
|
@@ -97,6 +100,7 @@ const tckimlik: Validator = {
|
|
|
97
100
|
"T.C. Kimlik Numarası",
|
|
98
101
|
] as const,
|
|
99
102
|
candidatePattern: "[1-9]\\d{10}",
|
|
103
|
+
scope: "country",
|
|
100
104
|
country: "TR",
|
|
101
105
|
entityType: "person",
|
|
102
106
|
sourceUrl: "https://www.nvi.gov.tr/",
|
package/src/tr/vkn.ts
CHANGED
|
@@ -19,13 +19,16 @@
|
|
|
19
19
|
* @see https://www.gib.gov.tr/
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
+
import type {
|
|
23
|
+
ValidateResult,
|
|
24
|
+
CountryValidator,
|
|
25
|
+
} from "../types";
|
|
26
|
+
|
|
22
27
|
import { clean } from "#util/clean";
|
|
23
28
|
import { randomDigits } from "#util/generate";
|
|
24
29
|
import { err } from "#util/result";
|
|
25
30
|
import { isdigits } from "#util/strings";
|
|
26
31
|
|
|
27
|
-
import type { ValidateResult, Validator } from "../types";
|
|
28
|
-
|
|
29
32
|
const compact = (value: string): string =>
|
|
30
33
|
clean(value, " -./");
|
|
31
34
|
|
|
@@ -77,12 +80,13 @@ const generate = (): string => {
|
|
|
77
80
|
};
|
|
78
81
|
|
|
79
82
|
/** Turkish Tax Identification Number. */
|
|
80
|
-
const vkn:
|
|
83
|
+
const vkn: CountryValidator<"TR"> = {
|
|
81
84
|
name: "Turkish Tax ID",
|
|
82
85
|
localName: "Vergi Kimlik Numarası",
|
|
83
86
|
abbreviation: "VKN",
|
|
84
87
|
aliases: ["VKN", "Vergi Kimlik Numarası"] as const,
|
|
85
88
|
candidatePattern: "\\d{10}",
|
|
89
|
+
scope: "country",
|
|
86
90
|
country: "TR",
|
|
87
91
|
entityType: "company",
|
|
88
92
|
sourceUrl: "https://www.gib.gov.tr/",
|
package/src/tw/ubn.ts
CHANGED
|
@@ -10,13 +10,16 @@
|
|
|
10
10
|
* @see https://zh.wikipedia.org/wiki/統一編號
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import type {
|
|
14
|
+
ValidateResult,
|
|
15
|
+
CountryValidator,
|
|
16
|
+
} from "../types";
|
|
17
|
+
|
|
13
18
|
import { clean } from "#util/clean";
|
|
14
19
|
import { randomDigits } from "#util/generate";
|
|
15
20
|
import { err } from "#util/result";
|
|
16
21
|
import { isdigits } from "#util/strings";
|
|
17
22
|
|
|
18
|
-
import type { ValidateResult, Validator } from "../types";
|
|
19
|
-
|
|
20
23
|
const WEIGHTS = [1, 2, 1, 2, 1, 2, 4, 1] as const;
|
|
21
24
|
|
|
22
25
|
/** Sum the individual digits of a number. */
|
|
@@ -48,8 +51,8 @@ const validate = (value: string): ValidateResult => {
|
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
let sum = 0;
|
|
51
|
-
for (
|
|
52
|
-
sum += digitSum(Number(v[i]) *
|
|
54
|
+
for (const [i, weight] of WEIGHTS.entries()) {
|
|
55
|
+
sum += digitSum(Number(v[i]) * weight);
|
|
53
56
|
}
|
|
54
57
|
|
|
55
58
|
const checksum = sum % 10;
|
|
@@ -84,12 +87,13 @@ const generate = (): string => {
|
|
|
84
87
|
};
|
|
85
88
|
|
|
86
89
|
/** Taiwanese Unified Business Number. */
|
|
87
|
-
const ubn:
|
|
90
|
+
const ubn: CountryValidator<"TW"> = {
|
|
88
91
|
name: "Unified Business Number",
|
|
89
92
|
localName: "統一編號",
|
|
90
93
|
abbreviation: "UBN",
|
|
91
94
|
aliases: ["統一編號", "UBN"] as const,
|
|
92
95
|
candidatePattern: "\\d{8}",
|
|
96
|
+
scope: "country",
|
|
93
97
|
country: "TW",
|
|
94
98
|
entityType: "company",
|
|
95
99
|
description:
|
package/src/types.ts
CHANGED
|
@@ -116,24 +116,47 @@ export type ValidateResult =
|
|
|
116
116
|
| { valid: false; error: StdnumError };
|
|
117
117
|
|
|
118
118
|
/**
|
|
119
|
-
* Structured data extracted from
|
|
120
|
-
*
|
|
121
|
-
* birth date and gender.
|
|
119
|
+
* Structured data extracted from an identifier that
|
|
120
|
+
* encodes a birth date.
|
|
122
121
|
*/
|
|
123
|
-
export type
|
|
122
|
+
export type ParsedBirthDate = {
|
|
124
123
|
birthDate: Date;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Structured data extracted from a personal ID number
|
|
128
|
+
* that also encodes gender.
|
|
129
|
+
*/
|
|
130
|
+
export type ParsedPersonId = ParsedBirthDate & {
|
|
125
131
|
gender: "male" | "female";
|
|
126
132
|
};
|
|
127
133
|
|
|
128
|
-
export type
|
|
134
|
+
export type ParsedIdentifier =
|
|
135
|
+
| ParsedBirthDate
|
|
136
|
+
| ParsedPersonId;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Whether an identifier is scoped to a single
|
|
140
|
+
* country (e.g. Czech IČO) or is cross-border by
|
|
141
|
+
* design (e.g. IBAN, ISIN, BIC, LEI, EU VAT).
|
|
142
|
+
*
|
|
143
|
+
* Modeled as a discriminated union so consumers
|
|
144
|
+
* can group, filter, and exhaustively switch
|
|
145
|
+
* without null-checking `country`.
|
|
146
|
+
*/
|
|
147
|
+
export type ValidatorScope =
|
|
148
|
+
| { scope: "country"; country: CountryCode }
|
|
149
|
+
| { scope: "global" };
|
|
150
|
+
|
|
151
|
+
type ValidatorBase<
|
|
152
|
+
TParsed extends ParsedIdentifier | undefined = undefined,
|
|
153
|
+
> = {
|
|
129
154
|
/** English name. */
|
|
130
155
|
name: string;
|
|
131
156
|
/** Name in the local language. */
|
|
132
157
|
localName: string;
|
|
133
158
|
/** Common abbreviation (e.g. "IČO"). */
|
|
134
159
|
abbreviation: string;
|
|
135
|
-
/** Country this identifier belongs to. */
|
|
136
|
-
country?: CountryCode;
|
|
137
160
|
/** What kind of entity this identifies. */
|
|
138
161
|
entityType: "person" | "company" | "any";
|
|
139
162
|
|
|
@@ -197,4 +220,43 @@ export type Validator = {
|
|
|
197
220
|
* passed to validate() for confirmation.
|
|
198
221
|
*/
|
|
199
222
|
candidatePattern?: string;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Extract structured data (e.g. birth date,
|
|
226
|
+
* gender) from a known-valid identifier.
|
|
227
|
+
* Available on personal IDs that encode such
|
|
228
|
+
* data. Returns null if the input cannot be
|
|
229
|
+
* parsed.
|
|
230
|
+
*
|
|
231
|
+
* On the base `Validator` type this is optional
|
|
232
|
+
* with a widened return; narrow it by typing the
|
|
233
|
+
* validator as `Validator<ParsedPersonId>` etc.
|
|
234
|
+
*/
|
|
235
|
+
parse?: (value: string) => ParsedIdentifier | null;
|
|
236
|
+
} & ([TParsed] extends [undefined]
|
|
237
|
+
? unknown
|
|
238
|
+
: { parse: (value: string) => TParsed | null });
|
|
239
|
+
|
|
240
|
+
export type CountryValidator<
|
|
241
|
+
TCountry extends CountryCode = CountryCode,
|
|
242
|
+
TParsed extends ParsedIdentifier | undefined = undefined,
|
|
243
|
+
> = ValidatorBase<TParsed> & {
|
|
244
|
+
scope: "country";
|
|
245
|
+
country: TCountry;
|
|
200
246
|
};
|
|
247
|
+
|
|
248
|
+
export type GlobalValidator<
|
|
249
|
+
TParsed extends ParsedIdentifier | undefined = undefined,
|
|
250
|
+
> = ValidatorBase<TParsed> & {
|
|
251
|
+
scope: "global";
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
export type Validator<
|
|
255
|
+
TParsed extends ParsedIdentifier | undefined = undefined,
|
|
256
|
+
> =
|
|
257
|
+
| CountryValidator<CountryCode, TParsed>
|
|
258
|
+
| GlobalValidator<TParsed>;
|
|
259
|
+
|
|
260
|
+
export type ParsableValidator<
|
|
261
|
+
TParsed extends ParsedIdentifier = ParsedIdentifier,
|
|
262
|
+
> = Validator<TParsed>;
|