@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/ba/jmbg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jmbg.js","names":[],"sources":["../../src/ba/jmbg.ts"],"sourcesContent":["/**\n * JMBG (Jedinstveni matični broj građana).\n *\n * Bosnian unique master citizen number. 13 digits\n * encoding DDMMYYY (7-digit birth year), region code,\n * serial number, and a check digit.\n *\n * @see https://en.wikipedia.org/wiki/Unique_Master_Citizen_Number\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"jmbg.js","names":[],"sources":["../../src/ba/jmbg.ts"],"sourcesContent":["/**\n * JMBG (Jedinstveni matični broj građana).\n *\n * Bosnian unique master citizen number. 13 digits\n * encoding DDMMYYY (7-digit birth year), region code,\n * serial number, and a check digit.\n *\n * @see https://en.wikipedia.org/wiki/Unique_Master_Citizen_Number\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 { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [\n 7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2,\n] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst resolveYear = (yyy: number): number =>\n yyy < 900 ? yyy + 2000 : yyy + 1000;\n\nconst calcCheckDigit = (v: string): number => {\n const total = weightedSum(v.slice(0, 12), WEIGHTS, 11);\n return ((11 - total) % 11) % 10;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 13) {\n return err(\n \"INVALID_LENGTH\",\n \"JMBG must be exactly 13 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"JMBG must contain only digits\",\n );\n }\n\n const dd = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const yyyy = resolveYear(Number(v.slice(4, 7)));\n if (!isValidDate(yyyy, mm, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"JMBG contains an invalid date\",\n );\n }\n\n if (calcCheckDigit(v) !== Number(v[12])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"JMBG check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\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 dd = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const yyyy = resolveYear(Number(v.slice(4, 7)));\n\n const serial = Number(v.slice(9, 12));\n\n return {\n birthDate: new Date(yyyy, mm - 1, dd),\n gender: serial < 500 ? \"male\" : \"female\",\n };\n};\n\n/** Generate a random valid JMBG. */\nconst generate = (): string => {\n for (;;) {\n const dd = String(randomInt(1, 28)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n const yyy = String(randomInt(900, 999));\n const rr = String(randomInt(10, 99));\n const sss = String(randomInt(0, 999)).padStart(3, \"0\");\n const partial = dd + mm + yyy + rr + sss;\n const check = calcCheckDigit(partial);\n const c = partial + String(check);\n if (validate(c).valid) return c;\n }\n};\n\n/** Bosnian Unique Master Citizen Number. */\nconst jmbg: CountryValidator<\"BA\", ParsedPersonId> = {\n name: \"Bosnian Personal ID\",\n localName: \"Jedinstveni matični broj građana\",\n abbreviation: \"JMBG\",\n aliases: [\"JMBG\", \"matični broj\"] as const,\n candidatePattern: \"\\\\d{13}\",\n scope: \"country\",\n country: \"BA\",\n entityType: \"person\",\n lengths: [13] as const,\n sourceUrl:\n \"https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/\",\n examples: [\"0101006500006\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default jmbg;\nexport { compact, format, parse, validate, generate };\n"],"mappings":";;;;;;;AAuBA,MAAM,UAAU;CACd;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AACnC;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,eAAe,QACnB,MAAM,MAAM,MAAM,MAAO,MAAM;AAEjC,MAAM,kBAAkB,MAAsB;CAE5C,QAAS,KADK,YAAY,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS,EACjC,KAAK,KAAM;AAC/B;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,gCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,+BACF;CAGF,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAE/B,IAAI,CAAC,YADQ,YAAY,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,CACzB,GAAG,IAAI,EAAE,GAC3B,OAAO,IACL,qBACA,+BACF;CAGF,IAAI,eAAe,CAAC,MAAM,OAAO,EAAE,GAAG,GACpC,OAAO,IACL,oBACA,iCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;AAEvD,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,OAAO,YAAY,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;CAE9C,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAEpC,OAAO;EACL,WAAW,IAAI,KAAK,MAAM,KAAK,GAAG,EAAE;EACpC,QAAQ,SAAS,MAAM,SAAS;CAClC;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,MAAM,OAAO,UAAU,KAAK,GAAG,CAAC;EACtC,MAAM,KAAK,OAAO,UAAU,IAAI,EAAE,CAAC;EACnC,MAAM,MAAM,OAAO,UAAU,GAAG,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG;EACrD,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK;EACrC,MAAM,QAAQ,eAAe,OAAO;EACpC,MAAM,IAAI,UAAU,OAAO,KAAK;EAChC,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,OAA+C;CACnD,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,cAAc;CAChC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,EAAE;CACZ,WACE;CACF,UAAU,CAAC,eAAe;CAC1B;CACA;CACA;CACA;CACA;AACF"}
|
package/dist/ba/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import jmbg from "./jmbg.js";
|
|
3
2
|
|
|
4
3
|
//#region src/ba/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { jmbg };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { jmbg, mod_d_exports };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/bd/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import nid from "./nid.js";
|
|
3
2
|
|
|
4
3
|
//#region src/bd/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { nid };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, nid };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/bd/nid.d.ts
CHANGED
|
@@ -1,13 +1,34 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/bd/nid.d.ts
|
|
4
4
|
/** Generate a random valid Bangladesh NID (13-digit). */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* NID (জাতীয় পরিচয়পত্র, Bangladesh National ID).
|
|
8
|
+
*
|
|
9
|
+
* Two formats exist:
|
|
10
|
+
* - 13 digits (old): DD-R-PP-UU-SSSSSS where
|
|
11
|
+
* DD = district, R = residential type (RMO),
|
|
12
|
+
* PP = police station, UU = union/ward code,
|
|
13
|
+
* SSSSSS = serial number.
|
|
14
|
+
* - 17 digits (new): YYYY + 13-digit old format
|
|
15
|
+
* where YYYY is the year of birth.
|
|
16
|
+
* - 10 digits (smart card): a newer format issued
|
|
17
|
+
* on smart NID cards; no public structural spec
|
|
18
|
+
* beyond digit-only validation.
|
|
19
|
+
*
|
|
20
|
+
* No checksum algorithm is used. Validation is
|
|
21
|
+
* structural: length, digit-only, and a valid
|
|
22
|
+
* RMO code (residential type).
|
|
23
|
+
*
|
|
24
|
+
* @see https://en.wikipedia.org/wiki/National_identity_card_(Bangladesh)
|
|
25
|
+
* @see https://www.nidw.gov.bd/
|
|
26
|
+
*/
|
|
6
27
|
declare const compact: (value: string) => string;
|
|
7
28
|
declare const validate: (value: string) => ValidateResult;
|
|
8
29
|
declare const format: (value: string) => string;
|
|
9
30
|
/** Bangladesh National Identity Number. */
|
|
10
|
-
declare const nid:
|
|
31
|
+
declare const nid: CountryValidator<"BD">;
|
|
11
32
|
//#endregion
|
|
12
33
|
export { compact, nid as default, format, generate, validate };
|
|
13
34
|
//# sourceMappingURL=nid.d.ts.map
|
package/dist/bd/nid.js
CHANGED
|
@@ -1,41 +1,19 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
-
import { randomDigits,
|
|
2
|
+
import { randomDigits, randomPick } from "../_util/generate.js";
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/bd/nid.ts
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* - 17 digits (new): YYYY + 13-digit old format
|
|
15
|
-
* where YYYY is the year of birth.
|
|
16
|
-
* - 10 digits (smart card): a newer format issued
|
|
17
|
-
* on smart NID cards; no public structural spec
|
|
18
|
-
* beyond digit-only validation.
|
|
19
|
-
*
|
|
20
|
-
* No checksum algorithm is used. Validation is
|
|
21
|
-
* structural: length, digit-only, and a valid
|
|
22
|
-
* RMO code (residential type).
|
|
23
|
-
*
|
|
24
|
-
* @see https://en.wikipedia.org/wiki/National_identity_card_(Bangladesh)
|
|
25
|
-
* @see https://www.nidw.gov.bd/
|
|
26
|
-
*/
|
|
6
|
+
const RMO_VALUES = [
|
|
7
|
+
"1",
|
|
8
|
+
"2",
|
|
9
|
+
"3",
|
|
10
|
+
"4",
|
|
11
|
+
"5",
|
|
12
|
+
"9"
|
|
13
|
+
];
|
|
27
14
|
/** Generate a random valid Bangladesh NID (13-digit). */
|
|
28
15
|
const generate = () => {
|
|
29
|
-
|
|
30
|
-
const rmoValues = [
|
|
31
|
-
"1",
|
|
32
|
-
"2",
|
|
33
|
-
"3",
|
|
34
|
-
"4",
|
|
35
|
-
"5",
|
|
36
|
-
"9"
|
|
37
|
-
];
|
|
38
|
-
return `${district}${rmoValues[randomInt(0, rmoValues.length - 1)]}${randomDigits(10)}`;
|
|
16
|
+
return `${randomDigits(2)}${randomPick(RMO_VALUES)}${randomDigits(10)}`;
|
|
39
17
|
};
|
|
40
18
|
/**
|
|
41
19
|
* Valid RMO (residential/municipal/other) codes.
|
|
@@ -90,6 +68,7 @@ const nid = {
|
|
|
90
68
|
"National ID Card"
|
|
91
69
|
],
|
|
92
70
|
candidatePattern: "\\d{10,17}",
|
|
71
|
+
scope: "country",
|
|
93
72
|
country: "BD",
|
|
94
73
|
entityType: "person",
|
|
95
74
|
lengths: [
|
package/dist/bd/nid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nid.js","names":[],"sources":["../../src/bd/nid.ts"],"sourcesContent":["/** Generate a random valid Bangladesh NID (13-digit). */\nconst generate = (): string => {\n const district = randomDigits(2);\n const
|
|
1
|
+
{"version":3,"file":"nid.js","names":[],"sources":["../../src/bd/nid.ts"],"sourcesContent":["const RMO_VALUES = [\"1\", \"2\", \"3\", \"4\", \"5\", \"9\"] as const;\n\n/** Generate a random valid Bangladesh NID (13-digit). */\nconst generate = (): string => {\n const district = randomDigits(2);\n const rmo = randomPick(RMO_VALUES);\n const rest = randomDigits(10);\n return `${district}${rmo}${rest}`;\n};\n\n/**\n * NID (জাতীয় পরিচয়পত্র, Bangladesh National ID).\n *\n * Two formats exist:\n * - 13 digits (old): DD-R-PP-UU-SSSSSS where\n * DD = district, R = residential type (RMO),\n * PP = police station, UU = union/ward code,\n * SSSSSS = serial number.\n * - 17 digits (new): YYYY + 13-digit old format\n * where YYYY is the year of birth.\n * - 10 digits (smart card): a newer format issued\n * on smart NID cards; no public structural spec\n * beyond digit-only validation.\n *\n * No checksum algorithm is used. Validation is\n * structural: length, digit-only, and a valid\n * RMO code (residential type).\n *\n * @see https://en.wikipedia.org/wiki/National_identity_card_(Bangladesh)\n * @see https://www.nidw.gov.bd/\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 RMO (residential/municipal/other) codes.\n * 1 = Rural, 2 = Municipality, 3 = City,\n * 4 = Others, 5 = Cantonment, 9 = City Corporation.\n */\nconst VALID_RMO = new Set([\"1\", \"2\", \"3\", \"4\", \"5\", \"9\"]);\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\n/**\n * Validate the 13-digit core (without year prefix).\n * Returns an error result or null on success.\n */\nconst validateCore = (\n core: string,\n): ValidateResult | null => {\n // core[0..1] = district (any 2 digits)\n // core[2] = RMO code\n const rmo = core[2];\n if (rmo === undefined || !VALID_RMO.has(rmo)) {\n return err(\n \"INVALID_COMPONENT\",\n \"NID residential type (RMO) code is invalid\",\n );\n }\n return null;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (\n v.length !== 10 &&\n v.length !== 13 &&\n v.length !== 17\n ) {\n return err(\n \"INVALID_LENGTH\",\n \"NID must be 10, 13, or 17 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"NID must contain only digits\",\n );\n }\n if (v.length === 10) {\n // Smart card format: first digit must not be 0\n if (v[0] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"NID smart card number must not start with 0\",\n );\n }\n return { valid: true, compact: v };\n }\n // 13-digit (old) or 17-digit (new) format\n const core = v.length === 17 ? v.slice(4) : v;\n const coreErr = validateCore(core);\n if (coreErr !== null) {\n return coreErr;\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Bangladesh National Identity Number. */\nconst nid: CountryValidator<\"BD\"> = {\n name: \"National Identity Number\",\n localName: \"জাতীয় পরিচয়পত্র\",\n abbreviation: \"NID\",\n aliases: [\n \"NID\",\n \"জাতীয় পরিচয়পত্র\",\n \"National ID Card\",\n ] as const,\n candidatePattern: \"\\\\d{10,17}\",\n scope: \"country\",\n country: \"BD\",\n entityType: \"person\",\n lengths: [10, 13, 17],\n examples: [\n \"1592824588424\",\n \"19841592824588424\",\n \"2610413965404\",\n \"19892610413965404\",\n ] as const,\n description:\n \"National identity number issued by the \" +\n \"Bangladesh Election Commission\",\n sourceUrl: \"https://www.nidw.gov.bd/\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nid;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAAA,MAAM,aAAa;CAAC;CAAK;CAAK;CAAK;CAAK;CAAK;AAAG;;AAGhD,MAAM,iBAAyB;CAI7B,OAAO,GAHU,aAAa,CAGb,IAFL,WAAW,UAEA,IADV,aAAa,EACI;AAChC;;;;;;AAuCA,MAAM,YAAY,IAAI,IAAI;CAAC;CAAK;CAAK;CAAK;CAAK;CAAK;AAAG,CAAC;AAExD,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;;;;;AAMnB,MAAM,gBACJ,SAC0B;CAG1B,MAAM,MAAM,KAAK;CACjB,IAAI,QAAQ,KAAA,KAAa,CAAC,UAAU,IAAI,GAAG,GACzC,OAAO,IACL,qBACA,4CACF;CAEF,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IACE,EAAE,WAAW,MACb,EAAE,WAAW,MACb,EAAE,WAAW,IAEb,OAAO,IACL,kBACA,kCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,EAAE,WAAW,IAAI;EAEnB,IAAI,EAAE,OAAO,KACX,OAAO,IACL,qBACA,6CACF;EAEF,OAAO;GAAE,OAAO;GAAM,SAAS;EAAE;CACnC;CAGA,MAAM,UAAU,aADH,EAAE,WAAW,KAAK,EAAE,MAAM,CAAC,IAAI,CACX;CACjC,IAAI,YAAY,MACd,OAAO;CAET,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS;EAAC;EAAI;EAAI;CAAE;CACpB,UAAU;EACR;EACA;EACA;EACA;CACF;CACA,aACE;CAEF,WAAW;CACX;CACA;CACA;CACA;AACF"}
|
package/dist/be/bis.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/be/bis.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 BIS number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Belgian BIS Number. */
|
|
11
|
-
declare const bis:
|
|
10
|
+
declare const bis: CountryValidator<"BE">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, bis as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=bis.d.ts.map
|
package/dist/be/bis.js
CHANGED
|
@@ -4,17 +4,6 @@ import { err } from "../_util/result.js";
|
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
import { checksum, format as format$1 } from "./nn.js";
|
|
6
6
|
//#region src/be/bis.ts
|
|
7
|
-
/**
|
|
8
|
-
* BIS (BIS-nummer / Numéro BIS).
|
|
9
|
-
*
|
|
10
|
-
* Belgian BIS number for individuals not in the
|
|
11
|
-
* National Register. 11 digits, structured like the
|
|
12
|
-
* NN but with the month offset by 20 (gender unknown)
|
|
13
|
-
* or 40 (gender known).
|
|
14
|
-
*
|
|
15
|
-
* @see https://sma-help.bosa.belgium.be/en/faq/where-can-i-find-my-bis-number
|
|
16
|
-
* @see https://nl.wikipedia.org/wiki/Rijksregisternummer
|
|
17
|
-
*/
|
|
18
7
|
const compact = (value) => clean(value, " .-");
|
|
19
8
|
const validate = (value) => {
|
|
20
9
|
const v = compact(value);
|
|
@@ -50,6 +39,7 @@ const bis = {
|
|
|
50
39
|
abbreviation: "BIS",
|
|
51
40
|
aliases: ["BIS-nummer", "numéro BIS"],
|
|
52
41
|
candidatePattern: "\\d{2}\\.?\\d{2}\\.?\\d{2}-?\\d{3}\\.?\\d{2}",
|
|
42
|
+
scope: "country",
|
|
53
43
|
country: "BE",
|
|
54
44
|
entityType: "person",
|
|
55
45
|
sourceUrl: "https://sma-help.bosa.belgium.be/en/faq/where-can-i-find-my-bis-number",
|
package/dist/be/bis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bis.js","names":["nnFormat"],"sources":["../../src/be/bis.ts"],"sourcesContent":["/**\n * BIS (BIS-nummer / Numéro BIS).\n *\n * Belgian BIS number for individuals not in the\n * National Register. 11 digits, structured like the\n * NN but with the month offset by 20 (gender unknown)\n * or 40 (gender known).\n *\n * @see https://sma-help.bosa.belgium.be/en/faq/where-can-i-find-my-bis-number\n * @see https://nl.wikipedia.org/wiki/Rijksregisternummer\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"bis.js","names":["nnFormat"],"sources":["../../src/be/bis.ts"],"sourcesContent":["/**\n * BIS (BIS-nummer / Numéro BIS).\n *\n * Belgian BIS number for individuals not in the\n * National Register. 11 digits, structured like the\n * NN but with the month offset by 20 (gender unknown)\n * or 40 (gender known).\n *\n * @see https://sma-help.bosa.belgium.be/en/faq/where-can-i-find-my-bis-number\n * @see https://nl.wikipedia.org/wiki/Rijksregisternummer\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\nimport { checksum, format as nnFormat } from \"./nn\";\n\nimport { clean } from \"#util/clean\";\nimport { randomInt } 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 !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"BIS must be exactly 11 digits\",\n );\n }\n if (!isdigits(v) || Number(v) === 0) {\n return err(\n \"INVALID_FORMAT\",\n \"BIS must contain only digits\",\n );\n }\n\n if (checksum(v) === null) {\n return err(\n \"INVALID_CHECKSUM\",\n \"BIS check digits do not match\",\n );\n }\n\n // Month must be in 20..32 or 40..52\n const rawMonth = Number(v.slice(2, 4));\n const inRange20 = rawMonth >= 20 && rawMonth <= 32;\n const inRange40 = rawMonth >= 40 && rawMonth <= 52;\n if (!inRange20 && !inRange40) {\n return err(\n \"INVALID_COMPONENT\",\n \"Month must be in 20..32 or 40..52\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n nnFormat(compact(value));\n\n/** Generate a random valid BIS number. */\nconst generate = (): string => {\n for (;;) {\n const yy = String(randomInt(0, 99)).padStart(2, \"0\");\n const offset = Math.random() < 0.5 ? 20 : 40;\n const mm = String(randomInt(1, 12) + offset).padStart(\n 2,\n \"0\",\n );\n const dd = String(randomInt(1, 28)).padStart(2, \"0\");\n const serial = String(randomInt(1, 997)).padStart(\n 3,\n \"0\",\n );\n const base = yy + mm + dd + serial;\n const n2 = Number(\"2\" + base);\n const check2 = 97 - (n2 % 97);\n const c = base + String(check2).padStart(2, \"0\");\n if (validate(c).valid) return c;\n }\n};\n\n/** Belgian BIS Number. */\nconst bis: CountryValidator<\"BE\"> = {\n name: \"Belgian BIS Number\",\n localName: \"BIS-nummer\",\n abbreviation: \"BIS\",\n aliases: [\"BIS-nummer\", \"numéro BIS\"] as const,\n candidatePattern:\n \"\\\\d{2}\\\\.?\\\\d{2}\\\\.?\\\\d{2}-?\\\\d{3}\\\\.?\\\\d{2}\",\n scope: \"country\",\n country: \"BE\",\n entityType: \"person\",\n sourceUrl:\n \"https://sma-help.bosa.belgium.be/en/faq/where-can-i-find-my-bis-number\",\n examples: [\"98472899765\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default bis;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAuBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,MAAM,GAChC,OAAO,IACL,kBACA,8BACF;CAGF,IAAI,SAAS,CAAC,MAAM,MAClB,OAAO,IACL,oBACA,+BACF;CAIF,MAAM,WAAW,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAGrC,IAAI,EAFc,YAAY,MAAM,YAAY,OAE9B,EADA,YAAY,MAAM,YAAY,KAE9C,OAAO,IACL,qBACA,mCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACdA,SAAS,QAAQ,KAAK,CAAC;;AAGzB,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,SAAS,KAAK,OAAO,IAAI,KAAM,KAAK;EAC1C,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,IAAI,MAAM,EAAE,SAC3C,GACA,GACF;EACA,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,SAAS,OAAO,UAAU,GAAG,GAAG,CAAC,EAAE,SACvC,GACA,GACF;EACA,MAAM,OAAO,KAAK,KAAK,KAAK;EAE5B,MAAM,SAAS,KADJ,OAAO,MAAM,IACF,IAAI;EAC1B,MAAM,IAAI,OAAO,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG;EAC/C,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,cAAc,YAAY;CACpC,kBACE;CACF,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
|
package/dist/be/mod.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import bis from "./bis.js";
|
|
3
2
|
import nn from "./nn.js";
|
|
4
3
|
import vat from "./vat.js";
|
|
5
4
|
|
|
6
5
|
//#region src/be/mod.d.ts
|
|
7
|
-
|
|
6
|
+
declare namespace mod_d_exports {
|
|
7
|
+
export { bis, nn, vat };
|
|
8
|
+
}
|
|
8
9
|
//#endregion
|
|
9
10
|
export { bis, mod_d_exports, nn, vat };
|
|
10
11
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/be/nn.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/be/nn.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
/**
|
|
7
6
|
* Verify the mod-97 checksum and return the detected
|
|
@@ -15,7 +14,7 @@ declare const format: (value: string) => string;
|
|
|
15
14
|
/** Generate a random valid Belgian NN. */
|
|
16
15
|
declare const generate: () => string;
|
|
17
16
|
/** Belgian National Number. */
|
|
18
|
-
declare const nn:
|
|
17
|
+
declare const nn: CountryValidator<"BE">;
|
|
19
18
|
//#endregion
|
|
20
19
|
export { checksum, compact, nn as default, format, generate, validate };
|
|
21
20
|
//# sourceMappingURL=nn.d.ts.map
|
package/dist/be/nn.js
CHANGED
|
@@ -3,17 +3,6 @@ import { 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/be/nn.ts
|
|
6
|
-
/**
|
|
7
|
-
* NN (Numéro national / Rijksregisternummer).
|
|
8
|
-
*
|
|
9
|
-
* Belgian national identification number. 11 digits
|
|
10
|
-
* encoding date of birth, serial number, and a
|
|
11
|
-
* check digit pair. The first 6 digits are YYMMDD,
|
|
12
|
-
* followed by a 3-digit serial and 2 check digits.
|
|
13
|
-
*
|
|
14
|
-
* @see https://fr.wikipedia.org/wiki/Numéro_de_registre_national
|
|
15
|
-
* @see https://www.ibz.rrn.fgov.be/
|
|
16
|
-
*/
|
|
17
6
|
const compact = (value) => clean(value, " .-");
|
|
18
7
|
/**
|
|
19
8
|
* Verify the mod-97 checksum and return the detected
|
|
@@ -69,6 +58,7 @@ const nn = {
|
|
|
69
58
|
"NN"
|
|
70
59
|
],
|
|
71
60
|
candidatePattern: "\\d{2}\\.?\\d{2}\\.?\\d{2}-?\\d{3}\\.?\\d{2}",
|
|
61
|
+
scope: "country",
|
|
72
62
|
country: "BE",
|
|
73
63
|
entityType: "person",
|
|
74
64
|
sourceUrl: "https://www.ibz.rrn.fgov.be/",
|
package/dist/be/nn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nn.js","names":[],"sources":["../../src/be/nn.ts"],"sourcesContent":["/**\n * NN (Numéro national / Rijksregisternummer).\n *\n * Belgian national identification number. 11 digits\n * encoding date of birth, serial number, and a\n * check digit pair. The first 6 digits are YYMMDD,\n * followed by a 3-digit serial and 2 check digits.\n *\n * @see https://fr.wikipedia.org/wiki/Numéro_de_registre_national\n * @see https://www.ibz.rrn.fgov.be/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"nn.js","names":[],"sources":["../../src/be/nn.ts"],"sourcesContent":["/**\n * NN (Numéro national / Rijksregisternummer).\n *\n * Belgian national identification number. 11 digits\n * encoding date of birth, serial number, and a\n * check digit pair. The first 6 digits are YYMMDD,\n * followed by a 3-digit serial and 2 check digits.\n *\n * @see https://fr.wikipedia.org/wiki/Numéro_de_registre_national\n * @see https://www.ibz.rrn.fgov.be/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" .-\");\n\n/**\n * Verify the mod-97 checksum and return the detected\n * century (1900 or 2000). Returns null on mismatch.\n * Matches python-stdnum's _checksum logic: the 2000s\n * century is only attempted when YY+2000 <= current year.\n */\nconst checksum = (v: string): number | null => {\n const first9 = Number(v.slice(0, 9));\n const check = Number(v.slice(9, 11));\n\n if (97 - (first9 % 97) === check) return 1900;\n\n const yy = Number(v.slice(0, 2));\n if (yy + 2000 <= new Date().getFullYear()) {\n const with2 = Number(`2${v.slice(0, 9)}`);\n if (97 - (with2 % 97) === check) return 2000;\n }\n\n return null;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"NN must be exactly 11 digits\",\n );\n }\n if (!isdigits(v) || Number(v) === 0) {\n return err(\n \"INVALID_FORMAT\",\n \"NN must contain only digits\",\n );\n }\n\n if (checksum(v) === null) {\n return err(\n \"INVALID_CHECKSUM\",\n \"NN check digits do not match\",\n );\n }\n\n // Raw month digits must be 0..12 (values 13+ are\n // invalid; counter-exhaustion uses 00, not 20+).\n const rawMonth = Number(v.slice(2, 4));\n if (rawMonth > 12) {\n return err(\n \"INVALID_COMPONENT\",\n \"Month must be in 0..12\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)}.${v.slice(2, 4)}.${v.slice(4, 6)}-${v.slice(6, 9)}.${v.slice(9)}`;\n};\n\n/** Generate a random valid Belgian NN. */\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 = String(randomInt(1, 997)).padStart(\n 3,\n \"0\",\n );\n const base = yy + mm + dd + serial;\n const n1 = Number(base);\n const check1 = 97 - (n1 % 97);\n const c = base + String(check1).padStart(2, \"0\");\n if (validate(c).valid) return c;\n }\n};\n\n/** Belgian National Number. */\nconst nn: CountryValidator<\"BE\"> = {\n name: \"Belgian National Number\",\n localName: \"Numéro national\",\n abbreviation: \"NN\",\n aliases: [\n \"rijksregisternummer\",\n \"numéro national\",\n \"NN\",\n ] as const,\n candidatePattern:\n \"\\\\d{2}\\\\.?\\\\d{2}\\\\.?\\\\d{2}-?\\\\d{3}\\\\.?\\\\d{2}\",\n scope: \"country\",\n country: \"BE\",\n entityType: \"person\",\n sourceUrl: \"https://www.ibz.rrn.fgov.be/\",\n examples: [\"93051822361\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nn;\nexport { checksum, compact, format, validate, generate };\n"],"mappings":";;;;;AAsBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;;;;;;;AAQpB,MAAM,YAAY,MAA6B;CAC7C,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CACnC,MAAM,QAAQ,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAEnC,IAAI,KAAM,SAAS,OAAQ,OAAO,OAAO;CAGzC,IADW,OAAO,EAAE,MAAM,GAAG,CAAC,CACzB,IAAI,wBAAQ,IAAI,KAAK,GAAE,YAAY;MAElC,KADU,OAAO,IAAI,EAAE,MAAM,GAAG,CAAC,GACvB,IAAI,OAAQ,OAAO,OAAO;CAAA;CAG1C,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,MAAM,GAChC,OAAO,IACL,kBACA,6BACF;CAGF,IAAI,SAAS,CAAC,MAAM,MAClB,OAAO,IACL,oBACA,8BACF;CAMF,IADiB,OAAO,EAAE,MAAM,GAAG,CAAC,CACzB,IAAI,IACb,OAAO,IACL,qBACA,wBACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;AACzF;;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,OAAO,UAAU,GAAG,GAAG,CAAC,EAAE,SACvC,GACA,GACF;EACA,MAAM,OAAO,KAAK,KAAK,KAAK;EAE5B,MAAM,SAAS,KADJ,OAAO,IACI,IAAI;EAC1B,MAAM,IAAI,OAAO,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG;EAC/C,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,KAA6B;CACjC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBACE;CACF,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
|
package/dist/be/vat.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/be/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 Belgian VAT number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Belgian VAT Number. */
|
|
11
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"BE">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, vat as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/be/vat.js
CHANGED
|
@@ -3,15 +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/be/vat.ts
|
|
6
|
-
/**
|
|
7
|
-
* BTW/TVA/MWSt (Belgian VAT number).
|
|
8
|
-
*
|
|
9
|
-
* 10 digits, first must be 0 or 1.
|
|
10
|
-
* Checksum: (first 8 digits + last 2) % 97 === 0.
|
|
11
|
-
*
|
|
12
|
-
* @see https://www.vatify.eu/belgium-vat-number.html
|
|
13
|
-
* @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/belgium-tin.pdf
|
|
14
|
-
*/
|
|
15
6
|
const compact = (value) => {
|
|
16
7
|
let v = clean(value, " -/.");
|
|
17
8
|
if (v.startsWith("BE") || v.startsWith("be")) v = v.slice(2);
|
|
@@ -55,6 +46,7 @@ const vat = {
|
|
|
55
46
|
"ondernemingsnummer"
|
|
56
47
|
],
|
|
57
48
|
candidatePattern: "BE0?\\d{9,10}",
|
|
49
|
+
scope: "country",
|
|
58
50
|
country: "BE",
|
|
59
51
|
entityType: "company",
|
|
60
52
|
sourceUrl: "https://finances.belgium.be/",
|
package/dist/be/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/be/vat.ts"],"sourcesContent":["/**\n * BTW/TVA/MWSt (Belgian VAT number).\n *\n * 10 digits, first must be 0 or 1.\n * Checksum: (first 8 digits + last 2) % 97 === 0.\n *\n * @see https://www.vatify.eu/belgium-vat-number.html\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/belgium-tin.pdf\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/be/vat.ts"],"sourcesContent":["/**\n * BTW/TVA/MWSt (Belgian VAT number).\n *\n * 10 digits, first must be 0 or 1.\n * Checksum: (first 8 digits + last 2) % 97 === 0.\n *\n * @see https://www.vatify.eu/belgium-vat-number.html\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/belgium-tin.pdf\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 let v = clean(value, \" -/.\");\n if (v.startsWith(\"BE\") || v.startsWith(\"be\")) {\n v = v.slice(2);\n }\n // Old 9-digit format: zero-pad to 10\n if (v.length === 9) {\n v = `0${v}`;\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 \"Belgian VAT number must be 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Belgian VAT number must contain only digits\",\n );\n }\n if (Number(v) === 0) {\n return err(\n \"INVALID_FORMAT\",\n \"Belgian VAT number cannot be all zeros\",\n );\n }\n if (v[0] !== \"0\" && v[0] !== \"1\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Belgian VAT number must start with 0 or 1\",\n );\n }\n const front = Number.parseInt(v.slice(0, 8), 10);\n const check = Number.parseInt(v.slice(8, 10), 10);\n if ((front + check) % 97 !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Belgian VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `BE${v}`;\n};\n\n/** Generate a random valid Belgian VAT number. */\nconst generate = (): string => {\n for (;;) {\n const prefix = Math.random() < 0.5 ? \"0\" : \"1\";\n const front = prefix + randomDigits(7);\n const rem = Number.parseInt(front, 10) % 97;\n const check = rem === 0 ? 97 : 97 - rem;\n const c = front + String(check).padStart(2, \"0\");\n if (validate(c).valid) return c;\n }\n};\n\n/** Belgian VAT Number. */\nconst vat: CountryValidator<\"BE\"> = {\n name: \"Belgian VAT Number\",\n localName: \"BTW-identificatienummer\",\n abbreviation: \"BTW\",\n aliases: [\n \"BTW\",\n \"TVA\",\n \"numéro d'entreprise\",\n \"ondernemingsnummer\",\n ] as const,\n candidatePattern: \"BE0?\\\\d{9,10}\",\n scope: \"country\",\n country: \"BE\",\n entityType: \"company\",\n sourceUrl: \"https://finances.belgium.be/\",\n examples: [\"0776091951\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAoBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,MAAM;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,IAAI,EAAE,MAAM,CAAC;CAGf,IAAI,EAAE,WAAW,GACf,IAAI,IAAI;CAEV,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,sCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,6CACF;CAEF,IAAI,OAAO,CAAC,MAAM,GAChB,OAAO,IACL,kBACA,wCACF;CAEF,IAAI,EAAE,OAAO,OAAO,EAAE,OAAO,KAC3B,OAAO,IACL,qBACA,2CACF;CAIF,KAFc,OAAO,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAEpC,IADK,OAAO,SAAS,EAAE,MAAM,GAAG,EAAE,GAAG,EAC7B,KAAK,OAAO,GAC3B,OAAO,IACL,oBACA,yCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CAExC,OAAO,KADG,QAAQ,KACN;AACd;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EAEP,MAAM,SADS,KAAK,OAAO,IAAI,KAAM,MAAM,OACpB,aAAa,CAAC;EACrC,MAAM,MAAM,OAAO,SAAS,OAAO,EAAE,IAAI;EACzC,MAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK;EACpC,MAAM,IAAI,QAAQ,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG;EAC/C,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;AACF"}
|
package/dist/bg/egn.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/bg/egn.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 EGN. */
|
|
14
13
|
declare const generate: () => string;
|
|
15
14
|
/** Bulgarian Personal Identification Number. */
|
|
16
|
-
declare const egn:
|
|
15
|
+
declare const egn: CountryValidator<"BG", ParsedPersonId>;
|
|
17
16
|
//#endregion
|
|
18
17
|
export { compact, egn as default, format, generate, parse, validate };
|
|
19
18
|
//# sourceMappingURL=egn.d.ts.map
|
package/dist/bg/egn.js
CHANGED
|
@@ -1,20 +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 { 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/bg/egn.ts
|
|
8
|
-
/**
|
|
9
|
-
* EGN (Единен граждански номер).
|
|
10
|
-
*
|
|
11
|
-
* Bulgarian personal identification number.
|
|
12
|
-
* 10 digits encoding date of birth, serial number,
|
|
13
|
-
* and a check digit.
|
|
14
|
-
*
|
|
15
|
-
* @see https://en.wikipedia.org/wiki/Unique_citizenship_number
|
|
16
|
-
* @see https://www.grao.bg/
|
|
17
|
-
*/
|
|
18
8
|
const WEIGHTS = [
|
|
19
9
|
2,
|
|
20
10
|
4,
|
|
@@ -107,12 +97,14 @@ const egn = {
|
|
|
107
97
|
"EGN"
|
|
108
98
|
],
|
|
109
99
|
candidatePattern: "\\d{10}",
|
|
100
|
+
scope: "country",
|
|
110
101
|
country: "BG",
|
|
111
102
|
entityType: "person",
|
|
112
|
-
sourceUrl: "https://www.grao.bg/",
|
|
103
|
+
sourceUrl: "https://www.grao.bg/normact/NaredbaFunkcESGR.pdf",
|
|
113
104
|
examples: ["7523169263"],
|
|
114
105
|
compact,
|
|
115
106
|
format,
|
|
107
|
+
parse,
|
|
116
108
|
validate,
|
|
117
109
|
generate
|
|
118
110
|
};
|
package/dist/bg/egn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"egn.js","names":[],"sources":["../../src/bg/egn.ts"],"sourcesContent":["/**\n * EGN (Единен граждански номер).\n *\n * Bulgarian personal identification number.\n * 10 digits encoding date of birth, serial number,\n * and a check digit.\n *\n *
|
|
1
|
+
{"version":3,"file":"egn.js","names":[],"sources":["../../src/bg/egn.ts"],"sourcesContent":["/**\n * EGN (Единен граждански номер).\n *\n * Bulgarian personal identification number.\n * 10 digits encoding date of birth, serial number,\n * and a check digit.\n *\n * Canonical source:\n * - GRAO regulation PDF describing the EGN structure.\n *\n * We treat this as authoritative over third-party\n * oracle libraries when the checksum or date rules\n * disagree.\n *\n * @see https://www.grao.bg/normact/NaredbaFunkcESGR.pdf\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 { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [2, 4, 8, 5, 10, 9, 7, 3, 6] 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 !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"EGN must be exactly 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"EGN 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 let year: number;\n let month: number;\n if (mm > 40) {\n year = 2000 + yy;\n month = mm - 40;\n } else if (mm > 20) {\n year = 1800 + yy;\n month = mm - 20;\n } else {\n year = 1900 + yy;\n month = mm;\n }\n\n if (!isValidDate(year, month, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"EGN contains an invalid date\",\n );\n }\n\n const sum = weightedSum(v.slice(0, 9), WEIGHTS, 11);\n const check = sum % 10;\n if (check !== Number(v[9])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"EGN 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 an EGN.\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.slice(6, 9));\n\n let year: number;\n let month: number;\n if (mm > 40) {\n year = 2000 + yy;\n month = mm - 40;\n } else if (mm > 20) {\n year = 1800 + yy;\n month = mm - 20;\n } else {\n year = 1900 + yy;\n month = mm;\n }\n\n return {\n birthDate: new Date(year, month - 1, dd),\n gender: serial % 2 === 0 ? \"male\" : \"female\",\n };\n};\n\n/** Generate a random valid EGN. */\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 = String(randomInt(0, 999)).padStart(\n 3,\n \"0\",\n );\n const payload = yy + mm + dd + serial;\n const sum = weightedSum(payload, WEIGHTS, 11);\n const c = payload + String(sum % 10);\n if (validate(c).valid) return c;\n }\n};\n\n/** Bulgarian Personal Identification Number. */\nconst egn: CountryValidator<\"BG\", ParsedPersonId> = {\n name: \"Bulgarian Personal ID\",\n localName: \"Единен граждански номер\",\n abbreviation: \"ЕГН\",\n aliases: [\n \"ЕГН\",\n \"единен граждански номер\",\n \"EGN\",\n ] as const,\n candidatePattern: \"\\\\d{10}\",\n scope: \"country\",\n country: \"BG\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.grao.bg/normact/NaredbaFunkcESGR.pdf\",\n examples: [\"7523169263\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default egn;\nexport { compact, format, parse, validate, generate };\n"],"mappings":";;;;;;;AA8BA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;AAAC;AAE3C,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,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;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;CAE/B,IAAI;CACJ,IAAI;CACJ,IAAI,KAAK,IAAI;EACX,OAAO,MAAO;EACd,QAAQ,KAAK;CACf,OAAO,IAAI,KAAK,IAAI;EAClB,OAAO,OAAO;EACd,QAAQ,KAAK;CACf,OAAO;EACL,OAAO,OAAO;EACd,QAAQ;CACV;CAEA,IAAI,CAAC,YAAY,MAAM,OAAO,EAAE,GAC9B,OAAO,IACL,qBACA,8BACF;CAKF,IAFY,YAAY,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,EAChC,IAAI,OACN,OAAO,EAAE,EAAE,GACvB,OAAO,IACL,oBACA,gCACF;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,MAAM,GAAG,CAAC,CAAC;CAEnC,IAAI;CACJ,IAAI;CACJ,IAAI,KAAK,IAAI;EACX,OAAO,MAAO;EACd,QAAQ,KAAK;CACf,OAAO,IAAI,KAAK,IAAI;EAClB,OAAO,OAAO;EACd,QAAQ,KAAK;CACf,OAAO;EACL,OAAO,OAAO;EACd,QAAQ;CACV;CAEA,OAAO;EACL,WAAW,IAAI,KAAK,MAAM,QAAQ,GAAG,EAAE;EACvC,QAAQ,SAAS,MAAM,IAAI,SAAS;CACtC;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,OAAO,UAAU,GAAG,GAAG,CAAC,EAAE,SACvC,GACA,GACF;EACA,MAAM,UAAU,KAAK,KAAK,KAAK;EAC/B,MAAM,MAAM,YAAY,SAAS,SAAS,EAAE;EAC5C,MAAM,IAAI,UAAU,OAAO,MAAM,EAAE;EACnC,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8C;CAClD,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;CACA;AACF"}
|
package/dist/bg/mod.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import egn from "./egn.js";
|
|
3
2
|
import pnf from "./pnf.js";
|
|
4
3
|
import vat from "./vat.js";
|
|
5
4
|
|
|
6
5
|
//#region src/bg/mod.d.ts
|
|
7
|
-
|
|
6
|
+
declare namespace mod_d_exports {
|
|
7
|
+
export { egn, pnf, vat };
|
|
8
|
+
}
|
|
8
9
|
//#endregion
|
|
9
10
|
export { egn, mod_d_exports, pnf, vat };
|
|
10
11
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/bg/pnf.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/bg/pnf.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 PNF. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Bulgarian Personal Number of a Foreigner. */
|
|
11
|
-
declare const pnf:
|
|
10
|
+
declare const pnf: CountryValidator<"BG">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, pnf as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=pnf.d.ts.map
|
package/dist/bg/pnf.js
CHANGED
|
@@ -3,14 +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/bg/pnf.ts
|
|
6
|
-
/**
|
|
7
|
-
* PNF (ЛНЧ, Личен номер на чужденец).
|
|
8
|
-
*
|
|
9
|
-
* Bulgarian personal number of a foreigner.
|
|
10
|
-
* 10 digits; the last digit is a weighted checksum.
|
|
11
|
-
*
|
|
12
|
-
* @see https://en.wikipedia.org/wiki/Unique_citizenship_number
|
|
13
|
-
*/
|
|
14
6
|
const WEIGHTS = [
|
|
15
7
|
21,
|
|
16
8
|
19,
|
|
@@ -55,6 +47,7 @@ const pnf = {
|
|
|
55
47
|
"PNF"
|
|
56
48
|
],
|
|
57
49
|
candidatePattern: "\\d{10}",
|
|
50
|
+
scope: "country",
|
|
58
51
|
country: "BG",
|
|
59
52
|
entityType: "person",
|
|
60
53
|
sourceUrl: "https://en.wikipedia.org/wiki/Unique_citizenship_number",
|
package/dist/bg/pnf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pnf.js","names":[],"sources":["../../src/bg/pnf.ts"],"sourcesContent":["/**\n * PNF (ЛНЧ, Личен номер на чужденец).\n *\n * Bulgarian personal number of a foreigner.\n * 10 digits; the last digit is a weighted checksum.\n *\n * @see https://en.wikipedia.org/wiki/Unique_citizenship_number\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"pnf.js","names":[],"sources":["../../src/bg/pnf.ts"],"sourcesContent":["/**\n * PNF (ЛНЧ, Личен номер на чужденец).\n *\n * Bulgarian personal number of a foreigner.\n * 10 digits; the last digit is a weighted checksum.\n *\n * @see https://en.wikipedia.org/wiki/Unique_citizenship_number\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 WEIGHTS = [21, 19, 17, 13, 11, 9, 7, 3, 1] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -.\");\n\nconst calcCheckDigit = (number: string): string => {\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n // SAFETY: WEIGHTS has exactly 9 entries\n // eslint-disable-next-line no-non-null-assertion\n sum += WEIGHTS[i]! * Number(number[i]);\n }\n return String(sum % 10);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"PNF must be exactly 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"PNF must contain only digits\",\n );\n }\n if (calcCheckDigit(v.slice(0, 9)) !== v[9]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"PNF check digit does not match\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid PNF. */\nconst generate = (): string => {\n const payload = randomDigits(9);\n return payload + calcCheckDigit(payload);\n};\n\n/** Bulgarian Personal Number of a Foreigner. */\nconst pnf: CountryValidator<\"BG\"> = {\n name: \"Bulgarian Foreigner Number\",\n localName: \"Личен номер на чужденец\",\n abbreviation: \"ЛНЧ\",\n aliases: [\n \"ЛНЧ\",\n \"личен номер на чужденец\",\n \"PNF\",\n ] as const,\n candidatePattern: \"\\\\d{10}\",\n scope: \"country\",\n country: \"BG\",\n entityType: \"person\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Unique_citizenship_number\",\n examples: [\"7111042925\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default pnf;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAmBA,MAAM,UAAU;CAAC;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;AAAC;AAE/C,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,kBAAkB,WAA2B;CACjD,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAGrB,OAAO,QAAQ,KAAM,OAAO,OAAO,EAAE;CAEvC,OAAO,OAAO,MAAM,EAAE;AACxB;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,IAAI,eAAe,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,IACtC,OAAO,IACL,oBACA,gCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,CAAC;CAC9B,OAAO,UAAU,eAAe,OAAO;AACzC;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;AACF"}
|