@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/mx/curp.ts
CHANGED
|
@@ -14,16 +14,17 @@
|
|
|
14
14
|
* @see https://en.wikipedia.org/wiki/CURP
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { clean } from "#util/clean";
|
|
18
|
-
import { isValidDate } from "#util/date";
|
|
19
|
-
import { err } from "#util/result";
|
|
20
|
-
|
|
21
17
|
import type {
|
|
22
18
|
ParsedPersonId,
|
|
23
19
|
ValidateResult,
|
|
24
|
-
|
|
20
|
+
CountryValidator,
|
|
25
21
|
} from "../types";
|
|
26
22
|
|
|
23
|
+
import { clean } from "#util/clean";
|
|
24
|
+
import { isValidDate } from "#util/date";
|
|
25
|
+
import { randomInt } from "#util/generate";
|
|
26
|
+
import { err } from "#util/result";
|
|
27
|
+
|
|
27
28
|
/** Valid Mexican state codes (2-letter). */
|
|
28
29
|
const STATE_CODES = new Set([
|
|
29
30
|
"AS",
|
|
@@ -60,6 +61,8 @@ const STATE_CODES = new Set([
|
|
|
60
61
|
"ZS",
|
|
61
62
|
"NE", // Born abroad
|
|
62
63
|
]);
|
|
64
|
+
const STATE_CODE_LIST = [...STATE_CODES];
|
|
65
|
+
const LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
63
66
|
|
|
64
67
|
/**
|
|
65
68
|
* Alphabet for CURP check digit computation.
|
|
@@ -69,8 +72,8 @@ const STATE_CODES = new Set([
|
|
|
69
72
|
const ALPHABET = "0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ";
|
|
70
73
|
|
|
71
74
|
const CHAR_MAP = new Map<string, number>();
|
|
72
|
-
for (
|
|
73
|
-
CHAR_MAP.set(
|
|
75
|
+
for (const [i, ch] of ALPHABET.split("").entries()) {
|
|
76
|
+
CHAR_MAP.set(ch, i);
|
|
74
77
|
}
|
|
75
78
|
|
|
76
79
|
const compact = (value: string): string =>
|
|
@@ -84,7 +87,9 @@ const compact = (value: string): string =>
|
|
|
84
87
|
const calcCheckDigit = (value: string): string => {
|
|
85
88
|
let sum = 0;
|
|
86
89
|
for (let i = 0; i < 17; i++) {
|
|
87
|
-
|
|
90
|
+
const ch = value[i];
|
|
91
|
+
if (ch === undefined) continue;
|
|
92
|
+
sum += (CHAR_MAP.get(ch) ?? 0) * (18 - i);
|
|
88
93
|
}
|
|
89
94
|
return String((10 - (sum % 10)) % 10);
|
|
90
95
|
};
|
|
@@ -126,6 +131,8 @@ const validate = (value: string): ValidateResult => {
|
|
|
126
131
|
const mm = Number(v.slice(6, 8));
|
|
127
132
|
const dd = Number(v.slice(8, 10));
|
|
128
133
|
|
|
134
|
+
// SAFETY: regex validation ensures v.length === 18.
|
|
135
|
+
// eslint-disable-next-line no-non-null-assertion
|
|
129
136
|
const year = resolveCurpYear(yy, v[16]!);
|
|
130
137
|
if (!isValidDate(year, mm, dd)) {
|
|
131
138
|
return err(
|
|
@@ -170,6 +177,8 @@ const parse = (value: string): ParsedPersonId | null => {
|
|
|
170
177
|
const mm = Number(v.slice(6, 8));
|
|
171
178
|
const dd = Number(v.slice(8, 10));
|
|
172
179
|
|
|
180
|
+
// SAFETY: regex validation ensures v.length === 18.
|
|
181
|
+
// eslint-disable-next-line no-non-null-assertion
|
|
173
182
|
const year = resolveCurpYear(yy, v[16]!);
|
|
174
183
|
|
|
175
184
|
const genderChar = v[10];
|
|
@@ -182,12 +191,37 @@ const parse = (value: string): ParsedPersonId | null => {
|
|
|
182
191
|
};
|
|
183
192
|
};
|
|
184
193
|
|
|
194
|
+
const randomLetter = (): string =>
|
|
195
|
+
LETTERS.charAt(randomInt(0, LETTERS.length - 1));
|
|
196
|
+
|
|
197
|
+
/** Generate a random valid CURP. */
|
|
198
|
+
const generate = (): string => {
|
|
199
|
+
const year = randomInt(1980, 2024);
|
|
200
|
+
const month = String(randomInt(1, 12)).padStart(2, "0");
|
|
201
|
+
const day = String(randomInt(1, 28)).padStart(2, "0");
|
|
202
|
+
const yy = String(year % 100).padStart(2, "0");
|
|
203
|
+
const gender = Math.random() < 0.5 ? "H" : "M";
|
|
204
|
+
const state =
|
|
205
|
+
STATE_CODE_LIST[
|
|
206
|
+
randomInt(0, STATE_CODE_LIST.length - 1)
|
|
207
|
+
] ?? "NE";
|
|
208
|
+
const centuryChar =
|
|
209
|
+
year >= 2000 ? randomLetter() : String(randomInt(0, 9));
|
|
210
|
+
const body =
|
|
211
|
+
`${randomLetter()}${randomLetter()}` +
|
|
212
|
+
`${randomLetter()}${randomLetter()}` +
|
|
213
|
+
`${yy}${month}${day}${gender}${state}` +
|
|
214
|
+
`${randomLetter()}${randomLetter()}${randomLetter()}` +
|
|
215
|
+
`${centuryChar}`;
|
|
216
|
+
return `${body}${calcCheckDigit(body)}`;
|
|
217
|
+
};
|
|
218
|
+
|
|
185
219
|
/**
|
|
186
220
|
* Mexican CURP (personal identification number).
|
|
187
221
|
*
|
|
188
222
|
* Example sourced from python-stdnum test suite.
|
|
189
223
|
*/
|
|
190
|
-
const curp:
|
|
224
|
+
const curp: CountryValidator<"MX", ParsedPersonId> = {
|
|
191
225
|
name: "Mexican Personal ID",
|
|
192
226
|
localName: "Clave Única de Registro de Población",
|
|
193
227
|
abbreviation: "CURP",
|
|
@@ -196,15 +230,18 @@ const curp: Validator = {
|
|
|
196
230
|
"Clave Única de Registro de Población",
|
|
197
231
|
] as const,
|
|
198
232
|
candidatePattern: "[A-Z]{4}\\d{6}[HM][A-Z]{5}[A-Z\\d]\\d",
|
|
233
|
+
scope: "country",
|
|
199
234
|
country: "MX",
|
|
200
235
|
entityType: "person",
|
|
201
236
|
lengths: [18] as const,
|
|
202
237
|
examples: ["BOXW310820HNERXN09"] as const,
|
|
203
238
|
compact,
|
|
204
239
|
format,
|
|
240
|
+
parse,
|
|
205
241
|
validate,
|
|
242
|
+
generate,
|
|
206
243
|
sourceUrl: "https://en.wikipedia.org/wiki/CURP",
|
|
207
244
|
};
|
|
208
245
|
|
|
209
246
|
export default curp;
|
|
210
|
-
export { compact, format, parse, validate };
|
|
247
|
+
export { compact, format, generate, parse, validate };
|
package/src/mx/rfc.ts
CHANGED
|
@@ -16,18 +16,22 @@
|
|
|
16
16
|
* @see https://en.wikipedia.org/wiki/Tax_Identification_Number_(Mexico)
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
+
import type {
|
|
20
|
+
ValidateResult,
|
|
21
|
+
CountryValidator,
|
|
22
|
+
} from "../types";
|
|
23
|
+
|
|
19
24
|
import { clean } from "#util/clean";
|
|
20
25
|
import { isValidDate } from "#util/date";
|
|
26
|
+
import { randomInt } from "#util/generate";
|
|
21
27
|
import { err } from "#util/result";
|
|
22
28
|
|
|
23
|
-
import type { ValidateResult, Validator } from "../types";
|
|
24
|
-
|
|
25
29
|
/** Alphabet for RFC check digit computation. */
|
|
26
30
|
const ALPHABET = "0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ Ñ";
|
|
27
31
|
|
|
28
32
|
const CHAR_MAP = new Map<string, number>();
|
|
29
|
-
for (
|
|
30
|
-
CHAR_MAP.set(
|
|
33
|
+
for (const [i, ch] of ALPHABET.split("").entries()) {
|
|
34
|
+
CHAR_MAP.set(ch, i);
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
const compact = (value: string): string =>
|
|
@@ -48,7 +52,8 @@ const calcCheckDigit = (value: string): string => {
|
|
|
48
52
|
const padded = value.length === 11 ? ` ${value}` : value;
|
|
49
53
|
let sum = 0;
|
|
50
54
|
for (let i = 0; i < 12; i++) {
|
|
51
|
-
const ch = padded[i]
|
|
55
|
+
const ch = padded[i];
|
|
56
|
+
if (ch === undefined) continue;
|
|
52
57
|
const v = CHAR_MAP.get(ch) ?? 0;
|
|
53
58
|
sum += v * (13 - i);
|
|
54
59
|
}
|
|
@@ -60,6 +65,8 @@ const calcCheckDigit = (value: string): string => {
|
|
|
60
65
|
|
|
61
66
|
const PERSON_RE = /^[A-ZÑ&]{4}\d{6}[A-Z\d]{3}$/;
|
|
62
67
|
const COMPANY_RE = /^[A-ZÑ&]{3}\d{6}[A-Z\d]{3}$/;
|
|
68
|
+
const PREFIX_ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZÑ&";
|
|
69
|
+
const RFC_ALNUM = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
63
70
|
|
|
64
71
|
const validate = (value: string): ValidateResult => {
|
|
65
72
|
const v = compact(value);
|
|
@@ -115,12 +122,38 @@ const validate = (value: string): ValidateResult => {
|
|
|
115
122
|
|
|
116
123
|
const format = (value: string): string => compact(value);
|
|
117
124
|
|
|
125
|
+
const randomCharFrom = (chars: string): string =>
|
|
126
|
+
chars.charAt(randomInt(0, chars.length - 1));
|
|
127
|
+
|
|
128
|
+
/** Generate a random valid RFC. */
|
|
129
|
+
const generate = (): string => {
|
|
130
|
+
const isPerson = Math.random() < 0.5;
|
|
131
|
+
const prefixLength = isPerson ? 4 : 3;
|
|
132
|
+
let prefix = "";
|
|
133
|
+
for (let i = 0; i < prefixLength; i++) {
|
|
134
|
+
prefix += randomCharFrom(PREFIX_ALPHA);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const year = randomInt(2000, 2099);
|
|
138
|
+
const month = String(randomInt(1, 12)).padStart(2, "0");
|
|
139
|
+
const day = String(randomInt(1, 28)).padStart(2, "0");
|
|
140
|
+
let homoclave = "";
|
|
141
|
+
for (let i = 0; i < 2; i++) {
|
|
142
|
+
homoclave += randomCharFrom(RFC_ALNUM);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const body =
|
|
146
|
+
`${prefix}${String(year % 100).padStart(2, "0")}` +
|
|
147
|
+
`${month}${day}${homoclave}`;
|
|
148
|
+
return `${body}${calcCheckDigit(body)}`;
|
|
149
|
+
};
|
|
150
|
+
|
|
118
151
|
/**
|
|
119
152
|
* Mexican RFC (tax identification number).
|
|
120
153
|
*
|
|
121
154
|
* Examples sourced from python-stdnum test suite.
|
|
122
155
|
*/
|
|
123
|
-
const rfc:
|
|
156
|
+
const rfc: CountryValidator<"MX"> = {
|
|
124
157
|
name: "Mexican Tax ID",
|
|
125
158
|
localName: "Registro Federal de Contribuyentes",
|
|
126
159
|
abbreviation: "RFC",
|
|
@@ -129,6 +162,7 @@ const rfc: Validator = {
|
|
|
129
162
|
"Registro Federal de Contribuyentes",
|
|
130
163
|
] as const,
|
|
131
164
|
candidatePattern: "[A-ZÑ&]{3,4}\\d{6}[A-Z\\d]{3}",
|
|
165
|
+
scope: "country",
|
|
132
166
|
country: "MX",
|
|
133
167
|
entityType: "any",
|
|
134
168
|
lengths: [12, 13] as const,
|
|
@@ -136,9 +170,10 @@ const rfc: Validator = {
|
|
|
136
170
|
compact,
|
|
137
171
|
format,
|
|
138
172
|
validate,
|
|
173
|
+
generate,
|
|
139
174
|
sourceUrl:
|
|
140
175
|
"https://en.wikipedia.org/wiki/Tax_Identification_Number_(Mexico)",
|
|
141
176
|
};
|
|
142
177
|
|
|
143
178
|
export default rfc;
|
|
144
|
-
export { compact, format, validate };
|
|
179
|
+
export { compact, format, generate, validate };
|
package/src/my/nric.ts
CHANGED
|
@@ -12,17 +12,18 @@
|
|
|
12
12
|
* @see https://en.wikipedia.org/wiki/Malaysian_identity_card
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import { clean } from "#util/clean";
|
|
16
|
-
import { isValidDate } from "#util/date";
|
|
17
|
-
import { err } from "#util/result";
|
|
18
|
-
import { isdigits } from "#util/strings";
|
|
19
|
-
|
|
20
15
|
import type {
|
|
21
16
|
ParsedPersonId,
|
|
22
17
|
ValidateResult,
|
|
23
|
-
|
|
18
|
+
CountryValidator,
|
|
24
19
|
} from "../types";
|
|
25
20
|
|
|
21
|
+
import { clean } from "#util/clean";
|
|
22
|
+
import { isValidDate } from "#util/date";
|
|
23
|
+
import { randomInt } from "#util/generate";
|
|
24
|
+
import { err } from "#util/result";
|
|
25
|
+
import { isdigits } from "#util/strings";
|
|
26
|
+
|
|
26
27
|
/**
|
|
27
28
|
* Valid place-of-birth codes (2-digit).
|
|
28
29
|
* Codes 01-16 are states, 21-59 are pre-2000
|
|
@@ -211,13 +212,35 @@ const parse = (value: string): ParsedPersonId | null => {
|
|
|
211
212
|
};
|
|
212
213
|
};
|
|
213
214
|
|
|
215
|
+
const PB_CODES = [...VALID_PB_CODES];
|
|
216
|
+
|
|
217
|
+
/** Generate a random valid Malaysian NRIC. */
|
|
218
|
+
const generate = (): string => {
|
|
219
|
+
const year = randomInt(1950, 2024);
|
|
220
|
+
const month = String(randomInt(1, 12)).padStart(2, "0");
|
|
221
|
+
const day = String(randomInt(1, 28)).padStart(2, "0");
|
|
222
|
+
const pb =
|
|
223
|
+
PB_CODES[randomInt(0, PB_CODES.length - 1)] ?? "01";
|
|
224
|
+
const serial = String(randomInt(0, 999)).padStart(3, "0");
|
|
225
|
+
const isMale = Math.random() < 0.5;
|
|
226
|
+
const lastDigit = isMale
|
|
227
|
+
? String(randomInt(0, 4) * 2 + 1)
|
|
228
|
+
: String(randomInt(0, 4) * 2);
|
|
229
|
+
|
|
230
|
+
return (
|
|
231
|
+
`${String(year % 100).padStart(2, "0")}` +
|
|
232
|
+
`${month}${day}${pb}${serial}${lastDigit}`
|
|
233
|
+
);
|
|
234
|
+
};
|
|
235
|
+
|
|
214
236
|
/** Malaysian National Registration Identity Card. */
|
|
215
|
-
const nric:
|
|
237
|
+
const nric: CountryValidator<"MY", ParsedPersonId> = {
|
|
216
238
|
name: "Malaysian National Registration Identity Card Number",
|
|
217
239
|
localName: "Nombor Kad Pengenalan",
|
|
218
240
|
abbreviation: "NRIC",
|
|
219
241
|
aliases: ["NRIC", "MyKad", "kad pengenalan"] as const,
|
|
220
242
|
candidatePattern: "\\d{6}-?\\d{2}-?\\d{4}",
|
|
243
|
+
scope: "country",
|
|
221
244
|
country: "MY",
|
|
222
245
|
entityType: "person",
|
|
223
246
|
description:
|
|
@@ -228,8 +251,10 @@ const nric: Validator = {
|
|
|
228
251
|
examples: ["770305021234", "880715141234"] as const,
|
|
229
252
|
compact,
|
|
230
253
|
format,
|
|
254
|
+
parse,
|
|
231
255
|
validate,
|
|
256
|
+
generate,
|
|
232
257
|
};
|
|
233
258
|
|
|
234
259
|
export default nric;
|
|
235
|
-
export { compact, format, parse, validate };
|
|
260
|
+
export { compact, format, generate, parse, validate };
|
package/src/ng/nin.ts
CHANGED
|
@@ -13,13 +13,16 @@ const generate = (): string => randomDigits(11);
|
|
|
13
13
|
* @see https://nimc.gov.ng/about-nin/
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
+
import type {
|
|
17
|
+
ValidateResult,
|
|
18
|
+
CountryValidator,
|
|
19
|
+
} from "../types";
|
|
20
|
+
|
|
16
21
|
import { clean } from "#util/clean";
|
|
17
22
|
import { randomDigits } from "#util/generate";
|
|
18
23
|
import { err } from "#util/result";
|
|
19
24
|
import { isdigits } from "#util/strings";
|
|
20
25
|
|
|
21
|
-
import type { ValidateResult, Validator } from "../types";
|
|
22
|
-
|
|
23
26
|
const compact = (value: string): string =>
|
|
24
27
|
clean(value, " -");
|
|
25
28
|
|
|
@@ -46,7 +49,7 @@ const format = (value: string): string => {
|
|
|
46
49
|
};
|
|
47
50
|
|
|
48
51
|
/** Nigerian National Identification Number. */
|
|
49
|
-
const nin:
|
|
52
|
+
const nin: CountryValidator<"NG"> = {
|
|
50
53
|
name: "National Identification Number",
|
|
51
54
|
localName: "National Identification Number",
|
|
52
55
|
abbreviation: "NIN",
|
|
@@ -55,6 +58,7 @@ const nin: Validator = {
|
|
|
55
58
|
"National Identification Number",
|
|
56
59
|
] as const,
|
|
57
60
|
candidatePattern: "\\d{11}",
|
|
61
|
+
scope: "country",
|
|
58
62
|
country: "NG",
|
|
59
63
|
entityType: "person",
|
|
60
64
|
lengths: [11] as const,
|
package/src/ni/ruc.ts
CHANGED
|
@@ -22,13 +22,16 @@
|
|
|
22
22
|
* @see https://www.dgi.gob.ni/
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
+
import type {
|
|
26
|
+
ValidateResult,
|
|
27
|
+
CountryValidator,
|
|
28
|
+
} from "../types";
|
|
29
|
+
|
|
25
30
|
import { clean } from "#util/clean";
|
|
26
31
|
import { randomDigits } from "#util/generate";
|
|
27
32
|
import { err } from "#util/result";
|
|
28
33
|
import { isdigits } from "#util/strings";
|
|
29
34
|
|
|
30
|
-
import type { ValidateResult, Validator } from "../types";
|
|
31
|
-
|
|
32
35
|
/**
|
|
33
36
|
* Check letter alphabet (mod 23). Excludes I, O, Z
|
|
34
37
|
* to prevent transcription errors.
|
|
@@ -154,12 +157,13 @@ const format = (value: string): string => {
|
|
|
154
157
|
const generate = (): string => "J" + randomDigits(13);
|
|
155
158
|
|
|
156
159
|
/** Nicaragua tax identification number. */
|
|
157
|
-
const ruc:
|
|
160
|
+
const ruc: CountryValidator<"NI"> = {
|
|
158
161
|
name: "Tax Identification Number",
|
|
159
162
|
localName: "Registro Único de Contribuyente",
|
|
160
163
|
abbreviation: "RUC",
|
|
161
164
|
aliases: ["RUC"] as const,
|
|
162
165
|
candidatePattern: "[JKME]\\d{13}",
|
|
166
|
+
scope: "country",
|
|
163
167
|
country: "NI",
|
|
164
168
|
entityType: "any",
|
|
165
169
|
description: "Tax identifier issued by Nicaragua's DGI",
|
package/src/nl/bsn.ts
CHANGED
|
@@ -8,14 +8,17 @@
|
|
|
8
8
|
* @see https://www.government.nl/topics/personal-data/citizen-service-number-bsn
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import type {
|
|
12
|
+
ValidateResult,
|
|
13
|
+
CountryValidator,
|
|
14
|
+
} from "../types";
|
|
15
|
+
|
|
11
16
|
import { weightedSum } from "#checksums/weighted-sum";
|
|
12
17
|
import { clean } from "#util/clean";
|
|
13
18
|
import { randomDigits } from "#util/generate";
|
|
14
19
|
import { err } from "#util/result";
|
|
15
20
|
import { isdigits } from "#util/strings";
|
|
16
21
|
|
|
17
|
-
import type { ValidateResult, Validator } from "../types";
|
|
18
|
-
|
|
19
22
|
const WEIGHTS = [9, 8, 7, 6, 5, 4, 3, 2, -1] as const;
|
|
20
23
|
|
|
21
24
|
const compact = (value: string): string =>
|
|
@@ -62,7 +65,7 @@ const generate = (): string => {
|
|
|
62
65
|
};
|
|
63
66
|
|
|
64
67
|
/** Dutch Citizen Service Number. */
|
|
65
|
-
const bsn:
|
|
68
|
+
const bsn: CountryValidator<"NL"> = {
|
|
66
69
|
name: "Dutch Citizen Service Number",
|
|
67
70
|
localName: "Burgerservicenummer",
|
|
68
71
|
abbreviation: "BSN",
|
|
@@ -72,6 +75,7 @@ const bsn: Validator = {
|
|
|
72
75
|
"sofinummer",
|
|
73
76
|
] as const,
|
|
74
77
|
candidatePattern: "\\d{9}",
|
|
78
|
+
scope: "country",
|
|
75
79
|
country: "NL",
|
|
76
80
|
entityType: "person",
|
|
77
81
|
sourceUrl:
|
package/src/nl/kvk.ts
CHANGED
|
@@ -9,13 +9,16 @@ const generate = (): string => randomDigits(8);
|
|
|
9
9
|
* @see https://www.kvk.nl/
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import type {
|
|
13
|
+
ValidateResult,
|
|
14
|
+
CountryValidator,
|
|
15
|
+
} from "../types";
|
|
16
|
+
|
|
12
17
|
import { clean } from "#util/clean";
|
|
13
18
|
import { randomDigits } from "#util/generate";
|
|
14
19
|
import { err } from "#util/result";
|
|
15
20
|
import { isdigits } from "#util/strings";
|
|
16
21
|
|
|
17
|
-
import type { ValidateResult, Validator } from "../types";
|
|
18
|
-
|
|
19
22
|
const compact = (value: string): string =>
|
|
20
23
|
clean(value, " -/.");
|
|
21
24
|
|
|
@@ -39,12 +42,13 @@ const validate = (value: string): ValidateResult => {
|
|
|
39
42
|
const format = (value: string): string => compact(value);
|
|
40
43
|
|
|
41
44
|
/** Dutch Chamber of Commerce Number. */
|
|
42
|
-
const kvk:
|
|
45
|
+
const kvk: CountryValidator<"NL"> = {
|
|
43
46
|
name: "Dutch Chamber of Commerce Number",
|
|
44
47
|
localName: "KvK-nummer",
|
|
45
48
|
abbreviation: "KvK",
|
|
46
49
|
aliases: ["KVK-nummer", "Kamer van Koophandel"] as const,
|
|
47
50
|
candidatePattern: "\\d{8}",
|
|
51
|
+
scope: "country",
|
|
48
52
|
country: "NL",
|
|
49
53
|
entityType: "company",
|
|
50
54
|
sourceUrl: "https://www.kvk.nl/",
|
package/src/nl/vat.ts
CHANGED
|
@@ -2,20 +2,26 @@
|
|
|
2
2
|
* BTW (Dutch VAT number).
|
|
3
3
|
*
|
|
4
4
|
* 12 characters: 9 digits + "B" + 2 digits.
|
|
5
|
-
* Mod 97 check: convert "NL" + number to numeric
|
|
6
|
-
* (N=23, L=21, B=11), mod 97 === 1.
|
|
7
5
|
*
|
|
8
|
-
*
|
|
6
|
+
* The current Dutch VAT identification number
|
|
7
|
+
* (btw-id) format is structural: `NL` + 9 digits
|
|
8
|
+
* + `B` + 2 digits. The official guidance explicitly
|
|
9
|
+
* states that the 9 digits are not derived from BSN
|
|
10
|
+
* and the final 2 digits are random.
|
|
11
|
+
*
|
|
9
12
|
* @see https://business.gov.nl/regulations/using-checking-vat-numbers/
|
|
10
13
|
*/
|
|
11
14
|
|
|
15
|
+
import type {
|
|
16
|
+
ValidateResult,
|
|
17
|
+
CountryValidator,
|
|
18
|
+
} from "../types";
|
|
19
|
+
|
|
12
20
|
import { clean } from "#util/clean";
|
|
13
21
|
import { randomDigits } from "#util/generate";
|
|
14
22
|
import { err } from "#util/result";
|
|
15
23
|
import { isdigits } from "#util/strings";
|
|
16
24
|
|
|
17
|
-
import type { ValidateResult, Validator } from "../types";
|
|
18
|
-
|
|
19
25
|
const compact = (value: string): string => {
|
|
20
26
|
let v = clean(value, " -/.");
|
|
21
27
|
if (v.startsWith("NL") || v.startsWith("nl")) {
|
|
@@ -30,42 +36,6 @@ const compact = (value: string): string => {
|
|
|
30
36
|
return v;
|
|
31
37
|
};
|
|
32
38
|
|
|
33
|
-
/**
|
|
34
|
-
* Compute mod 97 of a string containing digits and
|
|
35
|
-
* uppercase letters (A=10, B=11, ..., Z=35).
|
|
36
|
-
*/
|
|
37
|
-
const mod97 = (value: string): number => {
|
|
38
|
-
let remainder = 0;
|
|
39
|
-
for (const ch of value) {
|
|
40
|
-
const code = ch.charCodeAt(0);
|
|
41
|
-
if (code >= 48 && code <= 57) {
|
|
42
|
-
// Digit
|
|
43
|
-
remainder = (remainder * 10 + (code - 48)) % 97;
|
|
44
|
-
} else if (code >= 65 && code <= 90) {
|
|
45
|
-
// Letter: two decimal digits (A=10, ..., Z=35)
|
|
46
|
-
const num = code - 55;
|
|
47
|
-
remainder = (remainder * 100 + num) % 97;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return remainder;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Check if a 9-digit string is a valid BSN (Dutch citizen
|
|
55
|
-
* identification number). Weights [9,8,7,6,5,4,3,2,-1],
|
|
56
|
-
* sum % 11 === 0.
|
|
57
|
-
*/
|
|
58
|
-
const bsnValid = (num: string): boolean => {
|
|
59
|
-
if (!isdigits(num) || num.length !== 9) return false;
|
|
60
|
-
if (Number.parseInt(num, 10) <= 0) return false;
|
|
61
|
-
let sum = 0;
|
|
62
|
-
for (let i = 0; i < 8; i++) {
|
|
63
|
-
sum += (9 - i) * Number(num[i]);
|
|
64
|
-
}
|
|
65
|
-
sum -= Number(num[8]);
|
|
66
|
-
return sum % 11 === 0;
|
|
67
|
-
};
|
|
68
|
-
|
|
69
39
|
const validate = (value: string): ValidateResult => {
|
|
70
40
|
const v = compact(value);
|
|
71
41
|
if (v.length !== 12) {
|
|
@@ -92,25 +62,6 @@ const validate = (value: string): ValidateResult => {
|
|
|
92
62
|
"Dutch VAT number must end with 2 digits",
|
|
93
63
|
);
|
|
94
64
|
}
|
|
95
|
-
if (Number.parseInt(v.slice(0, 9), 10) <= 0) {
|
|
96
|
-
return err(
|
|
97
|
-
"INVALID_FORMAT",
|
|
98
|
-
"Dutch VAT number first 9 digits must be > 0",
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
if (Number.parseInt(v.slice(10, 12), 10) <= 0) {
|
|
102
|
-
return err(
|
|
103
|
-
"INVALID_FORMAT",
|
|
104
|
-
"Dutch VAT number last 2 digits must be > 0",
|
|
105
|
-
);
|
|
106
|
-
}
|
|
107
|
-
// Valid if BSN check passes OR mod 97 check passes
|
|
108
|
-
if (!bsnValid(v.slice(0, 9)) && mod97(`NL${v}`) !== 1) {
|
|
109
|
-
return err(
|
|
110
|
-
"INVALID_CHECKSUM",
|
|
111
|
-
"Dutch VAT number checksum failed",
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
65
|
return { valid: true, compact: v };
|
|
115
66
|
};
|
|
116
67
|
|
|
@@ -118,24 +69,22 @@ const format = (value: string): string =>
|
|
|
118
69
|
`NL${compact(value)}`;
|
|
119
70
|
|
|
120
71
|
/** Generate a random valid Dutch VAT number. */
|
|
121
|
-
const generate = (): string =>
|
|
122
|
-
|
|
123
|
-
const c = randomDigits(9) + "B" + randomDigits(2);
|
|
124
|
-
if (validate(c).valid) return c;
|
|
125
|
-
}
|
|
126
|
-
};
|
|
72
|
+
const generate = (): string =>
|
|
73
|
+
`${randomDigits(9)}B${randomDigits(2)}`;
|
|
127
74
|
|
|
128
75
|
/** Dutch VAT Number. */
|
|
129
|
-
const vat:
|
|
76
|
+
const vat: CountryValidator<"NL"> = {
|
|
130
77
|
name: "Dutch VAT Number",
|
|
131
78
|
localName: "BTW-identificatienummer",
|
|
132
79
|
abbreviation: "BTW",
|
|
133
80
|
aliases: ["BTW-nummer", "BTW-id"] as const,
|
|
134
81
|
candidatePattern: "NL\\d{9}B\\d{2}",
|
|
82
|
+
scope: "country",
|
|
135
83
|
country: "NL",
|
|
136
84
|
entityType: "company",
|
|
137
|
-
sourceUrl:
|
|
138
|
-
|
|
85
|
+
sourceUrl:
|
|
86
|
+
"https://business.gov.nl/regulations/using-checking-vat-numbers/",
|
|
87
|
+
examples: ["000099998B57"] as const,
|
|
139
88
|
compact,
|
|
140
89
|
format,
|
|
141
90
|
validate,
|
package/src/no/fodselsnummer.ts
CHANGED
|
@@ -8,18 +8,18 @@
|
|
|
8
8
|
* @see https://www.skatteetaten.no/
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import type {
|
|
12
|
+
ParsedPersonId,
|
|
13
|
+
ValidateResult,
|
|
14
|
+
CountryValidator,
|
|
15
|
+
} from "../types";
|
|
16
|
+
|
|
11
17
|
import { clean } from "#util/clean";
|
|
12
18
|
import { isValidDate } from "#util/date";
|
|
13
19
|
import { randomDigits, randomInt } from "#util/generate";
|
|
14
20
|
import { err } from "#util/result";
|
|
15
21
|
import { isdigits } from "#util/strings";
|
|
16
22
|
|
|
17
|
-
import type {
|
|
18
|
-
ParsedPersonId,
|
|
19
|
-
ValidateResult,
|
|
20
|
-
Validator,
|
|
21
|
-
} from "../types";
|
|
22
|
-
|
|
23
23
|
const WEIGHTS_D1 = [3, 7, 6, 1, 8, 9, 4, 5, 2] as const;
|
|
24
24
|
const WEIGHTS_D2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2] as const;
|
|
25
25
|
|
|
@@ -172,18 +172,23 @@ const generate = (): string => {
|
|
|
172
172
|
};
|
|
173
173
|
|
|
174
174
|
/** Norwegian Birth Number. */
|
|
175
|
-
const fodselsnummer:
|
|
175
|
+
const fodselsnummer: CountryValidator<
|
|
176
|
+
"NO",
|
|
177
|
+
ParsedPersonId
|
|
178
|
+
> = {
|
|
176
179
|
name: "Norwegian Birth Number",
|
|
177
180
|
localName: "Fødselsnummer",
|
|
178
181
|
abbreviation: "Fødselsnr",
|
|
179
182
|
aliases: ["fødselsnummer", "personnummer"] as const,
|
|
180
183
|
candidatePattern: "\\d{11}",
|
|
184
|
+
scope: "country",
|
|
181
185
|
country: "NO",
|
|
182
186
|
entityType: "person",
|
|
183
187
|
sourceUrl: "https://www.skatteetaten.no/",
|
|
184
188
|
examples: ["15108695088"] as const,
|
|
185
189
|
compact,
|
|
186
190
|
format,
|
|
191
|
+
parse,
|
|
187
192
|
validate,
|
|
188
193
|
generate,
|
|
189
194
|
};
|
package/src/no/mva.ts
CHANGED
|
@@ -7,15 +7,18 @@
|
|
|
7
7
|
* @see https://www.skatteetaten.no/
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
import type {
|
|
11
|
+
ValidateResult,
|
|
12
|
+
CountryValidator,
|
|
13
|
+
} from "../types";
|
|
14
14
|
import {
|
|
15
15
|
validate as validateOrgnr,
|
|
16
16
|
generate as generateOrgnr,
|
|
17
17
|
} from "./orgnr";
|
|
18
18
|
|
|
19
|
+
import { clean } from "#util/clean";
|
|
20
|
+
import { err } from "#util/result";
|
|
21
|
+
|
|
19
22
|
const compact = (value: string): string => {
|
|
20
23
|
let v = clean(value, " -").toUpperCase();
|
|
21
24
|
if (v.startsWith("NO")) {
|
|
@@ -53,12 +56,13 @@ const format = (value: string): string => {
|
|
|
53
56
|
const generate = (): string => generateOrgnr() + "MVA";
|
|
54
57
|
|
|
55
58
|
/** Norwegian VAT Number. */
|
|
56
|
-
const mva:
|
|
59
|
+
const mva: CountryValidator<"NO"> = {
|
|
57
60
|
name: "Norwegian VAT Number",
|
|
58
61
|
localName: "Merverdiavgift",
|
|
59
62
|
abbreviation: "MVA",
|
|
60
63
|
aliases: ["MVA-nummer", "organisasjonsnummer"] as const,
|
|
61
64
|
candidatePattern: "NO\\d{9}MVA",
|
|
65
|
+
scope: "country",
|
|
62
66
|
country: "NO",
|
|
63
67
|
entityType: "company",
|
|
64
68
|
sourceUrl: "https://www.skatteetaten.no/",
|