@stll/stdnum 0.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -5
- package/README.md +28 -4
- package/dist/_checksums/luhn.js.map +1 -1
- package/dist/_checksums/mod1110.js +1 -1
- package/dist/_checksums/mod1110.js.map +1 -1
- package/dist/_checksums/mod112.js +5 -5
- package/dist/_checksums/mod112.js.map +1 -1
- package/dist/_checksums/mod97.js.map +1 -1
- package/dist/_checksums/verhoeff.js.map +1 -1
- package/dist/_checksums/weighted-sum.js.map +1 -1
- package/dist/_util/arabic.js.map +1 -1
- package/dist/_util/clean.js.map +1 -1
- package/dist/_util/date.js.map +1 -1
- package/dist/_util/generate.d.ts +13 -1
- package/dist/_util/generate.js +23 -1
- package/dist/_util/generate.js.map +1 -1
- package/dist/_util/result.js.map +1 -1
- package/dist/_util/strings.js.map +1 -1
- package/dist/ad/mod.d.ts +3 -2
- package/dist/ad/nrt.d.ts +16 -2
- package/dist/ad/nrt.js +4 -16
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +2 -3
- package/dist/ae/eid.js +2 -12
- package/dist/ae/eid.js.map +1 -1
- package/dist/ae/mod.d.ts +3 -2
- package/dist/ai/mod.d.ts +3 -2
- package/dist/ai/tin.d.ts +20 -2
- package/dist/ai/tin.js +1 -18
- package/dist/ai/tin.js.map +1 -1
- package/dist/al/mod.d.ts +3 -2
- package/dist/al/nipt.d.ts +13 -2
- package/dist/al/nipt.js +1 -11
- package/dist/al/nipt.js.map +1 -1
- package/dist/am/mod.d.ts +3 -2
- package/dist/am/tin.d.ts +16 -2
- package/dist/am/tin.js +1 -14
- package/dist/am/tin.js.map +1 -1
- package/dist/ar/cbu.d.ts +2 -3
- package/dist/ar/cbu.js +2 -10
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +2 -3
- package/dist/ar/cuit.js +13 -29
- package/dist/ar/cuit.js.map +1 -1
- package/dist/ar/dni.d.ts +11 -2
- package/dist/ar/dni.js +1 -9
- package/dist/ar/dni.js.map +1 -1
- package/dist/ar/mod.d.ts +3 -2
- package/dist/at/businessid.d.ts +10 -2
- package/dist/at/businessid.js +1 -8
- package/dist/at/businessid.js.map +1 -1
- package/dist/at/mod.d.ts +3 -2
- package/dist/at/tin.d.ts +2 -3
- package/dist/at/tin.js +1 -11
- package/dist/at/tin.js.map +1 -1
- package/dist/at/uid.d.ts +2 -3
- package/dist/at/uid.js +2 -10
- package/dist/at/uid.js.map +1 -1
- package/dist/at/vnr.d.ts +5 -4
- package/dist/at/vnr.js +23 -16
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +2 -3
- package/dist/au/abn.js +1 -10
- package/dist/au/abn.js.map +1 -1
- package/dist/au/acn.d.ts +2 -3
- package/dist/au/acn.js +1 -10
- package/dist/au/acn.js.map +1 -1
- package/dist/au/mod.d.ts +3 -2
- package/dist/au/tfn.d.ts +2 -3
- package/dist/au/tfn.js +1 -10
- package/dist/au/tfn.js.map +1 -1
- package/dist/az/mod.d.ts +3 -2
- package/dist/az/voen.d.ts +2 -3
- package/dist/az/voen.js +1 -14
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +2 -3
- package/dist/ba/jmbg.js +4 -11
- package/dist/ba/jmbg.js.map +1 -1
- package/dist/ba/mod.d.ts +3 -2
- package/dist/bd/mod.d.ts +3 -2
- package/dist/bd/nid.d.ts +23 -2
- package/dist/bd/nid.js +11 -32
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +2 -3
- package/dist/be/bis.js +1 -11
- package/dist/be/bis.js.map +1 -1
- package/dist/be/mod.d.ts +3 -2
- package/dist/be/nn.d.ts +2 -3
- package/dist/be/nn.js +1 -11
- package/dist/be/nn.js.map +1 -1
- package/dist/be/vat.d.ts +2 -3
- package/dist/be/vat.js +1 -9
- package/dist/be/vat.js.map +1 -1
- package/dist/bg/egn.d.ts +2 -3
- package/dist/bg/egn.js +5 -13
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/mod.d.ts +3 -2
- package/dist/bg/pnf.d.ts +2 -3
- package/dist/bg/pnf.js +1 -8
- package/dist/bg/pnf.js.map +1 -1
- package/dist/bg/vat.d.ts +2 -3
- package/dist/bg/vat.js +3 -9
- package/dist/bg/vat.js.map +1 -1
- package/dist/bh/cpr.d.ts +5 -4
- package/dist/bh/cpr.js +9 -19
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bh/mod.d.ts +3 -2
- package/dist/bic.d.ts +13 -2
- package/dist/bic.js +14 -26
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +2 -3
- package/dist/br/cnpj.js +1 -20
- package/dist/br/cnpj.js.map +1 -1
- package/dist/br/cpf.d.ts +2 -3
- package/dist/br/cpf.js +1 -14
- package/dist/br/cpf.js.map +1 -1
- package/dist/br/mod.d.ts +3 -2
- package/dist/by/mod.d.ts +3 -2
- package/dist/by/unp.d.ts +2 -3
- package/dist/by/unp.js +9 -17
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/mod.d.ts +3 -2
- package/dist/bz/tin.d.ts +5 -4
- package/dist/bz/tin.js +10 -27
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +2 -3
- package/dist/ca/bn.js +2 -10
- package/dist/ca/bn.js.map +1 -1
- package/dist/ca/mod.d.ts +3 -2
- package/dist/ca/sin.d.ts +2 -3
- package/dist/ca/sin.js +2 -10
- package/dist/ca/sin.js.map +1 -1
- package/dist/ch/mod.d.ts +3 -2
- package/dist/ch/ssn.d.ts +2 -3
- package/dist/ch/ssn.js +1 -9
- package/dist/ch/ssn.js.map +1 -1
- package/dist/ch/uid.d.ts +2 -3
- package/dist/ch/uid.js +1 -9
- package/dist/ch/uid.js.map +1 -1
- package/dist/ch/vat.d.ts +2 -3
- package/dist/ch/vat.js +1 -9
- package/dist/ch/vat.js.map +1 -1
- package/dist/cl/mod.d.ts +3 -2
- package/dist/cl/rut.d.ts +2 -3
- package/dist/cl/rut.js +2 -15
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/mod.d.ts +3 -2
- package/dist/cn/ric.d.ts +2 -3
- package/dist/cn/ric.js +4 -14
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +2 -3
- package/dist/cn/uscc.js +8 -16
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/mod.d.ts +3 -2
- package/dist/co/nit.d.ts +2 -3
- package/dist/co/nit.js +6 -13
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.d.ts +18 -2
- package/dist/cr/cpf.js +5 -19
- package/dist/cr/cpf.js.map +1 -1
- package/dist/cr/mod.d.ts +3 -2
- package/dist/creditcard.d.ts +2 -3
- package/dist/creditcard.js +5 -14
- package/dist/creditcard.js.map +1 -1
- package/dist/cu/mod.d.ts +3 -2
- package/dist/cu/ni.d.ts +5 -4
- package/dist/cu/ni.js +13 -18
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/mod.d.ts +3 -2
- package/dist/cy/vat.d.ts +2 -3
- package/dist/cy/vat.js +1 -8
- package/dist/cy/vat.js.map +1 -1
- package/dist/cz/dic.d.ts +2 -3
- package/dist/cz/dic.js +7 -13
- package/dist/cz/dic.js.map +1 -1
- package/dist/cz/ico.d.ts +2 -3
- package/dist/cz/ico.js +2 -10
- package/dist/cz/ico.js.map +1 -1
- package/dist/cz/mod.d.ts +3 -2
- package/dist/cz/rc.d.ts +2 -3
- package/dist/cz/rc.js +22 -21
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.d.ts +19 -2
- package/dist/de/handelsreg.js +10 -26
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +2 -3
- package/dist/de/idnr.js +2 -12
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/mod.d.ts +3 -2
- package/dist/de/stnr.d.ts +17 -3
- package/dist/de/stnr.js +1 -15
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +2 -3
- package/dist/de/svnr.js +4 -13
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +2 -3
- package/dist/de/vat.js +2 -11
- package/dist/de/vat.js.map +1 -1
- package/dist/dk/cpr.d.ts +5 -4
- package/dist/dk/cpr.js +14 -12
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +2 -3
- package/dist/dk/cvr.js +2 -15
- package/dist/dk/cvr.js.map +1 -1
- package/dist/dk/mod.d.ts +3 -2
- package/dist/dk/vat.d.ts +2 -3
- package/dist/dk/vat.js +3 -13
- package/dist/dk/vat.js.map +1 -1
- package/dist/do/mod.d.ts +3 -2
- package/dist/do/rnc.d.ts +2 -3
- package/dist/do/rnc.js +3 -17
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/mod.d.ts +3 -2
- package/dist/ec/ruc.d.ts +2 -3
- package/dist/ec/ruc.js +2 -19
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +2 -3
- package/dist/ee/ik.js +6 -15
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/mod.d.ts +3 -2
- package/dist/ee/registrikood.d.ts +2 -3
- package/dist/ee/registrikood.js +9 -15
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +2 -3
- package/dist/ee/vat.js +2 -10
- package/dist/ee/vat.js.map +1 -1
- package/dist/eg/mod.d.ts +3 -2
- package/dist/eg/tn.d.ts +11 -2
- package/dist/eg/tn.js +1 -9
- package/dist/eg/tn.js.map +1 -1
- package/dist/es/cif.d.ts +2 -3
- package/dist/es/cif.js +3 -12
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +2 -3
- package/dist/es/dni.js +1 -9
- package/dist/es/dni.js.map +1 -1
- package/dist/es/mod.d.ts +3 -2
- package/dist/es/nie.d.ts +2 -3
- package/dist/es/nie.js +14 -22
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +2 -3
- package/dist/es/nss.js +1 -16
- package/dist/es/nss.js.map +1 -1
- package/dist/es/vat.d.ts +2 -3
- package/dist/es/vat.js +5 -10
- package/dist/es/vat.js.map +1 -1
- package/dist/eu/mod.d.ts +3 -2
- package/dist/eu/vat.d.ts +5 -4
- package/dist/eu/vat.js +44 -2
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +5 -4
- package/dist/fi/hetu.js +19 -12
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/mod.d.ts +3 -2
- package/dist/fi/vat.d.ts +2 -3
- package/dist/fi/vat.js +3 -10
- package/dist/fi/vat.js.map +1 -1
- package/dist/fi/ytunnus.d.ts +2 -3
- package/dist/fi/ytunnus.js +2 -10
- package/dist/fi/ytunnus.js.map +1 -1
- package/dist/fr/mod.d.ts +3 -2
- package/dist/fr/nif.d.ts +2 -3
- package/dist/fr/nif.js +1 -9
- package/dist/fr/nif.js.map +1 -1
- package/dist/fr/nir.d.ts +2 -3
- package/dist/fr/nir.js +3 -14
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +2 -3
- package/dist/fr/siren.js +2 -10
- package/dist/fr/siren.js.map +1 -1
- package/dist/fr/siret.d.ts +2 -3
- package/dist/fr/siret.js +2 -11
- package/dist/fr/siret.js.map +1 -1
- package/dist/fr/tva.d.ts +2 -3
- package/dist/fr/tva.js +2 -12
- package/dist/fr/tva.js.map +1 -1
- package/dist/gb/mod.d.ts +3 -2
- package/dist/gb/nino.d.ts +12 -2
- package/dist/gb/nino.js +8 -17
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +2 -3
- package/dist/gb/sedol.js +9 -18
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +2 -3
- package/dist/gb/utr.js +2 -10
- package/dist/gb/utr.js.map +1 -1
- package/dist/gb/vat.d.ts +2 -3
- package/dist/gb/vat.js +2 -11
- package/dist/gb/vat.js.map +1 -1
- package/dist/ge/mod.d.ts +3 -2
- package/dist/ge/pin.d.ts +14 -2
- package/dist/ge/pin.js +1 -12
- package/dist/ge/pin.js.map +1 -1
- package/dist/gh/mod.d.ts +3 -2
- package/dist/gh/tin.d.ts +2 -3
- package/dist/gh/tin.js +10 -24
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +2 -3
- package/dist/gr/amka.js +3 -11
- package/dist/gr/amka.js.map +1 -1
- package/dist/gr/mod.d.ts +3 -2
- package/dist/gr/vat.d.ts +2 -3
- package/dist/gr/vat.js +1 -10
- package/dist/gr/vat.js.map +1 -1
- package/dist/gt/mod.d.ts +3 -2
- package/dist/gt/nit.d.ts +2 -3
- package/dist/gt/nit.js +6 -14
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +2 -3
- package/dist/hk/hkid.js +2 -10
- package/dist/hk/hkid.js.map +1 -1
- package/dist/hk/mod.d.ts +3 -2
- package/dist/hr/mod.d.ts +3 -2
- package/dist/hr/vat.d.ts +2 -3
- package/dist/hr/vat.js +2 -9
- package/dist/hr/vat.js.map +1 -1
- package/dist/hu/mod.d.ts +3 -2
- package/dist/hu/vat.d.ts +2 -3
- package/dist/hu/vat.js +3 -10
- package/dist/hu/vat.js.map +1 -1
- package/dist/iban.d.ts +2 -3
- package/dist/iban.js +2 -8
- package/dist/iban.js.map +1 -1
- package/dist/id/mod.d.ts +3 -2
- package/dist/id/npwp.d.ts +2 -3
- package/dist/id/npwp.js +3 -13
- package/dist/id/npwp.js.map +1 -1
- package/dist/ie/mod.d.ts +3 -2
- package/dist/ie/pps.d.ts +2 -3
- package/dist/ie/pps.js +1 -10
- package/dist/ie/pps.js.map +1 -1
- package/dist/ie/vat.d.ts +2 -3
- package/dist/ie/vat.js +1 -9
- package/dist/ie/vat.js.map +1 -1
- package/dist/il/idnr.d.ts +2 -3
- package/dist/il/idnr.js +2 -9
- package/dist/il/idnr.js.map +1 -1
- package/dist/il/mod.d.ts +3 -2
- package/dist/in/aadhaar.d.ts +2 -3
- package/dist/in/aadhaar.js +2 -12
- package/dist/in/aadhaar.js.map +1 -1
- package/dist/in/gstin.d.ts +2 -3
- package/dist/in/gstin.js +4 -11
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/mod.d.ts +3 -2
- package/dist/in/pan.d.ts +15 -2
- package/dist/in/pan.js +3 -15
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/iq/mod.d.ts +3 -2
- package/dist/iq/nid.d.ts +16 -2
- package/dist/iq/nid.js +2 -15
- package/dist/iq/nid.js.map +1 -1
- package/dist/ir/mod.d.ts +3 -2
- package/dist/ir/nid.d.ts +2 -3
- package/dist/ir/nid.js +2 -24
- package/dist/ir/nid.js.map +1 -1
- package/dist/is/kennitala.d.ts +2 -3
- package/dist/is/kennitala.js +2 -13
- package/dist/is/kennitala.js.map +1 -1
- package/dist/is/mod.d.ts +3 -2
- package/dist/is/vsk.d.ts +9 -2
- package/dist/is/vsk.js +1 -7
- package/dist/is/vsk.js.map +1 -1
- package/dist/isin.d.ts +2 -3
- package/dist/isin.js +11 -21
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +5 -4
- package/dist/it/codicefiscale.js +27 -23
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +2 -3
- package/dist/it/iva.js +2 -9
- package/dist/it/iva.js.map +1 -1
- package/dist/it/mod.d.ts +3 -2
- package/dist/jp/cn.d.ts +2 -3
- package/dist/jp/cn.js +1 -9
- package/dist/jp/cn.js.map +1 -1
- package/dist/jp/mod.d.ts +3 -2
- package/dist/jp/mynumber.d.ts +2 -3
- package/dist/jp/mynumber.js +1 -10
- package/dist/jp/mynumber.js.map +1 -1
- package/dist/kr/brn.d.ts +11 -2
- package/dist/kr/brn.js +1 -9
- package/dist/kr/brn.js.map +1 -1
- package/dist/kr/mod.d.ts +3 -2
- package/dist/kr/rrn.d.ts +5 -4
- package/dist/kr/rrn.js +15 -13
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +6 -5
- package/dist/kw/civil.js +20 -17
- package/dist/kw/civil.js.map +1 -1
- package/dist/kw/mod.d.ts +3 -2
- package/dist/kz/iin.d.ts +2 -3
- package/dist/kz/iin.js +4 -18
- package/dist/kz/iin.js.map +1 -1
- package/dist/kz/mod.d.ts +3 -2
- package/dist/lei.d.ts +2 -3
- package/dist/lei.js +2 -11
- package/dist/lei.js.map +1 -1
- package/dist/li/mod.d.ts +3 -2
- package/dist/li/peid.d.ts +11 -2
- package/dist/li/peid.js +1 -9
- package/dist/li/peid.js.map +1 -1
- package/dist/lk/mod.d.ts +3 -2
- package/dist/lk/nic.d.ts +5 -4
- package/dist/lk/nic.js +16 -16
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +2 -3
- package/dist/lt/asmens.js +2 -1
- package/dist/lt/asmens.js.map +1 -1
- package/dist/lt/mod.d.ts +3 -2
- package/dist/lt/vat.d.ts +2 -3
- package/dist/lt/vat.js +2 -10
- package/dist/lt/vat.js.map +1 -1
- package/dist/lu/mod.d.ts +3 -2
- package/dist/lu/vat.d.ts +2 -3
- package/dist/lu/vat.js +2 -8
- package/dist/lu/vat.js.map +1 -1
- package/dist/luhn.d.ts +2 -3
- package/dist/luhn.js +9 -9
- package/dist/luhn.js.map +1 -1
- package/dist/lv/mod.d.ts +3 -2
- package/dist/lv/vat.d.ts +2 -3
- package/dist/lv/vat.js +19 -18
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +2 -3
- package/dist/ma/ice.js +2 -11
- package/dist/ma/ice.js.map +1 -1
- package/dist/ma/mod.d.ts +3 -2
- package/dist/mc/mod.d.ts +3 -2
- package/dist/mc/tva.d.ts +2 -3
- package/dist/mc/tva.js +1 -0
- package/dist/mc/tva.js.map +1 -1
- package/dist/md/idno.d.ts +2 -3
- package/dist/md/idno.js +1 -10
- package/dist/md/idno.js.map +1 -1
- package/dist/md/mod.d.ts +3 -2
- package/dist/me/mod.d.ts +3 -2
- package/dist/me/pib.d.ts +2 -3
- package/dist/me/pib.js +2 -10
- package/dist/me/pib.js.map +1 -1
- package/dist/mk/edb.d.ts +2 -3
- package/dist/mk/edb.js +2 -11
- package/dist/mk/edb.js.map +1 -1
- package/dist/mk/mod.d.ts +3 -2
- package/dist/mt/mod.d.ts +3 -2
- package/dist/mt/vat.d.ts +2 -3
- package/dist/mt/vat.js +3 -10
- package/dist/mt/vat.js.map +1 -1
- package/dist/mu/brn.d.ts +23 -2
- package/dist/mu/brn.js +1 -21
- package/dist/mu/brn.js.map +1 -1
- package/dist/mu/mod.d.ts +3 -2
- package/dist/mx/clabe.d.ts +2 -3
- package/dist/mx/clabe.js +1 -14
- package/dist/mx/clabe.js.map +1 -1
- package/dist/mx/curp.d.ts +5 -4
- package/dist/mx/curp.js +27 -19
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/mod.d.ts +3 -2
- package/dist/mx/rfc.d.ts +5 -4
- package/dist/mx/rfc.js +23 -20
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/mod.d.ts +3 -2
- package/dist/my/nric.d.ts +5 -4
- package/dist/my/nric.js +18 -16
- package/dist/my/nric.js.map +1 -1
- package/dist/ng/mod.d.ts +3 -2
- package/dist/ng/nin.d.ts +13 -2
- package/dist/ng/nin.js +1 -11
- package/dist/ng/nin.js.map +1 -1
- package/dist/ni/mod.d.ts +3 -2
- package/dist/ni/ruc.d.ts +2 -3
- package/dist/ni/ruc.js +1 -23
- package/dist/ni/ruc.js.map +1 -1
- package/dist/nl/bsn.d.ts +2 -3
- package/dist/nl/bsn.js +2 -10
- package/dist/nl/bsn.js.map +1 -1
- package/dist/nl/kvk.d.ts +9 -2
- package/dist/nl/kvk.js +1 -7
- package/dist/nl/kvk.js.map +1 -1
- package/dist/nl/mod.d.ts +3 -2
- package/dist/nl/vat.d.ts +2 -3
- package/dist/nl/vat.js +4 -50
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +2 -3
- package/dist/no/fodselsnummer.js +3 -10
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mod.d.ts +3 -2
- package/dist/no/mva.d.ts +2 -3
- package/dist/no/mva.js +1 -8
- package/dist/no/mva.js.map +1 -1
- package/dist/no/orgnr.d.ts +2 -3
- package/dist/no/orgnr.js +2 -8
- package/dist/no/orgnr.js.map +1 -1
- package/dist/nz/ird.d.ts +2 -3
- package/dist/nz/ird.js +4 -13
- package/dist/nz/ird.js.map +1 -1
- package/dist/nz/mod.d.ts +3 -2
- package/dist/pa/mod.d.ts +3 -2
- package/dist/pa/ruc.d.ts +2 -3
- package/dist/pa/ruc.js +4 -19
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +8 -10
- package/dist/patterns.js +83 -28
- package/dist/patterns.js.map +1 -1
- package/dist/pe/mod.d.ts +3 -2
- package/dist/pe/ruc.d.ts +2 -3
- package/dist/pe/ruc.js +10 -24
- package/dist/pe/ruc.js.map +1 -1
- package/dist/ph/mod.d.ts +3 -2
- package/dist/ph/philid.d.ts +14 -2
- package/dist/ph/philid.js +1 -12
- package/dist/ph/philid.js.map +1 -1
- package/dist/pk/cnic.d.ts +14 -2
- package/dist/pk/cnic.js +1 -12
- package/dist/pk/cnic.js.map +1 -1
- package/dist/pk/mod.d.ts +3 -2
- package/dist/pl/mod.d.ts +3 -2
- package/dist/pl/nip.d.ts +2 -3
- package/dist/pl/nip.js +2 -10
- package/dist/pl/nip.js.map +1 -1
- package/dist/pl/pesel.d.ts +2 -3
- package/dist/pl/pesel.js +4 -13
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +2 -3
- package/dist/pl/regon.js +2 -11
- package/dist/pl/regon.js.map +1 -1
- package/dist/pt/cc.d.ts +2 -3
- package/dist/pt/cc.js +7 -13
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/mod.d.ts +3 -2
- package/dist/pt/vat.d.ts +2 -3
- package/dist/pt/vat.js +3 -11
- package/dist/pt/vat.js.map +1 -1
- package/dist/ro/cnp.d.ts +2 -3
- package/dist/ro/cnp.js +5 -14
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/mod.d.ts +3 -2
- package/dist/ro/vat.d.ts +2 -3
- package/dist/ro/vat.js +13 -11
- package/dist/ro/vat.js.map +1 -1
- package/dist/rs/mod.d.ts +3 -2
- package/dist/rs/pib.d.ts +2 -3
- package/dist/rs/pib.js +1 -9
- package/dist/rs/pib.js.map +1 -1
- package/dist/ru/inn.d.ts +2 -3
- package/dist/ru/inn.js +2 -12
- package/dist/ru/inn.js.map +1 -1
- package/dist/ru/mod.d.ts +3 -2
- package/dist/se/mod.d.ts +3 -2
- package/dist/se/orgnr.d.ts +2 -3
- package/dist/se/orgnr.js +2 -9
- package/dist/se/orgnr.js.map +1 -1
- package/dist/se/personnummer.d.ts +2 -3
- package/dist/se/personnummer.js +8 -15
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +2 -3
- package/dist/se/vat.js +3 -10
- package/dist/se/vat.js.map +1 -1
- package/dist/sg/mod.d.ts +3 -2
- package/dist/sg/uen.d.ts +2 -3
- package/dist/sg/uen.js +47 -70
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +2 -3
- package/dist/si/emso.js +12 -14
- package/dist/si/emso.js.map +1 -1
- package/dist/si/mod.d.ts +3 -2
- package/dist/si/vat.d.ts +2 -3
- package/dist/si/vat.js +3 -12
- package/dist/si/vat.js.map +1 -1
- package/dist/sk/dic.d.ts +2 -3
- package/dist/sk/dic.js +1 -0
- package/dist/sk/dic.js.map +1 -1
- package/dist/sk/ico.d.ts +2 -3
- package/dist/sk/ico.js +1 -0
- package/dist/sk/ico.js.map +1 -1
- package/dist/sk/mod.d.ts +3 -2
- package/dist/sk/rc.d.ts +4 -5
- package/dist/sk/rc.js +6 -2
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/mod.d.ts +3 -2
- package/dist/th/tin.d.ts +2 -3
- package/dist/th/tin.js +1 -11
- package/dist/th/tin.js.map +1 -1
- package/dist/tr/mod.d.ts +3 -2
- package/dist/tr/tckimlik.d.ts +2 -3
- package/dist/tr/tckimlik.js +1 -20
- package/dist/tr/tckimlik.js.map +1 -1
- package/dist/tr/vkn.d.ts +2 -3
- package/dist/tr/vkn.js +1 -20
- package/dist/tr/vkn.js.map +1 -1
- package/dist/tw/mod.d.ts +3 -2
- package/dist/tw/ubn.d.ts +2 -3
- package/dist/tw/ubn.js +2 -12
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +56 -21
- package/dist/ua/edrpou.d.ts +2 -3
- package/dist/ua/edrpou.js +5 -12
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/ua/mod.d.ts +3 -2
- package/dist/us/ein.d.ts +12 -2
- package/dist/us/ein.js +88 -97
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.d.ts +13 -2
- package/dist/us/itin.js +4 -15
- package/dist/us/itin.js.map +1 -1
- package/dist/us/mod.d.ts +3 -2
- package/dist/us/rtn.d.ts +2 -3
- package/dist/us/rtn.js +11 -23
- package/dist/us/rtn.js.map +1 -1
- package/dist/us/ssn.d.ts +13 -2
- package/dist/us/ssn.js +1 -11
- package/dist/us/ssn.js.map +1 -1
- package/dist/uy/mod.d.ts +3 -2
- package/dist/uy/rut.d.ts +2 -3
- package/dist/uy/rut.js +2 -15
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/mod.d.ts +3 -2
- package/dist/ve/rif.d.ts +2 -3
- package/dist/ve/rif.js +13 -26
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mod.d.ts +3 -2
- package/dist/vn/mst.d.ts +2 -3
- package/dist/vn/mst.js +1 -12
- package/dist/vn/mst.js.map +1 -1
- package/dist/za/idnr.d.ts +2 -3
- package/dist/za/idnr.js +4 -16
- package/dist/za/idnr.js.map +1 -1
- package/dist/za/mod.d.ts +3 -2
- package/package.json +34 -21
- package/src/_checksums/mod1110.ts +1 -1
- package/src/_checksums/mod112.ts +7 -6
- package/src/_util/generate.ts +38 -0
- package/src/ad/nrt.ts +19 -7
- package/src/ae/eid.ts +7 -3
- package/src/ai/tin.ts +7 -3
- package/src/al/nipt.ts +7 -3
- package/src/am/tin.ts +7 -3
- package/src/ar/cbu.ts +9 -5
- package/src/ar/cuit.ts +22 -10
- package/src/ar/dni.ts +7 -3
- package/src/at/businessid.ts +7 -3
- package/src/at/tin.ts +7 -3
- package/src/at/uid.ts +7 -3
- package/src/at/vnr.ts +62 -12
- package/src/au/abn.ts +7 -3
- package/src/au/acn.ts +7 -3
- package/src/au/tfn.ts +7 -3
- package/src/az/voen.ts +9 -3
- package/src/ba/jmbg.ts +9 -7
- package/src/bd/nid.ts +11 -7
- package/src/be/bis.ts +8 -4
- package/src/be/nn.ts +7 -3
- package/src/be/vat.ts +7 -3
- package/src/bg/egn.ts +19 -10
- package/src/bg/pnf.ts +7 -3
- package/src/bg/vat.ts +8 -3
- package/src/bh/cpr.ts +17 -4
- package/src/bic.ts +26 -20
- package/src/br/cnpj.ts +7 -3
- package/src/br/cpf.ts +7 -3
- package/src/by/unp.ts +19 -9
- package/src/bz/tin.ts +19 -4
- package/src/ca/bn.ts +7 -3
- package/src/ca/sin.ts +7 -3
- package/src/ch/ssn.ts +7 -3
- package/src/ch/uid.ts +7 -3
- package/src/ch/vat.ts +9 -5
- package/src/cl/rut.ts +11 -5
- package/src/cn/ric.ts +11 -7
- package/src/cn/uscc.ts +27 -11
- package/src/co/nit.ts +14 -6
- package/src/cr/cpf.ts +11 -6
- package/src/creditcard.ts +10 -6
- package/src/cu/ni.ts +28 -7
- package/src/cy/vat.ts +7 -3
- package/src/cz/dic.ts +9 -4
- package/src/cz/ico.ts +7 -3
- package/src/cz/rc.ts +61 -29
- package/src/de/handelsreg.ts +21 -6
- package/src/de/idnr.ts +10 -3
- package/src/de/stnr.ts +11 -3
- package/src/de/svnr.ts +14 -5
- package/src/de/vat.ts +7 -3
- package/src/dk/cpr.ts +23 -8
- package/src/dk/cvr.ts +7 -3
- package/src/dk/vat.ts +8 -3
- package/src/do/rnc.ts +9 -5
- package/src/ec/ruc.ts +9 -5
- package/src/ee/ik.ts +21 -10
- package/src/ee/registrikood.ts +12 -7
- package/src/ee/vat.ts +7 -3
- package/src/eg/tn.ts +7 -3
- package/src/es/cif.ts +10 -7
- package/src/es/dni.ts +7 -3
- package/src/es/nie.ts +18 -9
- package/src/es/nss.ts +7 -3
- package/src/es/vat.ts +13 -5
- package/src/eu/vat.ts +55 -6
- package/src/fi/hetu.ts +26 -8
- package/src/fi/vat.ts +8 -3
- package/src/fi/ytunnus.ts +7 -3
- package/src/fr/nif.ts +7 -3
- package/src/fr/nir.ts +9 -7
- package/src/fr/siren.ts +7 -3
- package/src/fr/siret.ts +7 -3
- package/src/fr/tva.ts +7 -3
- package/src/gb/nino.ts +18 -13
- package/src/gb/sedol.ts +21 -15
- package/src/gb/utr.ts +7 -3
- package/src/gb/vat.ts +7 -3
- package/src/ge/pin.ts +7 -3
- package/src/gh/tin.ts +11 -6
- package/src/gr/amka.ts +7 -3
- package/src/gr/vat.ts +7 -3
- package/src/gt/nit.ts +13 -6
- package/src/hk/hkid.ts +9 -4
- package/src/hr/vat.ts +7 -3
- package/src/hu/vat.ts +8 -3
- package/src/iban.ts +7 -3
- package/src/id/npwp.ts +7 -3
- package/src/ie/pps.ts +7 -3
- package/src/ie/vat.ts +7 -3
- package/src/il/idnr.ts +7 -3
- package/src/in/aadhaar.ts +7 -3
- package/src/in/gstin.ts +10 -4
- package/src/in/pan.ts +15 -6
- package/src/index.ts +6 -0
- package/src/iq/nid.ts +7 -3
- package/src/ir/nid.ts +7 -3
- package/src/is/kennitala.ts +7 -3
- package/src/is/vsk.ts +7 -3
- package/src/isin.ts +17 -7
- package/src/it/codicefiscale.ts +49 -7
- package/src/it/iva.ts +7 -3
- package/src/jp/cn.ts +7 -3
- package/src/jp/mynumber.ts +7 -3
- package/src/kr/brn.ts +7 -3
- package/src/kr/rrn.ts +27 -8
- package/src/kw/civil.ts +31 -14
- package/src/kz/iin.ts +9 -8
- package/src/lei.ts +7 -3
- package/src/li/peid.ts +7 -3
- package/src/lk/nic.ts +31 -8
- package/src/lt/asmens.ts +8 -4
- package/src/lt/vat.ts +8 -3
- package/src/lu/vat.ts +8 -3
- package/src/luhn.ts +10 -3
- package/src/lv/vat.ts +53 -23
- package/src/ma/ice.ts +7 -3
- package/src/mc/tva.ts +9 -5
- package/src/md/idno.ts +7 -3
- package/src/me/pib.ts +7 -3
- package/src/mk/edb.ts +7 -3
- package/src/mt/vat.ts +8 -3
- package/src/mu/brn.ts +7 -3
- package/src/mx/clabe.ts +7 -3
- package/src/mx/curp.ts +47 -10
- package/src/mx/rfc.ts +42 -7
- package/src/my/nric.ts +33 -8
- package/src/ng/nin.ts +7 -3
- package/src/ni/ruc.ts +7 -3
- package/src/nl/bsn.ts +7 -3
- package/src/nl/kvk.ts +7 -3
- package/src/nl/vat.ts +18 -69
- package/src/no/fodselsnummer.ts +12 -7
- package/src/no/mva.ts +9 -5
- package/src/no/orgnr.ts +7 -3
- package/src/nz/ird.ts +12 -8
- package/src/pa/ruc.ts +39 -11
- package/src/patterns.ts +184 -46
- package/src/pe/ruc.ts +13 -10
- package/src/ph/philid.ts +7 -3
- package/src/pk/cnic.ts +9 -3
- package/src/pl/nip.ts +7 -3
- package/src/pl/pesel.ts +9 -7
- package/src/pl/regon.ts +7 -3
- package/src/pt/cc.ts +13 -7
- package/src/pt/vat.ts +8 -3
- package/src/ro/cnp.ts +16 -8
- package/src/ro/vat.ts +8 -3
- package/src/rs/pib.ts +7 -3
- package/src/ru/inn.ts +9 -5
- package/src/se/orgnr.ts +7 -3
- package/src/se/personnummer.ts +35 -32
- package/src/se/vat.ts +8 -3
- package/src/sg/uen.ts +44 -23
- package/src/si/emso.ts +37 -11
- package/src/si/vat.ts +8 -3
- package/src/sk/dic.ts +8 -4
- package/src/sk/ico.ts +3 -2
- package/src/sk/rc.ts +17 -4
- package/src/th/tin.ts +7 -3
- package/src/tr/tckimlik.ts +7 -3
- package/src/tr/vkn.ts +7 -3
- package/src/tw/ubn.ts +9 -5
- package/src/types.ts +69 -7
- package/src/ua/edrpou.ts +10 -5
- package/src/us/ein.ts +95 -91
- package/src/us/itin.ts +14 -11
- package/src/us/rtn.ts +32 -19
- package/src/us/ssn.ts +7 -3
- package/src/uy/rut.ts +9 -5
- package/src/ve/rif.ts +19 -12
- package/src/vn/mst.ts +7 -3
- package/src/za/idnr.ts +9 -7
package/dist/pe/ruc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruc.js","names":[],"sources":["../../src/pe/ruc.ts"],"sourcesContent":["/**\n * RUC (Registro Único de Contribuyentes).\n *\n * Peruvian tax identification number assigned by SUNAT\n * (Superintendencia Nacional de Aduanas y de\n * Administración Tributaria). The number consists of\n * 11 digits: a type prefix (10 = person, 20 = company,\n * among others), 8 identification digits, and a check\n * digit computed using a weighted modulo 11 algorithm.\n *\n * Format: XXXXXXXXXXX (11 digits, no separators).\n *\n * @see https://www.sunat.gob.pe/\n * @see https://en.wikipedia.org/wiki/Tax_identification_number#Peru\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"ruc.js","names":[],"sources":["../../src/pe/ruc.ts"],"sourcesContent":["/**\n * RUC (Registro Único de Contribuyentes).\n *\n * Peruvian tax identification number assigned by SUNAT\n * (Superintendencia Nacional de Aduanas y de\n * Administración Tributaria). The number consists of\n * 11 digits: a type prefix (10 = person, 20 = company,\n * among others), 8 identification digits, and a check\n * digit computed using a weighted modulo 11 algorithm.\n *\n * Format: XXXXXXXXXXX (11 digits, no separators).\n *\n * @see https://www.sunat.gob.pe/\n * @see https://en.wikipedia.org/wiki/Tax_identification_number#Peru\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\n/**\n * Valid type prefixes for RUC numbers.\n * 10 = natural person, 15 = non-domiciled without RUC,\n * 17 = non-domiciled, 20 = legal entity,\n * others for specific entity types.\n */\nconst VALID_PREFIXES = new Set([\"10\", \"15\", \"17\", \"20\"]);\n\nconst WEIGHTS = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2] as const;\nconst GENERATE_PREFIXES = [\"10\", \"15\", \"17\", \"20\"] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").trim();\n\n/**\n * Compute the RUC check digit using weighted sum\n * mod 11. Weights: [5, 4, 3, 2, 7, 6, 5, 4, 3, 2].\n *\n * check = 11 - (sum % 11); if >= 10, subtract 10.\n */\nconst calcCheckDigit = (body: string): number => {\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(body[i]) * weight;\n }\n const remainder = 11 - (sum % 11);\n if (remainder >= 10) return remainder - 10;\n return remainder;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 11) {\n return err(\"INVALID_LENGTH\", \"RUC must be 11 digits\");\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"RUC must contain only digits\",\n );\n }\n\n const prefix = v.slice(0, 2);\n if (!VALID_PREFIXES.has(prefix)) {\n return err(\n \"INVALID_COMPONENT\",\n \"RUC has an invalid type prefix\",\n );\n }\n\n const expected = calcCheckDigit(v.slice(0, 10));\n if (Number(v[10]) !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"RUC check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Peruvian RUC. */\nconst generate = (): string => {\n const prefix = randomPick(GENERATE_PREFIXES);\n const body = prefix + randomDigits(8);\n return body + String(calcCheckDigit(body));\n};\n\n/**\n * Peruvian RUC (tax identification number).\n *\n * Examples sourced from python-stdnum test suite\n * (pe.ruc module).\n */\nconst ruc: CountryValidator<\"PE\"> = {\n name: \"Peruvian Tax ID\",\n localName: \"Registro Único de Contribuyentes\",\n abbreviation: \"RUC\",\n aliases: [\"RUC\"] as const,\n candidatePattern: \"\\\\d{11}\",\n scope: \"country\",\n country: \"PE\",\n entityType: \"any\",\n compact,\n format,\n validate,\n sourceUrl: \"https://www.sunat.gob.pe/\",\n lengths: [11] as const,\n examples: [\"20131312955\", \"20100047218\"] as const,\n generate,\n};\n\nexport default ruc;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;AAgCA,MAAM,iBAAiB,IAAI,IAAI;CAAC;CAAM;CAAM;CAAM;AAAI,CAAC;AAEvD,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAC7C,MAAM,oBAAoB;CAAC;CAAM;CAAM;CAAM;AAAI;AAEjD,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,EAAE,KAAK;;;;;;;AAQ3B,MAAM,kBAAkB,SAAyB;CAC/C,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GACxC,OAAO,OAAO,KAAK,EAAE,IAAI;CAE3B,MAAM,YAAY,KAAM,MAAM;CAC9B,IAAI,aAAa,IAAI,OAAO,YAAY;CACxC,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,IACf,OAAO,IAAI,kBAAkB,uBAAuB;CAGtD,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAGF,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC;CAC3B,IAAI,CAAC,eAAe,IAAI,MAAM,GAC5B,OAAO,IACL,qBACA,gCACF;CAGF,MAAM,WAAW,eAAe,EAAE,MAAM,GAAG,EAAE,CAAC;CAC9C,IAAI,OAAO,EAAE,GAAG,MAAM,UACpB,OAAO,IACL,oBACA,gCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAE7B,MAAM,OADS,WAAW,iBACR,IAAI,aAAa,CAAC;CACpC,OAAO,OAAO,OAAO,eAAe,IAAI,CAAC;AAC3C;;;;;;;AAQA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,KAAK;CACf,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ;CACA;CACA;CACA,WAAW;CACX,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,eAAe,aAAa;CACvC;AACF"}
|
package/dist/ph/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import philid from "./philid.js";
|
|
3
2
|
|
|
4
3
|
//#region src/ph/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { philid };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, philid };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/ph/philid.d.ts
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ph/philid.d.ts
|
|
4
4
|
/** Generate a random valid PhilID. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* PhilID (Philippine Identification System Number,
|
|
8
|
+
* PhilSys Card Number, PCN).
|
|
9
|
+
*
|
|
10
|
+
* 12-digit personal identifier issued under the
|
|
11
|
+
* Philippine Identification System (PhilSys).
|
|
12
|
+
* Formatted as XXXX-XXXXXXX-X. No check digit
|
|
13
|
+
* algorithm is publicly documented.
|
|
14
|
+
*
|
|
15
|
+
* @see https://en.wikipedia.org/wiki/Philippine_national_identity_card
|
|
16
|
+
* @see https://philsys.gov.ph/
|
|
17
|
+
*/
|
|
6
18
|
declare const compact: (value: string) => string;
|
|
7
19
|
declare const validate: (value: string) => ValidateResult;
|
|
8
20
|
declare const format: (value: string) => string;
|
|
9
21
|
/** Philippine Identification System Number. */
|
|
10
|
-
declare const philid:
|
|
22
|
+
declare const philid: CountryValidator<"PH">;
|
|
11
23
|
//#endregion
|
|
12
24
|
export { compact, philid as default, format, generate, validate };
|
|
13
25
|
//# sourceMappingURL=philid.d.ts.map
|
package/dist/ph/philid.js
CHANGED
|
@@ -3,18 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/ph/philid.ts
|
|
6
|
-
/**
|
|
7
|
-
* PhilID (Philippine Identification System Number,
|
|
8
|
-
* PhilSys Card Number, PCN).
|
|
9
|
-
*
|
|
10
|
-
* 12-digit personal identifier issued under the
|
|
11
|
-
* Philippine Identification System (PhilSys).
|
|
12
|
-
* Formatted as XXXX-XXXXXXX-X. No check digit
|
|
13
|
-
* algorithm is publicly documented.
|
|
14
|
-
*
|
|
15
|
-
* @see https://en.wikipedia.org/wiki/Philippine_national_identity_card
|
|
16
|
-
* @see https://philsys.gov.ph/
|
|
17
|
-
*/
|
|
18
6
|
/** Generate a random valid PhilID. */
|
|
19
7
|
const generate = () => randomDigits(12);
|
|
20
8
|
const compact = (value) => clean(value, " -");
|
|
@@ -43,6 +31,7 @@ const philid = {
|
|
|
43
31
|
"Philippine ID"
|
|
44
32
|
],
|
|
45
33
|
candidatePattern: "\\d{4}-\\d{4}-\\d{4}-\\d{4}",
|
|
34
|
+
scope: "country",
|
|
46
35
|
country: "PH",
|
|
47
36
|
entityType: "person",
|
|
48
37
|
description: "12-digit personal identifier issued under the Philippine Identification System",
|
package/dist/ph/philid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"philid.js","names":[],"sources":["../../src/ph/philid.ts"],"sourcesContent":["/** Generate a random valid PhilID. */\nconst generate = (): string => randomDigits(12);\n\n/**\n * PhilID (Philippine Identification System Number,\n * PhilSys Card Number, PCN).\n *\n * 12-digit personal identifier issued under the\n * Philippine Identification System (PhilSys).\n * Formatted as XXXX-XXXXXXX-X. No check digit\n * algorithm is publicly documented.\n *\n * @see https://en.wikipedia.org/wiki/Philippine_national_identity_card\n * @see https://philsys.gov.ph/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"philid.js","names":[],"sources":["../../src/ph/philid.ts"],"sourcesContent":["/** Generate a random valid PhilID. */\nconst generate = (): string => randomDigits(12);\n\n/**\n * PhilID (Philippine Identification System Number,\n * PhilSys Card Number, PCN).\n *\n * 12-digit personal identifier issued under the\n * Philippine Identification System (PhilSys).\n * Formatted as XXXX-XXXXXXX-X. No check digit\n * algorithm is publicly documented.\n *\n * @see https://en.wikipedia.org/wiki/Philippine_national_identity_card\n * @see https://philsys.gov.ph/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"PhilID must be exactly 12 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"PhilID must contain only digits\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 12) {\n return `${v.slice(0, 4)}-${v.slice(4, 11)}-${v.slice(11)}`;\n }\n return v;\n};\n\n/** Philippine Identification System Number. */\nconst philid: CountryValidator<\"PH\"> = {\n name: \"Philippine Identification System Number\",\n localName: \"PhilSys Card Number\",\n abbreviation: \"PhilID\",\n aliases: [\"PhilID\", \"PhilSys\", \"Philippine ID\"] as const,\n candidatePattern: \"\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\",\n scope: \"country\",\n country: \"PH\",\n entityType: \"person\",\n description:\n \"12-digit personal identifier issued under\" +\n \" the Philippine Identification System\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/\" +\n \"Philippine_national_identity_card\",\n lengths: [12] as const,\n examples: [\"123456789012\", \"000011112222\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default philid;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AACA,MAAM,iBAAyB,aAAa,EAAE;AAyB9C,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,kCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,iCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;CAEzD,OAAO;AACT;;AAGA,MAAM,SAAiC;CACrC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EAAC;EAAU;EAAW;CAAe;CAC9C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CAEF,WACE;CAEF,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,gBAAgB,cAAc;CACzC;CACA;CACA;CACA;AACF"}
|
package/dist/pk/cnic.d.ts
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/pk/cnic.d.ts
|
|
4
4
|
/** Generate a random valid Pakistan CNIC. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* CNIC (Computerized National Identity Card, Pakistan).
|
|
8
|
+
*
|
|
9
|
+
* 13 digits: PPPPP-DDDDDDD-G where P is a province/
|
|
10
|
+
* district code (5 digits), D is a sequential number
|
|
11
|
+
* (7 digits), and G is a gender digit (odd = male,
|
|
12
|
+
* even = female, including 0). No checksum; structural
|
|
13
|
+
* validation.
|
|
14
|
+
*
|
|
15
|
+
* @see https://www.geo.tv/latest/157233-secret-behind-every-digit-of-the-cnic-number
|
|
16
|
+
* @see https://en.wikipedia.org/wiki/CNIC_(Pakistan)
|
|
17
|
+
*/
|
|
6
18
|
declare const compact: (value: string) => string;
|
|
7
19
|
declare const validate: (value: string) => ValidateResult;
|
|
8
20
|
declare const format: (value: string) => string;
|
|
9
21
|
/** Pakistan Computerized National Identity Card. */
|
|
10
|
-
declare const cnic:
|
|
22
|
+
declare const cnic: CountryValidator<"PK">;
|
|
11
23
|
//#endregion
|
|
12
24
|
export { compact, cnic as default, format, generate, validate };
|
|
13
25
|
//# sourceMappingURL=cnic.d.ts.map
|
package/dist/pk/cnic.js
CHANGED
|
@@ -3,18 +3,6 @@ import { randomDigits, randomInt } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/pk/cnic.ts
|
|
6
|
-
/**
|
|
7
|
-
* CNIC (Computerized National Identity Card, Pakistan).
|
|
8
|
-
*
|
|
9
|
-
* 13 digits: PPPPP-DDDDDDD-G where P is a province/
|
|
10
|
-
* district code (5 digits), D is a sequential number
|
|
11
|
-
* (7 digits), and G is a gender digit (odd = male,
|
|
12
|
-
* even = female, including 0). No checksum; structural
|
|
13
|
-
* validation.
|
|
14
|
-
*
|
|
15
|
-
* @see https://www.geo.tv/latest/157233-secret-behind-every-digit-of-the-cnic-number
|
|
16
|
-
* @see https://en.wikipedia.org/wiki/CNIC_(Pakistan)
|
|
17
|
-
*/
|
|
18
6
|
/** Generate a random valid Pakistan CNIC. */
|
|
19
7
|
const generate = () => {
|
|
20
8
|
return `${String(randomInt(1, 7))}${randomDigits(4)}${randomDigits(7)}${String(randomInt(1, 9))}`;
|
|
@@ -52,6 +40,7 @@ const cnic = {
|
|
|
52
40
|
abbreviation: "CNIC",
|
|
53
41
|
aliases: ["CNIC", "شناختی کارڈ"],
|
|
54
42
|
candidatePattern: "\\d{5}-?\\d{7}-?\\d",
|
|
43
|
+
scope: "country",
|
|
55
44
|
country: "PK",
|
|
56
45
|
entityType: "person",
|
|
57
46
|
lengths: [13],
|
package/dist/pk/cnic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cnic.js","names":[],"sources":["../../src/pk/cnic.ts"],"sourcesContent":["/** Generate a random valid Pakistan CNIC. */\nconst generate = (): string => {\n const province = String(randomInt(1, 7));\n const district = randomDigits(4);\n const serial = randomDigits(7);\n const gender = String(randomInt(1, 9));\n return `${province}${district}${serial}${gender}`;\n};\n\n/**\n * CNIC (Computerized National Identity Card, Pakistan).\n *\n * 13 digits: PPPPP-DDDDDDD-G where P is a province/\n * district code (5 digits), D is a sequential number\n * (7 digits), and G is a gender digit (odd = male,\n * even = female, including 0). No checksum; structural\n * validation.\n *\n * @see https://www.geo.tv/latest/157233-secret-behind-every-digit-of-the-cnic-number\n * @see https://en.wikipedia.org/wiki/CNIC_(Pakistan)\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"cnic.js","names":[],"sources":["../../src/pk/cnic.ts"],"sourcesContent":["/** Generate a random valid Pakistan CNIC. */\nconst generate = (): string => {\n const province = String(randomInt(1, 7));\n const district = randomDigits(4);\n const serial = randomDigits(7);\n const gender = String(randomInt(1, 9));\n return `${province}${district}${serial}${gender}`;\n};\n\n/**\n * CNIC (Computerized National Identity Card, Pakistan).\n *\n * 13 digits: PPPPP-DDDDDDD-G where P is a province/\n * district code (5 digits), D is a sequential number\n * (7 digits), and G is a gender digit (odd = male,\n * even = female, including 0). No checksum; structural\n * validation.\n *\n * @see https://www.geo.tv/latest/157233-secret-behind-every-digit-of-the-cnic-number\n * @see https://en.wikipedia.org/wiki/CNIC_(Pakistan)\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\n/** Valid province IDs (first digit). */\nconst VALID_PROVINCES = new Set([\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n]);\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 13) {\n return err(\"INVALID_LENGTH\", \"CNIC must be 13 digits\");\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"CNIC must contain only digits\",\n );\n }\n // First digit must be a valid province code\n // SAFETY: v.length === 13 above guarantees v[0] exists.\n // eslint-disable-next-line no-non-null-assertion\n if (!VALID_PROVINCES.has(v[0]!)) {\n return err(\n \"INVALID_COMPONENT\",\n \"CNIC province code is invalid\",\n );\n }\n // Last digit indicates gender: odd = male,\n // even = female. Digit 0 is rejected per\n // python-stdnum convention; NADRA does not\n // publish whether 0 is a valid gender code.\n // @see https://www.geo.tv/latest/157233\n if (v[12] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"CNIC gender digit must not be 0\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 5)}-${v.slice(5, 12)}-${v.slice(12)}`;\n};\n\n/** Pakistan Computerized National Identity Card. */\nconst cnic: CountryValidator<\"PK\"> = {\n name: \"Computerized National Identity Card\",\n localName: \"Computerized National Identity Card\",\n abbreviation: \"CNIC\",\n aliases: [\"CNIC\", \"شناختی کارڈ\"] as const,\n candidatePattern: \"\\\\d{5}-?\\\\d{7}-?\\\\d\",\n scope: \"country\",\n country: \"PK\",\n entityType: \"person\",\n lengths: [13],\n examples: [\"3520112345671\", \"4210112345672\"],\n description:\n \"13-digit identity card number issued by NADRA\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/CNIC_(Pakistan)\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default cnic;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AACA,MAAM,iBAAyB;CAK7B,OAAO,GAJU,OAAO,UAAU,GAAG,CAAC,CAIrB,IAHA,aAAa,CAGF,IAFb,aAAa,CAES,IADtB,OAAO,UAAU,GAAG,CAAC,CACU;AAChD;AAyBA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;;AAGnB,MAAM,kBAAkB,IAAI,IAAI;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IAAI,kBAAkB,wBAAwB;CAEvD,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,+BACF;CAKF,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAAG,GAC5B,OAAO,IACL,qBACA,+BACF;CAOF,IAAI,EAAE,QAAQ,KACZ,OAAO,IACL,qBACA,iCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;AACzD;;AAGA,MAAM,OAA+B;CACnC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,aAAa;CAC/B,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,iBAAiB,eAAe;CAC3C,aACE;CACF,WACE;CACF;CACA;CACA;CACA;AACF"}
|
package/dist/pk/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import cnic from "./cnic.js";
|
|
3
2
|
|
|
4
3
|
//#region src/pk/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { cnic };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { cnic, mod_d_exports };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/pl/mod.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import nip from "./nip.js";
|
|
3
2
|
import pesel from "./pesel.js";
|
|
4
3
|
import regon from "./regon.js";
|
|
5
4
|
|
|
6
5
|
//#region src/pl/mod.d.ts
|
|
7
|
-
|
|
6
|
+
declare namespace mod_d_exports {
|
|
7
|
+
export { nip, pesel, regon };
|
|
8
|
+
}
|
|
8
9
|
//#endregion
|
|
9
10
|
export { mod_d_exports, nip, pesel, regon };
|
|
10
11
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/pl/nip.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/pl/nip.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
@@ -12,7 +11,7 @@ declare const format: (value: string) => string;
|
|
|
12
11
|
*/
|
|
13
12
|
declare const generate: () => string;
|
|
14
13
|
/** Polish VAT Number. */
|
|
15
|
-
declare const nip:
|
|
14
|
+
declare const nip: CountryValidator<"PL">;
|
|
16
15
|
//#endregion
|
|
17
16
|
export { compact, nip as default, format, generate, validate };
|
|
18
17
|
//# sourceMappingURL=nip.d.ts.map
|
package/dist/pl/nip.js
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
5
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
6
|
//#region src/pl/nip.ts
|
|
7
|
-
/**
|
|
8
|
-
* NIP (Numer Identyfikacji Podatkowej).
|
|
9
|
-
*
|
|
10
|
-
* Polish VAT number. 10 digits with a weighted
|
|
11
|
-
* checksum. The last digit is the check digit.
|
|
12
|
-
*
|
|
13
|
-
* @see https://www.biznes.gov.pl/en/portal/004124
|
|
14
|
-
* @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/poland-tin.pdf
|
|
15
|
-
*/
|
|
16
7
|
const WEIGHTS = [
|
|
17
8
|
6,
|
|
18
9
|
5,
|
|
@@ -62,6 +53,7 @@ const nip = {
|
|
|
62
53
|
abbreviation: "NIP",
|
|
63
54
|
aliases: ["NIP", "numer identyfikacji podatkowej"],
|
|
64
55
|
candidatePattern: "\\d{3}-?\\d{3}-?\\d{2}-?\\d{2}",
|
|
56
|
+
scope: "country",
|
|
65
57
|
country: "PL",
|
|
66
58
|
entityType: "company",
|
|
67
59
|
sourceUrl: "https://www.biznes.gov.pl/en/portal/004124",
|
package/dist/pl/nip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nip.js","names":[],"sources":["../../src/pl/nip.ts"],"sourcesContent":["/**\n * NIP (Numer Identyfikacji Podatkowej).\n *\n * Polish VAT number. 10 digits with a weighted\n * checksum. The last digit is the check digit.\n *\n * @see https://www.biznes.gov.pl/en/portal/004124\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/poland-tin.pdf\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"nip.js","names":[],"sources":["../../src/pl/nip.ts"],"sourcesContent":["/**\n * NIP (Numer Identyfikacji Podatkowej).\n *\n * Polish VAT number. 10 digits with a weighted\n * checksum. The last digit is the check digit.\n *\n * @see https://www.biznes.gov.pl/en/portal/004124\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/poland-tin.pdf\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [6, 5, 7, 2, 3, 4, 5, 6, 7] as const;\n\nconst compact = (value: string): string => {\n const v = clean(value, \" -\");\n if (v.startsWith(\"PL\") || v.startsWith(\"pl\")) {\n return v.slice(2);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"NIP must be exactly 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"NIP must contain only digits\",\n );\n }\n const sum = weightedSum(v.slice(0, 9), WEIGHTS, 11);\n // If remainder is 10, no valid check digit exists\n if (sum >= 10 || sum !== Number(v[9])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"NIP check digit does not match\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `PL${compact(value)}`;\n\nconst MAX_GENERATE_ATTEMPTS = 100;\n\n/**\n * Generate a random valid NIP. Retries if the\n * weighted sum mod 11 yields 10 (no valid check\n * digit for that payload).\n */\nconst generate = (): string => {\n for (let i = 0; i < MAX_GENERATE_ATTEMPTS; i++) {\n const payload = randomDigits(9);\n const sum = weightedSum(payload, WEIGHTS, 11);\n if (sum < 10) {\n return `${payload}${String(sum)}`;\n }\n }\n throw new Error(\"Failed to generate valid NIP\");\n};\n\n/** Polish VAT Number. */\nconst nip: CountryValidator<\"PL\"> = {\n name: \"Polish VAT Number\",\n localName: \"Numer Identyfikacji Podatkowej\",\n abbreviation: \"NIP\",\n aliases: [\n \"NIP\",\n \"numer identyfikacji podatkowej\",\n ] as const,\n candidatePattern: \"\\\\d{3}-?\\\\d{3}-?\\\\d{2}-?\\\\d{2}\",\n scope: \"country\",\n country: \"PL\",\n entityType: \"company\",\n sourceUrl: \"https://www.biznes.gov.pl/en/portal/004124\",\n examples: [\"2234567895\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nip;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;AAqBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAE1C,MAAM,WAAW,UAA0B;CACzC,MAAM,IAAI,MAAM,OAAO,IAAI;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,OAAO,EAAE,MAAM,CAAC;CAElB,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAEF,MAAM,MAAM,YAAY,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,EAAE;CAElD,IAAI,OAAO,MAAM,QAAQ,OAAO,EAAE,EAAE,GAClC,OAAO,IACL,oBACA,gCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;AAEpB,MAAM,wBAAwB;;;;;;AAO9B,MAAM,iBAAyB;CAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,uBAAuB,KAAK;EAC9C,MAAM,UAAU,aAAa,CAAC;EAC9B,MAAM,MAAM,YAAY,SAAS,SAAS,EAAE;EAC5C,IAAI,MAAM,IACR,OAAO,GAAG,UAAU,OAAO,GAAG;CAElC;CACA,MAAM,IAAI,MAAM,8BAA8B;AAChD;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,OACA,gCACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;AACF"}
|
package/dist/pl/pesel.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/pl/pesel.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
@@ -13,7 +12,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
13
12
|
/** Generate a random valid Polish PESEL. */
|
|
14
13
|
declare const generate: () => string;
|
|
15
14
|
/** Polish National Identification Number. */
|
|
16
|
-
declare const pesel:
|
|
15
|
+
declare const pesel: CountryValidator<"PL", ParsedPersonId>;
|
|
17
16
|
//#endregion
|
|
18
17
|
export { compact, pesel as default, format, generate, parse, validate };
|
|
19
18
|
//# sourceMappingURL=pesel.d.ts.map
|
package/dist/pl/pesel.js
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
3
|
+
import { isValidDate } from "../_util/date.js";
|
|
2
4
|
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
3
5
|
import { err } from "../_util/result.js";
|
|
4
6
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
|
-
import { isValidDate } from "../_util/date.js";
|
|
7
7
|
//#region src/pl/pesel.ts
|
|
8
|
-
/**
|
|
9
|
-
* PESEL (Powszechny Elektroniczny System
|
|
10
|
-
* Ewidencji Ludności).
|
|
11
|
-
*
|
|
12
|
-
* Polish national identification number.
|
|
13
|
-
* 11 digits encoding date of birth, serial
|
|
14
|
-
* number, gender, and a check digit.
|
|
15
|
-
*
|
|
16
|
-
* @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/poland-tin.pdf
|
|
17
|
-
* @see https://www.gov.pl/web/cyfryzacja/numer-pesel
|
|
18
|
-
*/
|
|
19
8
|
const WEIGHTS = [
|
|
20
9
|
1,
|
|
21
10
|
3,
|
|
@@ -94,12 +83,14 @@ const pesel = {
|
|
|
94
83
|
abbreviation: "PESEL",
|
|
95
84
|
aliases: ["PESEL"],
|
|
96
85
|
candidatePattern: "\\d{11}",
|
|
86
|
+
scope: "country",
|
|
97
87
|
country: "PL",
|
|
98
88
|
entityType: "person",
|
|
99
89
|
sourceUrl: "https://www.gov.pl/web/cyfryzacja/numer-pesel",
|
|
100
90
|
examples: ["02070803628"],
|
|
101
91
|
compact,
|
|
102
92
|
format,
|
|
93
|
+
parse,
|
|
103
94
|
validate,
|
|
104
95
|
generate
|
|
105
96
|
};
|
package/dist/pl/pesel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pesel.js","names":[],"sources":["../../src/pl/pesel.ts"],"sourcesContent":["/**\n * PESEL (Powszechny Elektroniczny System\n * Ewidencji Ludności).\n *\n * Polish national identification number.\n * 11 digits encoding date of birth, serial\n * number, gender, and a check digit.\n *\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/poland-tin.pdf\n * @see https://www.gov.pl/web/cyfryzacja/numer-pesel\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"pesel.js","names":[],"sources":["../../src/pl/pesel.ts"],"sourcesContent":["/**\n * PESEL (Powszechny Elektroniczny System\n * Ewidencji Ludności).\n *\n * Polish national identification number.\n * 11 digits encoding date of birth, serial\n * number, gender, and a check digit.\n *\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/poland-tin.pdf\n * @see https://www.gov.pl/web/cyfryzacja/numer-pesel\n */\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"PESEL must be exactly 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"PESEL must contain only digits\",\n );\n }\n\n const yy = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const dd = Number(v.slice(4, 6));\n\n // Century encoding via month offset\n let century: number;\n if (mm >= 81 && mm <= 92) {\n century = 1800;\n } else if (mm >= 1 && mm <= 12) {\n century = 1900;\n } else if (mm >= 21 && mm <= 32) {\n century = 2000;\n } else if (mm >= 41 && mm <= 52) {\n century = 2100;\n } else if (mm >= 61 && mm <= 72) {\n century = 2200;\n } else {\n return err(\n \"INVALID_COMPONENT\",\n \"PESEL contains an invalid month\",\n );\n }\n\n const year = century + yy;\n const month = mm % 20;\n if (!isValidDate(year, month, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"PESEL contains an invalid date\",\n );\n }\n\n const sum = weightedSum(v.slice(0, 10), WEIGHTS, 10);\n const check = (10 - sum) % 10;\n if (check !== Number(v[10])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"PESEL check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/**\n * Extract birth date and gender from a PESEL number.\n * Returns null if the value is not valid.\n */\nconst parse = (value: string): ParsedPersonId | null => {\n const result = validate(value);\n if (!result.valid) return null;\n\n const v = result.compact;\n const yy = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const dd = Number(v.slice(4, 6));\n const serial = Number(v[9]);\n\n let century: number;\n if (mm >= 81) century = 1800;\n else if (mm <= 12) century = 1900;\n else if (mm <= 32) century = 2000;\n else if (mm <= 52) century = 2100;\n else century = 2200;\n\n return {\n birthDate: new Date(century + yy, (mm % 20) - 1, dd),\n gender: serial % 2 === 0 ? \"female\" : \"male\",\n };\n};\n\n/** Generate a random valid Polish PESEL. */\nconst generate = (): string => {\n for (;;) {\n const yy = String(randomInt(0, 99)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n const dd = String(randomInt(1, 28)).padStart(2, \"0\");\n const serial = randomDigits(4);\n const payload = yy + mm + dd + serial;\n const sum = weightedSum(payload, WEIGHTS, 10);\n const c = payload + String((10 - sum) % 10);\n if (validate(c).valid) return c;\n }\n};\n\n/** Polish National Identification Number. */\nconst pesel: CountryValidator<\"PL\", ParsedPersonId> = {\n name: \"Polish National ID\",\n localName:\n \"Powszechny Elektroniczny System Ewidencji Ludności\",\n abbreviation: \"PESEL\",\n aliases: [\"PESEL\"] as const,\n candidatePattern: \"\\\\d{11}\",\n scope: \"country\",\n country: \"PL\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.gov.pl/web/cyfryzacja/numer-pesel\",\n examples: [\"02070803628\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default pesel;\nexport { compact, format, parse, validate, generate };\n"],"mappings":";;;;;;;AAyBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAE7C,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,iCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,gCACF;CAGF,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAG/B,IAAI;CACJ,IAAI,MAAM,MAAM,MAAM,IACpB,UAAU;MACL,IAAI,MAAM,KAAK,MAAM,IAC1B,UAAU;MACL,IAAI,MAAM,MAAM,MAAM,IAC3B,UAAU;MACL,IAAI,MAAM,MAAM,MAAM,IAC3B,UAAU;MACL,IAAI,MAAM,MAAM,MAAM,IAC3B,UAAU;MAEV,OAAO,IACL,qBACA,iCACF;CAKF,IAAI,CAAC,YAFQ,UAAU,IACT,KAAK,IACW,EAAE,GAC9B,OAAO,IACL,qBACA,gCACF;CAKF,KADe,KADH,YAAY,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS,EAC3B,KAAK,OACb,OAAO,EAAE,GAAG,GACxB,OAAO,IACL,oBACA,kCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;;;;AAMvD,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,KAAK;CAC7B,IAAI,CAAC,OAAO,OAAO,OAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,SAAS,OAAO,EAAE,EAAE;CAE1B,IAAI;CACJ,IAAI,MAAM,IAAI,UAAU;MACnB,IAAI,MAAM,IAAI,UAAU;MACxB,IAAI,MAAM,IAAI,UAAU;MACxB,IAAI,MAAM,IAAI,UAAU;MACxB,UAAU;CAEf,OAAO;EACL,WAAW,IAAI,KAAK,UAAU,IAAK,KAAK,KAAM,GAAG,EAAE;EACnD,QAAQ,SAAS,MAAM,IAAI,WAAW;CACxC;AACF;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,SAAS,aAAa,CAAC;EAC7B,MAAM,UAAU,KAAK,KAAK,KAAK;EAC/B,MAAM,MAAM,YAAY,SAAS,SAAS,EAAE;EAC5C,MAAM,IAAI,UAAU,QAAQ,KAAK,OAAO,EAAE;EAC1C,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,QAAgD;CACpD,MAAM;CACN,WACE;CACF,cAAc;CACd,SAAS,CAAC,OAAO;CACjB,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;CACA;AACF"}
|
package/dist/pl/regon.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/pl/regon.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid 9-digit Polish REGON. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Polish Statistical Identification Number. */
|
|
11
|
-
declare const regon:
|
|
10
|
+
declare const regon: CountryValidator<"PL">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, regon as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=regon.d.ts.map
|
package/dist/pl/regon.js
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
5
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
6
|
//#region src/pl/regon.ts
|
|
7
|
-
/**
|
|
8
|
-
* REGON (Rejestr Gospodarki Narodowej).
|
|
9
|
-
*
|
|
10
|
-
* Polish statistical identification number for
|
|
11
|
-
* businesses. 9 digits for national entities,
|
|
12
|
-
* 14 digits for local units (9 + 5 extension).
|
|
13
|
-
* Both have weighted checksums.
|
|
14
|
-
*
|
|
15
|
-
* @see https://bip.stat.gov.pl/en/regon/
|
|
16
|
-
*/
|
|
17
7
|
const WEIGHTS_9 = [
|
|
18
8
|
8,
|
|
19
9
|
9,
|
|
@@ -70,6 +60,7 @@ const regon = {
|
|
|
70
60
|
abbreviation: "REGON",
|
|
71
61
|
aliases: ["REGON", "numer statystyczny"],
|
|
72
62
|
candidatePattern: "\\d{9,14}",
|
|
63
|
+
scope: "country",
|
|
73
64
|
country: "PL",
|
|
74
65
|
entityType: "company",
|
|
75
66
|
sourceUrl: "https://bip.stat.gov.pl/en/regon/",
|
package/dist/pl/regon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regon.js","names":[],"sources":["../../src/pl/regon.ts"],"sourcesContent":["/**\n * REGON (Rejestr Gospodarki Narodowej).\n *\n * Polish statistical identification number for\n * businesses. 9 digits for national entities,\n * 14 digits for local units (9 + 5 extension).\n * Both have weighted checksums.\n *\n * @see https://bip.stat.gov.pl/en/regon/\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"regon.js","names":[],"sources":["../../src/pl/regon.ts"],"sourcesContent":["/**\n * REGON (Rejestr Gospodarki Narodowej).\n *\n * Polish statistical identification number for\n * businesses. 9 digits for national entities,\n * 14 digits for local units (9 + 5 extension).\n * Both have weighted checksums.\n *\n * @see https://bip.stat.gov.pl/en/regon/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS_9 = [8, 9, 2, 3, 4, 5, 6, 7] as const;\nconst WEIGHTS_14 = [\n 2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8,\n] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9 && v.length !== 14) {\n return err(\n \"INVALID_LENGTH\",\n \"REGON must be 9 or 14 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"REGON must contain only digits\",\n );\n }\n\n // Validate 9-digit base\n const sum9 = weightedSum(v.slice(0, 8), WEIGHTS_9, 11);\n if (String(sum9 % 10) !== v[8]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"REGON check digit does not match\",\n );\n }\n\n // Validate 14-digit extension\n if (v.length === 14) {\n const sum14 = weightedSum(\n v.slice(0, 13),\n WEIGHTS_14,\n 11,\n );\n if (String(sum14 % 10) !== v[13]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"REGON local unit check digit mismatch\",\n );\n }\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid 9-digit Polish REGON. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Polish Statistical Identification Number. */\nconst regon: CountryValidator<\"PL\"> = {\n name: \"Polish Business Register Number\",\n localName: \"Rejestr Gospodarki Narodowej\",\n abbreviation: \"REGON\",\n aliases: [\"REGON\", \"numer statystyczny\"] as const,\n candidatePattern: \"\\\\d{9,14}\",\n scope: \"country\",\n country: \"PL\",\n entityType: \"company\",\n sourceUrl: \"https://bip.stat.gov.pl/en/regon/\",\n examples: [\"123456785\", \"12345678512347\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default regon;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAsBA,MAAM,YAAY;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AACzC,MAAM,aAAa;CACjB;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AACtC;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,KAAK,EAAE,WAAW,IACjC,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,gCACF;CAIF,MAAM,OAAO,YAAY,EAAE,MAAM,GAAG,CAAC,GAAG,WAAW,EAAE;CACrD,IAAI,OAAO,OAAO,EAAE,MAAM,EAAE,IAC1B,OAAO,IACL,oBACA,kCACF;CAIF,IAAI,EAAE,WAAW,IAAI;EACnB,MAAM,QAAQ,YACZ,EAAE,MAAM,GAAG,EAAE,GACb,YACA,EACF;EACA,IAAI,OAAO,QAAQ,EAAE,MAAM,EAAE,KAC3B,OAAO,IACL,oBACA,uCACF;CAEJ;CAEA,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,CAAC;EACxB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,QAAgC;CACpC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,SAAS,oBAAoB;CACvC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa,gBAAgB;CACxC;CACA;CACA;CACA;AACF"}
|
package/dist/pt/cc.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/pt/cc.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Portuguese CC number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Portuguese Identity Card number. */
|
|
11
|
-
declare const cc:
|
|
10
|
+
declare const cc: CountryValidator<"PT">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, cc as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=cc.d.ts.map
|
package/dist/pt/cc.js
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
-
import {
|
|
2
|
+
import { randomChar, randomDigits } from "../_util/generate.js";
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
//#region src/pt/cc.ts
|
|
5
|
-
/**
|
|
6
|
-
* CC (Cartão de Cidadão, Portuguese Identity number).
|
|
7
|
-
*
|
|
8
|
-
* Alphanumeric: numeric civil ID + 2-letter version +
|
|
9
|
-
* 1 check digit. Validated with a Luhn-like algorithm
|
|
10
|
-
* over an alphanumeric alphabet (0-9, A-Z = 0-35).
|
|
11
|
-
*
|
|
12
|
-
* @see https://pt.wikipedia.org/wiki/Cartão_de_cidadão
|
|
13
|
-
*/
|
|
14
5
|
const CC_RE = /^\d{9}[A-Z0-9]{2}\d$/;
|
|
15
6
|
const ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
16
7
|
const compact = (value) => clean(value, " ").toUpperCase();
|
|
17
8
|
const calcCheckDigit = (value) => {
|
|
18
9
|
let sum = 0;
|
|
19
10
|
for (let i = value.length - 1; i >= 0; i--) {
|
|
11
|
+
const ch = value[i];
|
|
12
|
+
if (ch === void 0) continue;
|
|
20
13
|
const pos = value.length - 1 - i;
|
|
21
|
-
let n = ALPHABET.indexOf(
|
|
14
|
+
let n = ALPHABET.indexOf(ch);
|
|
22
15
|
if (pos % 2 === 0) {
|
|
23
16
|
n *= 2;
|
|
24
17
|
if (n > 9) n = Math.floor(n / 10) + n % 10;
|
|
@@ -44,8 +37,8 @@ const format = (value) => {
|
|
|
44
37
|
/** Generate a random valid Portuguese CC number. */
|
|
45
38
|
const generate = () => {
|
|
46
39
|
const digits = randomDigits(9);
|
|
47
|
-
const v0 = ALPHABET
|
|
48
|
-
const v1 = ALPHABET
|
|
40
|
+
const v0 = randomChar(ALPHABET);
|
|
41
|
+
const v1 = randomChar(ALPHABET);
|
|
49
42
|
const body = digits + v0 + v1;
|
|
50
43
|
return body + calcCheckDigit(body);
|
|
51
44
|
};
|
|
@@ -60,6 +53,7 @@ const cc = {
|
|
|
60
53
|
"número de identificação civil"
|
|
61
54
|
],
|
|
62
55
|
candidatePattern: "\\d{8}\\s?\\d\\s?[A-Z]{2}\\d",
|
|
56
|
+
scope: "country",
|
|
63
57
|
country: "PT",
|
|
64
58
|
entityType: "person",
|
|
65
59
|
description: "Alphanumeric national identity card number with Luhn-like check digit",
|
package/dist/pt/cc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cc.js","names":[],"sources":["../../src/pt/cc.ts"],"sourcesContent":["/**\n * CC (Cartão de Cidadão, Portuguese Identity number).\n *\n * Alphanumeric: numeric civil ID + 2-letter version +\n * 1 check digit. Validated with a Luhn-like algorithm\n * over an alphanumeric alphabet (0-9, A-Z = 0-35).\n *\n * @see https://pt.wikipedia.org/wiki/Cartão_de_cidadão\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"cc.js","names":[],"sources":["../../src/pt/cc.ts"],"sourcesContent":["/**\n * CC (Cartão de Cidadão, Portuguese Identity number).\n *\n * Alphanumeric: numeric civil ID + 2-letter version +\n * 1 check digit. Validated with a Luhn-like algorithm\n * over an alphanumeric alphabet (0-9, A-Z = 0-35).\n *\n * @see https://pt.wikipedia.org/wiki/Cartão_de_cidadão\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomChar, randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nconst CC_RE = /^\\d{9}[A-Z0-9]{2}\\d$/;\n\nconst ALPHABET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\nconst compact = (value: string): string =>\n clean(value, \" \").toUpperCase();\n\nconst calcCheckDigit = (value: string): string => {\n let sum = 0;\n for (let i = value.length - 1; i >= 0; i--) {\n const ch = value[i];\n if (ch === undefined) continue;\n const pos = value.length - 1 - i;\n let n = ALPHABET.indexOf(ch);\n if (pos % 2 === 0) {\n n *= 2;\n if (n > 9) n = Math.floor(n / 10) + (n % 10);\n }\n sum += n;\n }\n return String((10 - (sum % 10)) % 10);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"CC must be 12 characters\",\n );\n }\n\n if (!CC_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"CC must be 9 digits, 2 alphanumeric version characters, and a check digit\",\n );\n }\n\n if (calcCheckDigit(v.slice(0, -1)) !== v.at(-1)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"CC check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, -3)} ${v.slice(-3, -1)} ${v.at(-1)}`;\n};\n\n/** Generate a random valid Portuguese CC number. */\nconst generate = (): string => {\n const digits = randomDigits(9);\n const v0 = randomChar(ALPHABET);\n const v1 = randomChar(ALPHABET);\n const body = digits + v0 + v1;\n const check = calcCheckDigit(body);\n return body + check;\n};\n\n/** Portuguese Identity Card number. */\nconst cc: CountryValidator<\"PT\"> = {\n name: \"Portuguese Identity Card\",\n localName: \"Cartão de Cidadão\",\n abbreviation: \"CC\",\n aliases: [\n \"cartão de cidadão\",\n \"CC\",\n \"número de identificação civil\",\n ] as const,\n candidatePattern: \"\\\\d{8}\\\\s?\\\\d\\\\s?[A-Z]{2}\\\\d\",\n scope: \"country\",\n country: \"PT\",\n entityType: \"person\",\n description:\n \"Alphanumeric national identity card number with Luhn-like check digit\",\n sourceUrl:\n \"https://pt.wikipedia.org/wiki/Cartão_de_cidadão\",\n lengths: [12] as const,\n examples: [\"000000000ZZ8\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default cc;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;AAmBA,MAAM,QAAQ;AAEd,MAAM,WAAW;AAEjB,MAAM,WAAW,UACf,MAAM,OAAO,GAAG,EAAE,YAAY;AAEhC,MAAM,kBAAkB,UAA0B;CAChD,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;EAC1C,MAAM,KAAK,MAAM;EACjB,IAAI,OAAO,KAAA,GAAW;EACtB,MAAM,MAAM,MAAM,SAAS,IAAI;EAC/B,IAAI,IAAI,SAAS,QAAQ,EAAE;EAC3B,IAAI,MAAM,MAAM,GAAG;GACjB,KAAK;GACL,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,IAAI,EAAE,IAAK,IAAI;EAC3C;EACA,OAAO;CACT;CACA,OAAO,QAAQ,KAAM,MAAM,MAAO,EAAE;AACtC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,0BACF;CAGF,IAAI,CAAC,MAAM,KAAK,CAAC,GACf,OAAO,IACL,kBACA,2EACF;CAGF,IAAI,eAAe,EAAE,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAC5C,OAAO,IACL,oBACA,+BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AACxD;;AAGA,MAAM,iBAAyB;CAC7B,MAAM,SAAS,aAAa,CAAC;CAC7B,MAAM,KAAK,WAAW,QAAQ;CAC9B,MAAM,KAAK,WAAW,QAAQ;CAC9B,MAAM,OAAO,SAAS,KAAK;CAE3B,OAAO,OADO,eAAe,IACX;AACpB;;AAGA,MAAM,KAA6B;CACjC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CACF,WACE;CACF,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,cAAc;CACzB;CACA;CACA;CACA;AACF"}
|
package/dist/pt/mod.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import cc from "./cc.js";
|
|
3
2
|
import vat from "./vat.js";
|
|
4
3
|
|
|
5
4
|
//#region src/pt/mod.d.ts
|
|
6
|
-
|
|
5
|
+
declare namespace mod_d_exports {
|
|
6
|
+
export { cc, vat };
|
|
7
|
+
}
|
|
7
8
|
//#endregion
|
|
8
9
|
export { cc, mod_d_exports, vat };
|
|
9
10
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/pt/vat.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/pt/vat.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Portuguese NIF. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Portuguese VAT Number. */
|
|
11
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"PT">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, vat as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=vat.d.ts.map
|