@stll/stdnum 0.0.1 → 1.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/mod112.js +5 -5
- package/dist/_checksums/mod112.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/ad/mod.d.ts +3 -2
- package/dist/ad/nrt.js +3 -2
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +0 -1
- package/dist/ae/mod.d.ts +3 -2
- package/dist/ai/mod.d.ts +3 -2
- package/dist/al/mod.d.ts +3 -2
- package/dist/am/mod.d.ts +3 -2
- package/dist/ar/cbu.d.ts +0 -1
- package/dist/ar/cbu.js +1 -1
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +0 -1
- package/dist/ar/cuit.js +12 -12
- package/dist/ar/cuit.js.map +1 -1
- package/dist/ar/mod.d.ts +3 -2
- package/dist/at/mod.d.ts +3 -2
- package/dist/at/tin.d.ts +0 -1
- package/dist/at/uid.d.ts +0 -1
- package/dist/at/vnr.d.ts +3 -2
- package/dist/at/vnr.js +20 -3
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +0 -1
- package/dist/au/acn.d.ts +0 -1
- package/dist/au/mod.d.ts +3 -2
- package/dist/au/tfn.d.ts +0 -1
- package/dist/az/mod.d.ts +3 -2
- package/dist/az/voen.d.ts +0 -1
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +1 -2
- package/dist/ba/jmbg.js +1 -0
- 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.js +10 -11
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +0 -1
- package/dist/be/mod.d.ts +3 -2
- package/dist/be/nn.d.ts +0 -1
- package/dist/be/vat.d.ts +0 -1
- package/dist/bg/egn.d.ts +1 -2
- package/dist/bg/egn.js +10 -3
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/mod.d.ts +3 -2
- package/dist/bg/pnf.d.ts +0 -1
- package/dist/bg/vat.d.ts +0 -1
- package/dist/bh/cpr.d.ts +3 -2
- package/dist/bh/cpr.js +8 -2
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bh/mod.d.ts +3 -2
- package/dist/bic.js +13 -15
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +0 -1
- package/dist/br/cpf.d.ts +0 -1
- package/dist/br/mod.d.ts +3 -2
- package/dist/by/mod.d.ts +3 -2
- package/dist/by/unp.d.ts +0 -1
- package/dist/by/unp.js +6 -3
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/mod.d.ts +3 -2
- package/dist/bz/tin.d.ts +3 -2
- package/dist/bz/tin.js +9 -1
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +0 -1
- package/dist/ca/mod.d.ts +3 -2
- package/dist/ca/sin.d.ts +0 -1
- package/dist/ch/mod.d.ts +3 -2
- package/dist/ch/ssn.d.ts +0 -1
- package/dist/ch/uid.d.ts +0 -1
- package/dist/ch/vat.d.ts +0 -1
- package/dist/cl/mod.d.ts +3 -2
- package/dist/cl/rut.d.ts +0 -1
- package/dist/cl/rut.js +1 -1
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/mod.d.ts +3 -2
- package/dist/cn/ric.d.ts +1 -2
- package/dist/cn/ric.js +1 -0
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +0 -1
- package/dist/cn/uscc.js +7 -6
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/mod.d.ts +3 -2
- package/dist/co/nit.d.ts +0 -1
- package/dist/co/nit.js +4 -1
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.js +4 -3
- package/dist/cr/cpf.js.map +1 -1
- package/dist/cr/mod.d.ts +3 -2
- package/dist/creditcard.d.ts +0 -1
- package/dist/cu/mod.d.ts +3 -2
- package/dist/cu/ni.d.ts +4 -3
- package/dist/cu/ni.js +11 -1
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/mod.d.ts +3 -2
- package/dist/cy/vat.d.ts +0 -1
- package/dist/cz/dic.d.ts +0 -1
- package/dist/cz/ico.d.ts +0 -1
- package/dist/cz/mod.d.ts +3 -2
- package/dist/cz/rc.d.ts +1 -2
- package/dist/cz/rc.js +33 -8
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.js +9 -9
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +0 -1
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/mod.d.ts +3 -2
- package/dist/de/stnr.d.ts +0 -1
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +0 -1
- package/dist/de/svnr.js +2 -2
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +0 -1
- package/dist/dk/cpr.d.ts +4 -3
- package/dist/dk/cpr.js +12 -2
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +0 -1
- package/dist/dk/mod.d.ts +3 -2
- package/dist/dk/vat.d.ts +0 -1
- package/dist/do/mod.d.ts +3 -2
- package/dist/do/rnc.d.ts +0 -1
- package/dist/do/rnc.js +1 -1
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/mod.d.ts +3 -2
- package/dist/ec/ruc.d.ts +0 -1
- package/dist/ec/ruc.js +1 -1
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +1 -2
- package/dist/ee/ik.js +12 -4
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/mod.d.ts +3 -2
- package/dist/ee/registrikood.d.ts +0 -1
- package/dist/ee/registrikood.js +8 -7
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +0 -1
- package/dist/eg/mod.d.ts +3 -2
- package/dist/es/cif.d.ts +0 -1
- package/dist/es/cif.js +2 -2
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +0 -1
- package/dist/es/mod.d.ts +3 -2
- package/dist/es/nie.d.ts +0 -1
- package/dist/es/nie.js +13 -13
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +0 -1
- package/dist/es/vat.d.ts +0 -1
- package/dist/eu/mod.d.ts +3 -2
- package/dist/eu/vat.d.ts +3 -2
- package/dist/eu/vat.js +43 -2
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +4 -3
- package/dist/fi/hetu.js +17 -2
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/mod.d.ts +3 -2
- package/dist/fi/vat.d.ts +0 -1
- package/dist/fi/ytunnus.d.ts +0 -1
- package/dist/fr/mod.d.ts +3 -2
- package/dist/fr/nif.d.ts +0 -1
- package/dist/fr/nir.d.ts +1 -2
- package/dist/fr/nir.js +1 -0
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +0 -1
- package/dist/fr/siret.d.ts +0 -1
- package/dist/fr/tva.d.ts +0 -1
- package/dist/gb/mod.d.ts +3 -2
- package/dist/gb/nino.js +7 -7
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +0 -1
- package/dist/gb/sedol.js +8 -7
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +0 -1
- package/dist/gb/vat.d.ts +0 -1
- package/dist/ge/mod.d.ts +3 -2
- package/dist/gh/mod.d.ts +3 -2
- package/dist/gh/tin.d.ts +0 -1
- package/dist/gh/tin.js +9 -9
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +0 -1
- package/dist/gr/mod.d.ts +3 -2
- package/dist/gr/vat.d.ts +0 -1
- package/dist/gt/mod.d.ts +3 -2
- package/dist/gt/nit.d.ts +0 -1
- package/dist/gt/nit.js +5 -2
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +0 -1
- package/dist/hk/hkid.js +1 -0
- 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 +0 -1
- package/dist/hu/mod.d.ts +3 -2
- package/dist/hu/vat.d.ts +0 -1
- package/dist/iban.d.ts +0 -1
- package/dist/id/mod.d.ts +3 -2
- package/dist/id/npwp.d.ts +0 -1
- package/dist/ie/mod.d.ts +3 -2
- package/dist/ie/pps.d.ts +0 -1
- package/dist/ie/vat.d.ts +0 -1
- package/dist/il/idnr.d.ts +0 -1
- package/dist/il/mod.d.ts +3 -2
- package/dist/in/aadhaar.d.ts +0 -1
- package/dist/in/gstin.d.ts +0 -1
- package/dist/in/gstin.js +3 -1
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/mod.d.ts +3 -2
- package/dist/in/pan.js +2 -2
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/iq/mod.d.ts +3 -2
- package/dist/ir/mod.d.ts +3 -2
- package/dist/ir/nid.d.ts +0 -1
- package/dist/is/kennitala.d.ts +0 -1
- package/dist/is/mod.d.ts +3 -2
- package/dist/isin.d.ts +0 -1
- package/dist/isin.js +9 -9
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +4 -3
- package/dist/it/codicefiscale.js +26 -2
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +0 -1
- package/dist/it/mod.d.ts +3 -2
- package/dist/jp/cn.d.ts +0 -1
- package/dist/jp/mod.d.ts +3 -2
- package/dist/jp/mynumber.d.ts +0 -1
- package/dist/kr/mod.d.ts +3 -2
- package/dist/kr/rrn.d.ts +4 -3
- package/dist/kr/rrn.js +13 -2
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +6 -5
- package/dist/kw/civil.js +18 -3
- package/dist/kw/civil.js.map +1 -1
- package/dist/kw/mod.d.ts +3 -2
- package/dist/kz/iin.d.ts +1 -2
- package/dist/kz/iin.js +1 -0
- package/dist/kz/iin.js.map +1 -1
- package/dist/kz/mod.d.ts +3 -2
- package/dist/lei.d.ts +0 -1
- package/dist/li/mod.d.ts +3 -2
- package/dist/lk/mod.d.ts +3 -2
- package/dist/lk/nic.d.ts +4 -3
- package/dist/lk/nic.js +14 -2
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +0 -1
- package/dist/lt/mod.d.ts +3 -2
- package/dist/lt/vat.d.ts +0 -1
- package/dist/lu/mod.d.ts +3 -2
- package/dist/lu/vat.d.ts +0 -1
- package/dist/luhn.d.ts +0 -1
- package/dist/luhn.js +7 -0
- package/dist/luhn.js.map +1 -1
- package/dist/lv/mod.d.ts +3 -2
- package/dist/lv/vat.d.ts +0 -1
- package/dist/lv/vat.js +39 -12
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +0 -1
- package/dist/ma/mod.d.ts +3 -2
- package/dist/mc/mod.d.ts +3 -2
- package/dist/mc/tva.d.ts +0 -1
- package/dist/md/idno.d.ts +0 -1
- package/dist/md/mod.d.ts +3 -2
- package/dist/me/mod.d.ts +3 -2
- package/dist/me/pib.d.ts +0 -1
- package/dist/mk/edb.d.ts +0 -1
- package/dist/mk/mod.d.ts +3 -2
- package/dist/mt/mod.d.ts +3 -2
- package/dist/mt/vat.d.ts +0 -1
- package/dist/mu/mod.d.ts +3 -2
- package/dist/mx/clabe.d.ts +0 -1
- package/dist/mx/curp.d.ts +4 -3
- package/dist/mx/curp.js +25 -3
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/mod.d.ts +3 -2
- package/dist/mx/rfc.d.ts +3 -2
- package/dist/mx/rfc.js +21 -2
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/mod.d.ts +3 -2
- package/dist/my/nric.d.ts +4 -3
- package/dist/my/nric.js +16 -2
- package/dist/my/nric.js.map +1 -1
- package/dist/ng/mod.d.ts +3 -2
- package/dist/ni/mod.d.ts +3 -2
- package/dist/ni/ruc.d.ts +0 -1
- package/dist/nl/bsn.d.ts +0 -1
- package/dist/nl/mod.d.ts +3 -2
- package/dist/nl/vat.d.ts +0 -1
- package/dist/nl/vat.js +9 -43
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +1 -2
- package/dist/no/fodselsnummer.js +1 -0
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mod.d.ts +3 -2
- package/dist/no/mva.d.ts +0 -1
- package/dist/no/orgnr.d.ts +0 -1
- package/dist/nz/ird.d.ts +0 -1
- package/dist/nz/ird.js +2 -2
- 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 +0 -1
- package/dist/pa/ruc.js +3 -1
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +1 -4
- package/dist/patterns.js +80 -23
- package/dist/patterns.js.map +1 -1
- package/dist/pe/mod.d.ts +3 -2
- package/dist/pe/ruc.d.ts +0 -1
- package/dist/pe/ruc.js +9 -9
- package/dist/pe/ruc.js.map +1 -1
- package/dist/ph/mod.d.ts +3 -2
- 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 +0 -1
- package/dist/pl/pesel.d.ts +1 -2
- package/dist/pl/pesel.js +1 -0
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +0 -1
- package/dist/pt/cc.d.ts +0 -1
- package/dist/pt/cc.js +6 -4
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/mod.d.ts +3 -2
- package/dist/pt/vat.d.ts +0 -1
- package/dist/ro/cnp.d.ts +1 -2
- package/dist/ro/cnp.js +1 -0
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/mod.d.ts +3 -2
- package/dist/ro/vat.d.ts +0 -1
- package/dist/rs/mod.d.ts +3 -2
- package/dist/rs/pib.d.ts +0 -1
- package/dist/ru/inn.d.ts +0 -1
- package/dist/ru/inn.js +1 -1
- 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 +0 -1
- package/dist/se/personnummer.d.ts +1 -2
- package/dist/se/personnummer.js +1 -0
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +0 -1
- package/dist/sg/mod.d.ts +3 -2
- package/dist/sg/uen.d.ts +0 -1
- package/dist/sg/uen.js +46 -55
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +1 -2
- package/dist/si/emso.js +17 -4
- package/dist/si/emso.js.map +1 -1
- package/dist/si/mod.d.ts +3 -2
- package/dist/si/vat.d.ts +0 -1
- package/dist/sk/dic.d.ts +0 -1
- package/dist/sk/ico.d.ts +0 -1
- package/dist/sk/mod.d.ts +3 -2
- package/dist/sk/rc.d.ts +4 -5
- package/dist/sk/rc.js +5 -2
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/mod.d.ts +3 -2
- package/dist/th/tin.d.ts +0 -1
- package/dist/tr/mod.d.ts +3 -2
- package/dist/tr/tckimlik.d.ts +0 -1
- package/dist/tr/vkn.d.ts +0 -1
- package/dist/tw/mod.d.ts +3 -2
- package/dist/tw/ubn.d.ts +0 -1
- package/dist/tw/ubn.js +1 -1
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +35 -22
- package/dist/ua/edrpou.d.ts +0 -1
- package/dist/ua/edrpou.js +4 -1
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/ua/mod.d.ts +3 -2
- package/dist/us/ein.js +87 -87
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.js +3 -4
- package/dist/us/itin.js.map +1 -1
- package/dist/us/mod.d.ts +3 -2
- package/dist/us/rtn.d.ts +0 -1
- package/dist/us/rtn.js +8 -5
- package/dist/us/rtn.js.map +1 -1
- package/dist/uy/mod.d.ts +3 -2
- package/dist/uy/rut.d.ts +0 -1
- package/dist/uy/rut.js +1 -1
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/mod.d.ts +3 -2
- package/dist/ve/rif.d.ts +0 -1
- package/dist/ve/rif.js +11 -11
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mod.d.ts +3 -2
- package/dist/vn/mst.d.ts +0 -1
- package/dist/za/idnr.d.ts +1 -2
- package/dist/za/idnr.js +1 -0
- package/dist/za/idnr.js.map +1 -1
- package/dist/za/mod.d.ts +3 -2
- package/package.json +18 -15
- package/src/_checksums/mod112.ts +7 -6
- package/src/_util/generate.ts +38 -0
- package/src/ad/nrt.ts +12 -4
- package/src/ar/cbu.ts +2 -2
- package/src/ar/cuit.ts +15 -7
- package/src/at/vnr.ts +26 -4
- package/src/az/voen.ts +2 -0
- package/src/ba/jmbg.ts +2 -1
- package/src/bd/nid.ts +4 -4
- package/src/bg/egn.ts +12 -4
- package/src/bh/cpr.ts +10 -1
- package/src/bic.ts +19 -17
- package/src/by/unp.ts +9 -4
- package/src/bz/tin.ts +12 -1
- package/src/cl/rut.ts +4 -2
- package/src/cn/ric.ts +4 -1
- package/src/cn/uscc.ts +20 -8
- package/src/co/nit.ts +6 -2
- package/src/cr/cpf.ts +4 -3
- package/src/cu/ni.ts +22 -2
- package/src/cz/rc.ts +54 -23
- package/src/de/handelsreg.ts +14 -3
- package/src/de/idnr.ts +3 -0
- package/src/de/stnr.ts +4 -0
- package/src/de/svnr.ts +7 -2
- package/src/dk/cpr.ts +16 -2
- package/src/do/rnc.ts +2 -2
- package/src/ec/ruc.ts +2 -2
- package/src/ee/ik.ts +14 -4
- package/src/ee/registrikood.ts +4 -3
- package/src/es/cif.ts +2 -3
- package/src/es/nie.ts +10 -5
- package/src/eu/vat.ts +46 -1
- package/src/fi/hetu.ts +19 -2
- package/src/fr/nir.ts +2 -1
- package/src/gb/nino.ts +11 -10
- package/src/gb/sedol.ts +14 -12
- package/src/gh/tin.ts +4 -3
- package/src/gt/nit.ts +6 -3
- package/src/hk/hkid.ts +2 -1
- package/src/in/gstin.ts +3 -1
- package/src/in/pan.ts +8 -3
- package/src/index.ts +3 -0
- package/src/isin.ts +10 -4
- package/src/it/codicefiscale.ts +40 -2
- package/src/kr/rrn.ts +20 -2
- package/src/kw/civil.ts +25 -9
- package/src/kz/iin.ts +2 -1
- package/src/lk/nic.ts +24 -2
- package/src/luhn.ts +3 -0
- package/src/lv/vat.ts +46 -20
- package/src/mx/curp.ts +41 -5
- package/src/mx/rfc.ts +35 -4
- package/src/my/nric.ts +26 -2
- package/src/nl/vat.ts +11 -66
- package/src/no/fodselsnummer.ts +2 -1
- package/src/nz/ird.ts +4 -4
- package/src/pa/ruc.ts +32 -8
- package/src/patterns.ts +135 -28
- package/src/pe/ruc.ts +6 -7
- package/src/pk/cnic.ts +2 -0
- package/src/pl/pesel.ts +2 -1
- package/src/pt/cc.ts +6 -4
- package/src/ro/cnp.ts +2 -1
- package/src/ru/inn.ts +2 -2
- package/src/se/personnummer.ts +2 -1
- package/src/sg/uen.ts +37 -20
- package/src/si/emso.ts +30 -5
- package/src/sk/rc.ts +13 -4
- package/src/tw/ubn.ts +2 -2
- package/src/types.ts +37 -6
- package/src/ua/edrpou.ts +3 -2
- package/src/us/ein.ts +88 -88
- package/src/us/itin.ts +7 -8
- package/src/us/rtn.ts +16 -11
- package/src/uy/rut.ts +2 -2
- package/src/ve/rif.ts +11 -6
- package/src/za/idnr.ts +2 -1
package/dist/az/voen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voen.js","names":[],"sources":["../../src/az/voen.ts"],"sourcesContent":["/**\n * VÖEN (Vergi Ödəyicisinin Eyniləşdirmə Nömrəsi,\n * Azerbaijani tax identification number).\n *\n * 10 digits: TTSSSSSSCD where:\n * - TT = territorial unit code\n * - SSSSSS = serial number\n * - C = check digit (weighted sum mod 11)\n * - D = legal status (1=legal person, 2=natural person)\n *\n * Ported from python-stdnum az.voen module.\n *\n * @see https://www.taxes.gov.az/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/** Weights for check digit computation (positions 0-7). */\nconst WEIGHTS = [4, 1, 8, 6, 2, 7, 5, 3] as const;\n\n/**\n * Compact: strip spaces, prepend '0' if 9 digits.\n */\nconst compact = (value: string): string => {\n let number = clean(value, \" \").trim();\n if (number.length === 9) {\n number = \"0\" + number;\n }\n return number;\n};\n\n/**\n * Calculate the check digit (position 8) using\n * weighted sum of the first 8 digits mod 11.\n */\nconst calcCheckDigit = (value: string): string | null => {\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n sum += (WEIGHTS[i] ?? 0) * Number(value.charAt(i));\n }\n const result = sum % 11;\n return result === 10 ? null : String(result);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Azerbaijani VÖEN must be 10 digits\",\n );\n }\n\n if (!/^\\d{10}$/.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Azerbaijani VÖEN must contain only digits\",\n );\n }\n\n const lastDigit = v[9]!;\n if (lastDigit !== \"1\" && lastDigit !== \"2\") {\n return err(\n \"INVALID_COMPONENT\",\n \"VÖEN last digit must be 1 or 2\",\n );\n }\n\n const expected = calcCheckDigit(v);\n if (expected === null || v[8] !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"VÖEN 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, 6)} ${v.slice(6, 10)}`;\n};\n\n/** Generate a random valid VOEN. */\nconst generate = (): string => {\n for (let i = 0; i < 100; i++) {\n const payload = randomDigits(8);\n const check = calcCheckDigit(payload);\n if (check === null) continue;\n const status = Math.random() < 0.5 ? \"1\" : \"2\";\n return payload + check + status;\n }\n throw new Error(\"Failed to generate valid VOEN\");\n};\n\n/**\n * Azerbaijani tax identification number (VÖEN).\n *\n * Examples sourced from python-stdnum test suite.\n */\nconst voen: Validator = {\n name: \"Azerbaijani Tax ID\",\n localName: \"Vergi Ödəyicisinin Eyniləşdirmə Nömrəsi\",\n abbreviation: \"VÖEN\",\n aliases: [\"VÖEN\"] as const,\n candidatePattern: \"\\\\d{10}\",\n country: \"AZ\",\n entityType: \"any\",\n lengths: [10] as const,\n examples: [\"1401555071\", \"1400057421\"] as const,\n compact,\n format,\n validate,\n sourceUrl: \"https://www.taxes.gov.az/\",\n generate,\n};\n\nexport default voen;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAsBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;;;;AAKxC,MAAM,WAAW,UAA0B;CACzC,IAAI,SAAS,MAAM,OAAO,IAAI,CAAC,MAAM;AACrC,KAAI,OAAO,WAAW,EACpB,UAAS,MAAM;AAEjB,QAAO;;;;;;AAOT,MAAM,kBAAkB,UAAiC;CACvD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,SAAQ,QAAQ,MAAM,KAAK,OAAO,MAAM,OAAO,EAAE,CAAC;CAEpD,MAAM,SAAS,MAAM;AACrB,QAAO,WAAW,KAAK,OAAO,OAAO,OAAO;;AAG9C,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,qCACD;AAGH,KAAI,CAAC,WAAW,KAAK,EAAE,CACrB,QAAO,IACL,kBACA,4CACD;
|
|
1
|
+
{"version":3,"file":"voen.js","names":[],"sources":["../../src/az/voen.ts"],"sourcesContent":["/**\n * VÖEN (Vergi Ödəyicisinin Eyniləşdirmə Nömrəsi,\n * Azerbaijani tax identification number).\n *\n * 10 digits: TTSSSSSSCD where:\n * - TT = territorial unit code\n * - SSSSSS = serial number\n * - C = check digit (weighted sum mod 11)\n * - D = legal status (1=legal person, 2=natural person)\n *\n * Ported from python-stdnum az.voen module.\n *\n * @see https://www.taxes.gov.az/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/** Weights for check digit computation (positions 0-7). */\nconst WEIGHTS = [4, 1, 8, 6, 2, 7, 5, 3] as const;\n\n/**\n * Compact: strip spaces, prepend '0' if 9 digits.\n */\nconst compact = (value: string): string => {\n let number = clean(value, \" \").trim();\n if (number.length === 9) {\n number = \"0\" + number;\n }\n return number;\n};\n\n/**\n * Calculate the check digit (position 8) using\n * weighted sum of the first 8 digits mod 11.\n */\nconst calcCheckDigit = (value: string): string | null => {\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n sum += (WEIGHTS[i] ?? 0) * Number(value.charAt(i));\n }\n const result = sum % 11;\n return result === 10 ? null : String(result);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Azerbaijani VÖEN must be 10 digits\",\n );\n }\n\n if (!/^\\d{10}$/.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Azerbaijani VÖEN must contain only digits\",\n );\n }\n\n // SAFETY: regex above guarantees length === 10.\n // eslint-disable-next-line no-non-null-assertion\n const lastDigit = v[9]!;\n if (lastDigit !== \"1\" && lastDigit !== \"2\") {\n return err(\n \"INVALID_COMPONENT\",\n \"VÖEN last digit must be 1 or 2\",\n );\n }\n\n const expected = calcCheckDigit(v);\n if (expected === null || v[8] !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"VÖEN 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, 6)} ${v.slice(6, 10)}`;\n};\n\n/** Generate a random valid VOEN. */\nconst generate = (): string => {\n for (let i = 0; i < 100; i++) {\n const payload = randomDigits(8);\n const check = calcCheckDigit(payload);\n if (check === null) continue;\n const status = Math.random() < 0.5 ? \"1\" : \"2\";\n return payload + check + status;\n }\n throw new Error(\"Failed to generate valid VOEN\");\n};\n\n/**\n * Azerbaijani tax identification number (VÖEN).\n *\n * Examples sourced from python-stdnum test suite.\n */\nconst voen: Validator = {\n name: \"Azerbaijani Tax ID\",\n localName: \"Vergi Ödəyicisinin Eyniləşdirmə Nömrəsi\",\n abbreviation: \"VÖEN\",\n aliases: [\"VÖEN\"] as const,\n candidatePattern: \"\\\\d{10}\",\n country: \"AZ\",\n entityType: \"any\",\n lengths: [10] as const,\n examples: [\"1401555071\", \"1400057421\"] as const,\n compact,\n format,\n validate,\n sourceUrl: \"https://www.taxes.gov.az/\",\n generate,\n};\n\nexport default voen;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAsBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;;;;AAKxC,MAAM,WAAW,UAA0B;CACzC,IAAI,SAAS,MAAM,OAAO,IAAI,CAAC,MAAM;AACrC,KAAI,OAAO,WAAW,EACpB,UAAS,MAAM;AAEjB,QAAO;;;;;;AAOT,MAAM,kBAAkB,UAAiC;CACvD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,SAAQ,QAAQ,MAAM,KAAK,OAAO,MAAM,OAAO,EAAE,CAAC;CAEpD,MAAM,SAAS,MAAM;AACrB,QAAO,WAAW,KAAK,OAAO,OAAO,OAAO;;AAG9C,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,qCACD;AAGH,KAAI,CAAC,WAAW,KAAK,EAAE,CACrB,QAAO,IACL,kBACA,4CACD;CAKH,MAAM,YAAY,EAAE;AACpB,KAAI,cAAc,OAAO,cAAc,IACrC,QAAO,IACL,qBACA,iCACD;CAGH,MAAM,WAAW,eAAe,EAAE;AAClC,KAAI,aAAa,QAAQ,EAAE,OAAO,SAChC,QAAO,IACL,oBACA,kCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;;;AAI5D,MAAM,iBAAyB;AAC7B,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;EAC5B,MAAM,UAAU,aAAa,EAAE;EAC/B,MAAM,QAAQ,eAAe,QAAQ;AACrC,MAAI,UAAU,KAAM;EACpB,MAAM,SAAS,KAAK,QAAQ,GAAG,KAAM,MAAM;AAC3C,SAAO,UAAU,QAAQ;;AAE3B,OAAM,IAAI,MAAM,gCAAgC;;;;;;;AAQlD,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO;CACjB,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,cAAc,aAAa;CACtC;CACA;CACA;CACA,WAAW;CACX;CACD"}
|
package/dist/ba/jmbg.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ParsedPersonId, ValidateResult, Validator } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ba/jmbg.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;
|
|
@@ -9,7 +8,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
9
8
|
/** Generate a random valid JMBG. */
|
|
10
9
|
declare const generate: () => string;
|
|
11
10
|
/** Bosnian Unique Master Citizen Number. */
|
|
12
|
-
declare const jmbg: Validator
|
|
11
|
+
declare const jmbg: Validator<ParsedPersonId>;
|
|
13
12
|
//#endregion
|
|
14
13
|
export { compact, jmbg as default, format, generate, parse, validate };
|
|
15
14
|
//# sourceMappingURL=jmbg.d.ts.map
|
package/dist/ba/jmbg.js
CHANGED
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\nimport type {\n ParsedPersonId,\n ValidateResult,\n Validator,\n} from \"../types\";\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: Validator = {\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 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 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;CAClC;AAED,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,eAAe,QACnB,MAAM,MAAM,MAAM,MAAO,MAAM;AAEjC,MAAM,kBAAkB,MAAsB;AAE5C,SAAS,KADK,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,GAAG,IAC/B,KAAM;;AAG/B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,iCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,gCACD;CAGH,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;AAEhC,KAAI,CAAC,YADQ,YAAY,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,EACxB,IAAI,GAAG,CAC5B,QAAO,IACL,qBACA,gCACD;AAGH,KAAI,eAAe,EAAE,KAAK,OAAO,EAAE,IAAI,CACrC,QAAO,IACL,oBACA,kCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;AAExD,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,MAAM;AAC9B,KAAI,CAAC,OAAO,MAAO,QAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,OAAO,YAAY,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;CAE/C,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;AAErC,QAAO;EACL,WAAW,IAAI,KAAK,MAAM,KAAK,GAAG,GAAG;EACrC,QAAQ,SAAS,MAAM,SAAS;EACjC;;;AAIH,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,KAAK,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACpD,MAAM,KAAK,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACpD,MAAM,MAAM,OAAO,UAAU,KAAK,IAAI,CAAC;EACvC,MAAM,KAAK,OAAO,UAAU,IAAI,GAAG,CAAC;EACpC,MAAM,MAAM,OAAO,UAAU,GAAG,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI;EACtD,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK;EACrC,MAAM,QAAQ,eAAe,QAAQ;EACrC,MAAM,IAAI,UAAU,OAAO,MAAM;AACjC,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,
|
|
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\nimport type {\n ParsedPersonId,\n ValidateResult,\n Validator,\n} from \"../types\";\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: Validator<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 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;CAClC;AAED,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,eAAe,QACnB,MAAM,MAAM,MAAM,MAAO,MAAM;AAEjC,MAAM,kBAAkB,MAAsB;AAE5C,SAAS,KADK,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,GAAG,IAC/B,KAAM;;AAG/B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,iCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,gCACD;CAGH,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;AAEhC,KAAI,CAAC,YADQ,YAAY,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,EACxB,IAAI,GAAG,CAC5B,QAAO,IACL,qBACA,gCACD;AAGH,KAAI,eAAe,EAAE,KAAK,OAAO,EAAE,IAAI,CACrC,QAAO,IACL,oBACA,kCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;AAExD,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,MAAM;AAC9B,KAAI,CAAC,OAAO,MAAO,QAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,OAAO,YAAY,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;CAE/C,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;AAErC,QAAO;EACL,WAAW,IAAI,KAAK,MAAM,KAAK,GAAG,GAAG;EACrC,QAAQ,SAAS,MAAM,SAAS;EACjC;;;AAIH,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,KAAK,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACpD,MAAM,KAAK,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACpD,MAAM,MAAM,OAAO,UAAU,KAAK,IAAI,CAAC;EACvC,MAAM,KAAK,OAAO,UAAU,IAAI,GAAG,CAAC;EACpC,MAAM,MAAM,OAAO,UAAU,GAAG,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI;EACtD,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK;EACrC,MAAM,QAAQ,eAAe,QAAQ;EACrC,MAAM,IAAI,UAAU,OAAO,MAAM;AACjC,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,OAAkC;CACtC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,eAAe;CACjC,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG;CACb,WACE;CACF,UAAU,CAAC,gBAAgB;CAC3B;CACA;CACA;CACA;CACA;CACD"}
|
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.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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
|
|
@@ -24,18 +24,17 @@ import { isdigits } from "../_util/strings.js";
|
|
|
24
24
|
* @see https://en.wikipedia.org/wiki/National_identity_card_(Bangladesh)
|
|
25
25
|
* @see https://www.nidw.gov.bd/
|
|
26
26
|
*/
|
|
27
|
+
const RMO_VALUES = [
|
|
28
|
+
"1",
|
|
29
|
+
"2",
|
|
30
|
+
"3",
|
|
31
|
+
"4",
|
|
32
|
+
"5",
|
|
33
|
+
"9"
|
|
34
|
+
];
|
|
27
35
|
/** Generate a random valid Bangladesh NID (13-digit). */
|
|
28
36
|
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)}`;
|
|
37
|
+
return `${randomDigits(2)}${randomPick(RMO_VALUES)}${randomDigits(10)}`;
|
|
39
38
|
};
|
|
40
39
|
/**
|
|
41
40
|
* Valid RMO (residential/municipal/other) codes.
|
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 { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\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: Validator = {\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 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;CAAI;;AAGjD,MAAM,iBAAyB;AAI7B,QAAO,GAHU,aAAa,EAAE,GACpB,WAAW,WAAW,GACrB,aAAa,GAAG;;;;;;;AAsC/B,MAAM,YAAY,IAAI,IAAI;CAAC;CAAK;CAAK;CAAK;CAAK;CAAK;CAAI,CAAC;AAEzD,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;;;;;AAMpB,MAAM,gBACJ,SAC0B;CAG1B,MAAM,MAAM,KAAK;AACjB,KAAI,QAAQ,KAAA,KAAa,CAAC,UAAU,IAAI,IAAI,CAC1C,QAAO,IACL,qBACA,6CACD;AAEH,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KACE,EAAE,WAAW,MACb,EAAE,WAAW,MACb,EAAE,WAAW,GAEb,QAAO,IACL,kBACA,mCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;AAEH,KAAI,EAAE,WAAW,IAAI;AAEnB,MAAI,EAAE,OAAO,IACX,QAAO,IACL,qBACA,8CACD;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;CAIpC,MAAM,UAAU,aADH,EAAE,WAAW,KAAK,EAAE,MAAM,EAAE,GAAG,EACV;AAClC,KAAI,YAAY,KACd,QAAO;AAET,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS;EAAC;EAAI;EAAI;EAAG;CACrB,UAAU;EACR;EACA;EACA;EACA;EACD;CACD,aACE;CAEF,WAAW;CACX;CACA;CACA;CACA;CACD"}
|
package/dist/be/bis.d.ts
CHANGED
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
package/dist/be/vat.d.ts
CHANGED
package/dist/bg/egn.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ParsedPersonId, ValidateResult, Validator } 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: Validator
|
|
15
|
+
declare const egn: Validator<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
|
@@ -12,8 +12,14 @@ import { isValidDate } from "../_util/date.js";
|
|
|
12
12
|
* 10 digits encoding date of birth, serial number,
|
|
13
13
|
* and a check digit.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* Canonical source:
|
|
16
|
+
* - GRAO regulation PDF describing the EGN structure.
|
|
17
|
+
*
|
|
18
|
+
* We treat this as authoritative over third-party
|
|
19
|
+
* oracle libraries when the checksum or date rules
|
|
20
|
+
* disagree.
|
|
21
|
+
*
|
|
22
|
+
* @see https://www.grao.bg/normact/NaredbaFunkcESGR.pdf
|
|
17
23
|
*/
|
|
18
24
|
const WEIGHTS = [
|
|
19
25
|
2,
|
|
@@ -109,10 +115,11 @@ const egn = {
|
|
|
109
115
|
candidatePattern: "\\d{10}",
|
|
110
116
|
country: "BG",
|
|
111
117
|
entityType: "person",
|
|
112
|
-
sourceUrl: "https://www.grao.bg/",
|
|
118
|
+
sourceUrl: "https://www.grao.bg/normact/NaredbaFunkcESGR.pdf",
|
|
113
119
|
examples: ["7523169263"],
|
|
114
120
|
compact,
|
|
115
121
|
format,
|
|
122
|
+
parse,
|
|
116
123
|
validate,
|
|
117
124
|
generate
|
|
118
125
|
};
|
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 { 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\nimport type {\n ParsedPersonId,\n ValidateResult,\n Validator,\n} from \"../types\";\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: Validator<ParsedPersonId> = {\n name: \"Bulgarian Personal ID\",\n localName: \"Единен граждански номер\",\n abbreviation: \"ЕГН\",\n aliases: [\n \"ЕГН\",\n \"единен граждански номер\",\n \"EGN\",\n ] as const,\n candidatePattern: \"\\\\d{10}\",\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;CAAE;AAE5C,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,gCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;CAGH,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAEhC,IAAI;CACJ,IAAI;AACJ,KAAI,KAAK,IAAI;AACX,SAAO,MAAO;AACd,UAAQ,KAAK;YACJ,KAAK,IAAI;AAClB,SAAO,OAAO;AACd,UAAQ,KAAK;QACR;AACL,SAAO,OAAO;AACd,UAAQ;;AAGV,KAAI,CAAC,YAAY,MAAM,OAAO,GAAG,CAC/B,QAAO,IACL,qBACA,+BACD;AAKH,KAFY,YAAY,EAAE,MAAM,GAAG,EAAE,EAAE,SAAS,GAAG,GAC/B,OACN,OAAO,EAAE,GAAG,CACxB,QAAO,IACL,oBACA,iCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;;;;AAMxD,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,MAAM;AAC9B,KAAI,CAAC,OAAO,MAAO,QAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAEpC,IAAI;CACJ,IAAI;AACJ,KAAI,KAAK,IAAI;AACX,SAAO,MAAO;AACd,UAAQ,KAAK;YACJ,KAAK,IAAI;AAClB,SAAO,OAAO;AACd,UAAQ,KAAK;QACR;AACL,SAAO,OAAO;AACd,UAAQ;;AAGV,QAAO;EACL,WAAW,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;EACxC,QAAQ,SAAS,MAAM,IAAI,SAAS;EACrC;;;AAIH,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,KAAK,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACpD,MAAM,KAAK,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACpD,MAAM,KAAK,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACpD,MAAM,SAAS,OAAO,UAAU,GAAG,IAAI,CAAC,CAAC,SACvC,GACA,IACD;EACD,MAAM,UAAU,KAAK,KAAK,KAAK;EAC/B,MAAM,MAAM,YAAY,SAAS,SAAS,GAAG;EAC7C,MAAM,IAAI,UAAU,OAAO,MAAM,GAAG;AACpC,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,MAAiC;CACrC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;CACA;CACD"}
|
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
package/dist/bg/vat.d.ts
CHANGED
package/dist/bh/cpr.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ValidateResult, Validator } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/bh/cpr.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;
|
|
7
|
+
/** Generate a random structurally valid Bahrain CPR. */
|
|
8
|
+
declare const generate: () => string;
|
|
8
9
|
/** Bahrain Central Population Registration number. */
|
|
9
10
|
declare const cpr: Validator;
|
|
10
11
|
//#endregion
|
|
11
|
-
export { compact, cpr as default, format, validate };
|
|
12
|
+
export { compact, cpr as default, format, generate, validate };
|
|
12
13
|
//# sourceMappingURL=cpr.d.ts.map
|
package/dist/bh/cpr.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
2
3
|
import { err } from "../_util/result.js";
|
|
3
4
|
import { isdigits } from "../_util/strings.js";
|
|
4
5
|
//#region src/bh/cpr.ts
|
|
@@ -35,6 +36,10 @@ const format = (value) => {
|
|
|
35
36
|
const v = compact(value);
|
|
36
37
|
return `${v.slice(0, 2)}-${v.slice(2, 4)}-${v.slice(4)}`;
|
|
37
38
|
};
|
|
39
|
+
/** Generate a random structurally valid Bahrain CPR. */
|
|
40
|
+
const generate = () => {
|
|
41
|
+
return `${String(randomInt(0, 99)).padStart(2, "0")}${String(randomInt(1, 12)).padStart(2, "0")}${randomDigits(5)}`;
|
|
42
|
+
};
|
|
38
43
|
/** Bahrain Central Population Registration number. */
|
|
39
44
|
const cpr = {
|
|
40
45
|
name: "Central Population Registration Number",
|
|
@@ -50,9 +55,10 @@ const cpr = {
|
|
|
50
55
|
sourceUrl: "https://www.bahrain.bh/wps/portal/IDInfo_en",
|
|
51
56
|
compact,
|
|
52
57
|
format,
|
|
53
|
-
validate
|
|
58
|
+
validate,
|
|
59
|
+
generate
|
|
54
60
|
};
|
|
55
61
|
//#endregion
|
|
56
|
-
export { compact, cpr as default, format, validate };
|
|
62
|
+
export { compact, cpr as default, format, generate, validate };
|
|
57
63
|
|
|
58
64
|
//# sourceMappingURL=cpr.js.map
|
package/dist/bh/cpr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpr.js","names":[],"sources":["../../src/bh/cpr.ts"],"sourcesContent":["/**\n * CPR (Central Population Registration number, Bahrain).\n *\n * 9-digit personal identification number:\n * YYMM = year and month of birth\n * NNNN = serial number\n * C = check digit\n *\n * The check digit algorithm is not publicly\n * documented; validation is structural only\n * (length, digits, and valid birth month).\n *\n * Note: a minority of older CPR numbers do not\n * follow the YYMMNNNNC format.\n *\n * @see https://www.bahrain.bh/wps/portal/IDInfo_en\n */\n\nimport { clean } from \"#util/clean\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Bahrain CPR must be 9 digits\",\n );\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Bahrain CPR must contain only digits\",\n );\n }\n\n // Validate birth month (digits 3-4) is 01-12\n const mm = Number(v.slice(2, 4));\n if (mm < 1 || mm > 12) {\n return err(\n \"INVALID_COMPONENT\",\n \"CPR birth month must be 01-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)}`;\n};\n\n/** Bahrain Central Population Registration number. */\nconst cpr: Validator = {\n name: \"Central Population Registration Number\",\n localName: \"الرقم السكاني\",\n abbreviation: \"CPR\",\n aliases: [\"CPR\", \"الرقم السكاني\"] as const,\n candidatePattern: \"\\\\d{9}\",\n country: \"BH\",\n entityType: \"person\",\n lengths: [9] as const,\n examples: [\"890112345\", \"000612345\"] as const,\n description: \"9-digit personal identification number\",\n sourceUrl: \"https://www.bahrain.bh/wps/portal/IDInfo_en\",\n compact,\n format,\n validate,\n};\n\nexport default cpr;\nexport { compact, format, validate };\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"cpr.js","names":[],"sources":["../../src/bh/cpr.ts"],"sourcesContent":["/**\n * CPR (Central Population Registration number, Bahrain).\n *\n * 9-digit personal identification number:\n * YYMM = year and month of birth\n * NNNN = serial number\n * C = check digit\n *\n * The check digit algorithm is not publicly\n * documented; validation is structural only\n * (length, digits, and valid birth month).\n *\n * Note: a minority of older CPR numbers do not\n * follow the YYMMNNNNC format.\n *\n * @see https://www.bahrain.bh/wps/portal/IDInfo_en\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Bahrain CPR must be 9 digits\",\n );\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Bahrain CPR must contain only digits\",\n );\n }\n\n // Validate birth month (digits 3-4) is 01-12\n const mm = Number(v.slice(2, 4));\n if (mm < 1 || mm > 12) {\n return err(\n \"INVALID_COMPONENT\",\n \"CPR birth month must be 01-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)}`;\n};\n\n/** Generate a random structurally valid Bahrain CPR. */\nconst generate = (): string => {\n const yy = String(randomInt(0, 99)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n return `${yy}${mm}${randomDigits(5)}`;\n};\n\n/** Bahrain Central Population Registration number. */\nconst cpr: Validator = {\n name: \"Central Population Registration Number\",\n localName: \"الرقم السكاني\",\n abbreviation: \"CPR\",\n aliases: [\"CPR\", \"الرقم السكاني\"] as const,\n candidatePattern: \"\\\\d{9}\",\n country: \"BH\",\n entityType: \"person\",\n lengths: [9] as const,\n examples: [\"890112345\", \"000612345\"] as const,\n description: \"9-digit personal identification number\",\n sourceUrl: \"https://www.bahrain.bh/wps/portal/IDInfo_en\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default cpr;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,+BACD;AAGH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,uCACD;CAIH,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;AAChC,KAAI,KAAK,KAAK,KAAK,GACjB,QAAO,IACL,qBACA,gCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE;;;AAIxD,MAAM,iBAAyB;AAG7B,QAAO,GAFI,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI,GACzC,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI,GAChC,aAAa,EAAE;;;AAIrC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,gBAAgB;CACjC,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,aAAa,YAAY;CACpC,aAAa;CACb,WAAW;CACX;CACA;CACA;CACA;CACD"}
|
package/dist/bh/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import cpr from "./cpr.js";
|
|
3
2
|
|
|
4
3
|
//#region src/bh/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { cpr };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { cpr, mod_d_exports };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/bic.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { clean } from "./_util/clean.js";
|
|
2
|
-
import { randomInt } from "./_util/generate.js";
|
|
2
|
+
import { randomChar, randomInt, randomPick } from "./_util/generate.js";
|
|
3
3
|
import { err } from "./_util/result.js";
|
|
4
4
|
//#region src/bic.ts
|
|
5
5
|
/**
|
|
@@ -13,23 +13,21 @@ import { err } from "./_util/result.js";
|
|
|
13
13
|
*
|
|
14
14
|
* @see https://www.swift.com/
|
|
15
15
|
*/
|
|
16
|
+
const BIC_ALPHANUM = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
17
|
+
const BIC_COUNTRIES = [
|
|
18
|
+
"DE",
|
|
19
|
+
"GB",
|
|
20
|
+
"US",
|
|
21
|
+
"FR",
|
|
22
|
+
"CH",
|
|
23
|
+
"NL",
|
|
24
|
+
"AT"
|
|
25
|
+
];
|
|
16
26
|
/** Generate a random valid BIC (8-character). */
|
|
17
27
|
const generate = () => {
|
|
18
28
|
const randomLetter = () => String.fromCodePoint(65 + randomInt(0, 25));
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
const countries = [
|
|
23
|
-
"DE",
|
|
24
|
-
"GB",
|
|
25
|
-
"US",
|
|
26
|
-
"FR",
|
|
27
|
-
"CH",
|
|
28
|
-
"NL",
|
|
29
|
-
"AT"
|
|
30
|
-
];
|
|
31
|
-
const country = countries[randomInt(0, countries.length - 1)];
|
|
32
|
-
return `${randomLetter() + randomLetter() + randomLetter() + randomLetter()}${country}${randomAlphaNum() + randomAlphaNum()}`;
|
|
29
|
+
const country = randomPick(BIC_COUNTRIES);
|
|
30
|
+
return `${randomLetter() + randomLetter() + randomLetter() + randomLetter()}${country}${randomChar(BIC_ALPHANUM) + randomChar(BIC_ALPHANUM)}`;
|
|
33
31
|
};
|
|
34
32
|
const BIC_RE = /^[A-Z]{4}[A-Z]{2}[0-9A-Z]{2}([0-9A-Z]{3})?$/;
|
|
35
33
|
const compact = (value) => clean(value, " -").toUpperCase();
|
package/dist/bic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bic.js","names":[],"sources":["../src/bic.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"bic.js","names":[],"sources":["../src/bic.ts"],"sourcesContent":["const BIC_ALPHANUM = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\nconst BIC_COUNTRIES = [\n \"DE\",\n \"GB\",\n \"US\",\n \"FR\",\n \"CH\",\n \"NL\",\n \"AT\",\n] as const;\n\n/** Generate a random valid BIC (8-character). */\nconst generate = (): string => {\n const randomLetter = (): string =>\n String.fromCodePoint(65 + randomInt(0, 25));\n const country = randomPick(BIC_COUNTRIES);\n const bank =\n randomLetter() +\n randomLetter() +\n randomLetter() +\n randomLetter();\n const location =\n randomChar(BIC_ALPHANUM) + randomChar(BIC_ALPHANUM);\n return `${bank}${country}${location}`;\n};\n\n/**\n * BIC (Business Identifier Code).\n *\n * ISO 9362. 8 or 11 character code identifying\n * financial institutions. Format:\n * [A-Z]{4} (institution) + [A-Z]{2} (country) +\n * [0-9A-Z]{2} (location) + [0-9A-Z]{3} (branch,\n * optional).\n *\n * @see https://www.swift.com/\n */\n\nimport { clean } from \"#util/clean\";\nimport {\n randomChar,\n randomInt,\n randomPick,\n} from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nimport type { ValidateResult, Validator } from \"./types\";\n\nconst BIC_RE =\n /^[A-Z]{4}[A-Z]{2}[0-9A-Z]{2}([0-9A-Z]{3})?$/;\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8 && v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"BIC must be 8 or 11 characters\",\n );\n }\n if (!BIC_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"BIC must be 8 or 11 alphanumeric characters\",\n );\n }\n // Country code at positions 4-5 is already\n // validated as [A-Z]{2} by the regex above.\n // SWIFT accepts all ISO 3166-1 alpha-2 codes\n // plus XK (Kosovo); we don't restrict further.\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 11) {\n return `${v.slice(0, 4)} ${v.slice(4, 6)} ${v.slice(6, 8)} ${v.slice(8)}`;\n }\n return `${v.slice(0, 4)} ${v.slice(4, 6)} ${v.slice(6)}`;\n};\n\n/** Business Identifier Code (SWIFT/BIC). */\nconst bic: Validator = {\n name: \"Business Identifier Code\",\n localName: \"Business Identifier Code\",\n abbreviation: \"BIC\",\n aliases: [\"BIC\", \"SWIFT\", \"BIC/SWIFT\"] as const,\n candidatePattern: \"[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?\",\n entityType: \"company\",\n sourceUrl: \"https://www.swift.com/\",\n examples: [\"DEUTDEFF\", \"DEUTDEFF500\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default bic;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAAA,MAAM,eAAe;AACrB,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;AAGD,MAAM,iBAAyB;CAC7B,MAAM,qBACJ,OAAO,cAAc,KAAK,UAAU,GAAG,GAAG,CAAC;CAC7C,MAAM,UAAU,WAAW,cAAc;AAQzC,QAAO,GANL,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GAGC,UADf,WAAW,aAAa,GAAG,WAAW,aAAa;;AA0BvD,MAAM,SACJ;AAEF,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,aAAa;AAElC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,GACjC,QAAO,IACL,kBACA,iCACD;AAEH,KAAI,CAAC,OAAO,KAAK,EAAE,CACjB,QAAO,IACL,kBACA,8CACD;AAMH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE;AAEzE,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE;;;AAIxD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EAAC;EAAO;EAAS;EAAY;CACtC,kBAAkB;CAClB,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY,cAAc;CACrC;CACA;CACA;CACA;CACD"}
|
package/dist/br/cnpj.d.ts
CHANGED
package/dist/br/cpf.d.ts
CHANGED
package/dist/br/mod.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import cnpj from "./cnpj.js";
|
|
3
2
|
import cpf from "./cpf.js";
|
|
4
3
|
|
|
5
4
|
//#region src/br/mod.d.ts
|
|
6
|
-
|
|
5
|
+
declare namespace mod_d_exports {
|
|
6
|
+
export { cnpj, cpf };
|
|
7
|
+
}
|
|
7
8
|
//#endregion
|
|
8
9
|
export { cnpj, cpf, mod_d_exports };
|
|
9
10
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/by/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import unp from "./unp.js";
|
|
3
2
|
|
|
4
3
|
//#region src/by/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { unp };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, unp };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/by/unp.d.ts
CHANGED
package/dist/by/unp.js
CHANGED
|
@@ -50,16 +50,19 @@ const compact = (value) => {
|
|
|
50
50
|
const calcCheckDigit = (number) => {
|
|
51
51
|
let work = number;
|
|
52
52
|
if (!isdigits(number)) {
|
|
53
|
-
const
|
|
53
|
+
const second = number[1];
|
|
54
|
+
if (second === void 0) return null;
|
|
55
|
+
const idx = ALPHA_SET.indexOf(second);
|
|
54
56
|
if (idx === -1) return null;
|
|
55
57
|
work = number[0] + String(idx) + number.slice(2);
|
|
56
58
|
}
|
|
57
59
|
let sum = 0;
|
|
58
|
-
for (
|
|
60
|
+
for (const [i, weight] of WEIGHTS.entries()) {
|
|
59
61
|
const ch = work[i];
|
|
62
|
+
if (ch === void 0) return null;
|
|
60
63
|
const val = ALPHABET.indexOf(ch);
|
|
61
64
|
if (val === -1) return null;
|
|
62
|
-
sum +=
|
|
65
|
+
sum += weight * val;
|
|
63
66
|
}
|
|
64
67
|
const remainder = sum % 11;
|
|
65
68
|
if (remainder > 9) return null;
|
package/dist/by/unp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unp.js","names":[],"sources":["../../src/by/unp.ts"],"sourcesContent":["/**\n * UNP (Учётный номер плательщика, Belarus tax number).\n *\n * 9 characters: the first two identify the region (numeric\n * for organisations, letters from ABCEHKMOPT for\n * individuals), followed by 7 digits. The last digit is a\n * weighted check digit (mod 11; if remainder > 9 the\n * number is invalid).\n *\n * @see https://be.wikipedia.org/wiki/Уліковы_нумар_плацельшчыка\n * @see https://www.nalog.gov.by/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/** Cyrillic to Latin mapping for the letter positions. */\nconst CYRILLIC_TO_LATIN: Record<string, string> = {\n А: \"A\",\n В: \"B\",\n Е: \"E\",\n К: \"K\",\n М: \"M\",\n Н: \"H\",\n О: \"O\",\n Р: \"P\",\n С: \"C\",\n Т: \"T\",\n};\n\nconst WEIGHTS = [29, 23, 19, 17, 13, 7, 5, 3] as const;\nconst ALPHA_SET = \"ABCEHKMOPT\";\nconst VALID_FIRST = \"1234567ABCEHKM\";\nconst ALPHABET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" \").toUpperCase().trim();\n if (v.startsWith(\"УНП\")) {\n v = v.slice(3);\n } else if (v.startsWith(\"UNP\")) {\n v = v.slice(3);\n }\n return [...v]\n .map((ch) => CYRILLIC_TO_LATIN[ch] ?? ch)\n .join(\"\");\n};\n\nconst calcCheckDigit = (number: string): number | null => {\n let work = number;\n if (!isdigits(number)) {\n const idx = ALPHA_SET.indexOf(
|
|
1
|
+
{"version":3,"file":"unp.js","names":[],"sources":["../../src/by/unp.ts"],"sourcesContent":["/**\n * UNP (Учётный номер плательщика, Belarus tax number).\n *\n * 9 characters: the first two identify the region (numeric\n * for organisations, letters from ABCEHKMOPT for\n * individuals), followed by 7 digits. The last digit is a\n * weighted check digit (mod 11; if remainder > 9 the\n * number is invalid).\n *\n * @see https://be.wikipedia.org/wiki/Уліковы_нумар_плацельшчыка\n * @see https://www.nalog.gov.by/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/** Cyrillic to Latin mapping for the letter positions. */\nconst CYRILLIC_TO_LATIN: Record<string, string> = {\n А: \"A\",\n В: \"B\",\n Е: \"E\",\n К: \"K\",\n М: \"M\",\n Н: \"H\",\n О: \"O\",\n Р: \"P\",\n С: \"C\",\n Т: \"T\",\n};\n\nconst WEIGHTS = [29, 23, 19, 17, 13, 7, 5, 3] as const;\nconst ALPHA_SET = \"ABCEHKMOPT\";\nconst VALID_FIRST = \"1234567ABCEHKM\";\nconst ALPHABET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" \").toUpperCase().trim();\n if (v.startsWith(\"УНП\")) {\n v = v.slice(3);\n } else if (v.startsWith(\"UNP\")) {\n v = v.slice(3);\n }\n return [...v]\n .map((ch) => CYRILLIC_TO_LATIN[ch] ?? ch)\n .join(\"\");\n};\n\nconst calcCheckDigit = (number: string): number | null => {\n let work = number;\n if (!isdigits(number)) {\n const second = number[1];\n if (second === undefined) return null;\n const idx = ALPHA_SET.indexOf(second);\n if (idx === -1) return null;\n work = number[0] + String(idx) + number.slice(2);\n }\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n const ch = work[i];\n if (ch === undefined) return null;\n const val = ALPHABET.indexOf(ch);\n if (val === -1) return null;\n sum += weight * val;\n }\n const remainder = sum % 11;\n if (remainder > 9) return null;\n return remainder;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Belarus UNP must be 9 characters\",\n );\n }\n if (!isdigits(v.slice(2))) {\n return err(\n \"INVALID_FORMAT\",\n \"Belarus UNP positions 3-9 must be digits\",\n );\n }\n const first2 = v.slice(0, 2);\n if (\n !isdigits(first2) &&\n ![...first2].every((ch) => ALPHA_SET.includes(ch))\n ) {\n return err(\n \"INVALID_FORMAT\",\n \"Belarus UNP first two characters must be\" +\n \" digits or letters from ABCEHKMOPT\",\n );\n }\n // SAFETY: v.length === 9 guarantees v[0] exists.\n // eslint-disable-next-line no-non-null-assertion\n if (!VALID_FIRST.includes(v[0]!)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Belarus UNP has an invalid region prefix\",\n );\n }\n const expected = calcCheckDigit(v);\n if (expected === null) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Belarus UNP check digit is invalid\" +\n \" (mod 11 remainder > 9)\",\n );\n }\n if (v[8] !== String(expected)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Belarus UNP check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Belarus UNP. */\nconst generate = (): string => {\n for (let i = 0; i < 100; i++) {\n const prefix = String(randomInt(1, 7));\n const rest = randomDigits(7);\n const payload = prefix + rest;\n const check = calcCheckDigit(payload);\n if (check === null) continue;\n const c = payload.slice(0, 8) + String(check);\n if (validate(c).valid) return c;\n }\n throw new Error(\"Failed to generate valid UNP\");\n};\n\n/** Belarus UNP (Учётный номер плательщика). */\nconst unp: Validator = {\n name: \"Belarus Tax Number\",\n localName: \"Учётный номер плательщика\",\n abbreviation: \"УНП\",\n aliases: [\"УНП\", \"UNP\"] as const,\n candidatePattern: \"\\\\d{9}\",\n country: \"BY\",\n entityType: \"any\",\n sourceUrl: \"https://www.nalog.gov.by/\",\n examples: [\"200988541\", \"MA1953684\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default unp;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAqBA,MAAM,oBAA4C;CAChD,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ;AAED,MAAM,UAAU;CAAC;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAE;AAC7C,MAAM,YAAY;AAClB,MAAM,cAAc;AACpB,MAAM,WAAW;AAEjB,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM;AAC9C,KAAI,EAAE,WAAW,MAAM,CACrB,KAAI,EAAE,MAAM,EAAE;UACL,EAAE,WAAW,MAAM,CAC5B,KAAI,EAAE,MAAM,EAAE;AAEhB,QAAO,CAAC,GAAG,EAAE,CACV,KAAK,OAAO,kBAAkB,OAAO,GAAG,CACxC,KAAK,GAAG;;AAGb,MAAM,kBAAkB,WAAkC;CACxD,IAAI,OAAO;AACX,KAAI,CAAC,SAAS,OAAO,EAAE;EACrB,MAAM,SAAS,OAAO;AACtB,MAAI,WAAW,KAAA,EAAW,QAAO;EACjC,MAAM,MAAM,UAAU,QAAQ,OAAO;AACrC,MAAI,QAAQ,GAAI,QAAO;AACvB,SAAO,OAAO,KAAK,OAAO,IAAI,GAAG,OAAO,MAAM,EAAE;;CAElD,IAAI,MAAM;AACV,MAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,SAAS,EAAE;EAC3C,MAAM,KAAK,KAAK;AAChB,MAAI,OAAO,KAAA,EAAW,QAAO;EAC7B,MAAM,MAAM,SAAS,QAAQ,GAAG;AAChC,MAAI,QAAQ,GAAI,QAAO;AACvB,SAAO,SAAS;;CAElB,MAAM,YAAY,MAAM;AACxB,KAAI,YAAY,EAAG,QAAO;AAC1B,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,mCACD;AAEH,KAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CACvB,QAAO,IACL,kBACA,2CACD;CAEH,MAAM,SAAS,EAAE,MAAM,GAAG,EAAE;AAC5B,KACE,CAAC,SAAS,OAAO,IACjB,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,OAAO,UAAU,SAAS,GAAG,CAAC,CAElD,QAAO,IACL,kBACA,6EAED;AAIH,KAAI,CAAC,YAAY,SAAS,EAAE,GAAI,CAC9B,QAAO,IACL,qBACA,2CACD;CAEH,MAAM,WAAW,eAAe,EAAE;AAClC,KAAI,aAAa,KACf,QAAO,IACL,oBACA,4DAED;AAEH,KAAI,EAAE,OAAO,OAAO,SAAS,CAC3B,QAAO,IACL,oBACA,mCACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;AAC7B,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;EAG5B,MAAM,UAFS,OAAO,UAAU,GAAG,EAAE,CAAC,GACzB,aAAa,EAAE;EAE5B,MAAM,QAAQ,eAAe,QAAQ;AACrC,MAAI,UAAU,KAAM;EACpB,MAAM,IAAI,QAAQ,MAAM,GAAG,EAAE,GAAG,OAAO,MAAM;AAC7C,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;AAEhC,OAAM,IAAI,MAAM,+BAA+B;;;AAIjD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,MAAM;CACvB,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa,YAAY;CACpC;CACA;CACA;CACA;CACD"}
|
package/dist/bz/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import tin from "./tin.js";
|
|
3
2
|
|
|
4
3
|
//#region src/bz/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { tin };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, tin };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|