@stll/stdnum 1.0.0 → 2.0.1
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/README.md +1 -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.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.js.map +1 -1
- package/dist/_util/result.js.map +1 -1
- package/dist/_util/strings.js.map +1 -1
- package/dist/ad/nrt.d.ts +16 -2
- package/dist/ad/nrt.js +1 -14
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +2 -2
- package/dist/ae/eid.js +2 -12
- package/dist/ae/eid.js.map +1 -1
- 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/nipt.d.ts +13 -2
- package/dist/al/nipt.js +1 -11
- package/dist/al/nipt.js.map +1 -1
- 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 -2
- package/dist/ar/cbu.js +1 -9
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +2 -2
- package/dist/ar/cuit.js +1 -17
- 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/at/businessid.d.ts +10 -2
- package/dist/at/businessid.js +1 -8
- package/dist/at/businessid.js.map +1 -1
- package/dist/at/tin.d.ts +2 -2
- package/dist/at/tin.js +1 -11
- package/dist/at/tin.js.map +1 -1
- package/dist/at/uid.d.ts +2 -2
- package/dist/at/uid.js +2 -10
- package/dist/at/uid.js.map +1 -1
- package/dist/at/vnr.d.ts +2 -2
- package/dist/at/vnr.js +4 -14
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +2 -2
- package/dist/au/abn.js +1 -10
- package/dist/au/abn.js.map +1 -1
- package/dist/au/acn.d.ts +2 -2
- package/dist/au/acn.js +1 -10
- package/dist/au/acn.js.map +1 -1
- package/dist/au/tfn.d.ts +2 -2
- package/dist/au/tfn.js +1 -10
- package/dist/au/tfn.js.map +1 -1
- package/dist/az/voen.d.ts +2 -2
- package/dist/az/voen.js +1 -14
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +2 -2
- package/dist/ba/jmbg.js +3 -11
- package/dist/ba/jmbg.js.map +1 -1
- package/dist/bd/nid.d.ts +23 -2
- package/dist/bd/nid.js +1 -21
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +2 -2
- package/dist/be/bis.js +1 -11
- package/dist/be/bis.js.map +1 -1
- package/dist/be/nn.d.ts +2 -2
- package/dist/be/nn.js +1 -11
- package/dist/be/nn.js.map +1 -1
- package/dist/be/vat.d.ts +2 -2
- package/dist/be/vat.js +1 -9
- package/dist/be/vat.js.map +1 -1
- package/dist/bg/egn.d.ts +2 -2
- package/dist/bg/egn.js +3 -18
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/pnf.d.ts +2 -2
- package/dist/bg/pnf.js +1 -8
- package/dist/bg/pnf.js.map +1 -1
- package/dist/bg/vat.d.ts +2 -2
- package/dist/bg/vat.js +3 -9
- package/dist/bg/vat.js.map +1 -1
- package/dist/bh/cpr.d.ts +2 -2
- package/dist/bh/cpr.js +1 -17
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bic.d.ts +13 -2
- package/dist/bic.js +1 -11
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +2 -2
- package/dist/br/cnpj.js +1 -20
- package/dist/br/cnpj.js.map +1 -1
- package/dist/br/cpf.d.ts +2 -2
- package/dist/br/cpf.js +1 -14
- package/dist/br/cpf.js.map +1 -1
- package/dist/by/unp.d.ts +2 -2
- package/dist/by/unp.js +3 -14
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/tin.d.ts +2 -2
- package/dist/bz/tin.js +1 -26
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +2 -2
- package/dist/ca/bn.js +2 -10
- package/dist/ca/bn.js.map +1 -1
- package/dist/ca/sin.d.ts +2 -2
- package/dist/ca/sin.js +2 -10
- package/dist/ca/sin.js.map +1 -1
- package/dist/ch/ssn.d.ts +2 -2
- package/dist/ch/ssn.js +1 -9
- package/dist/ch/ssn.js.map +1 -1
- package/dist/ch/uid.d.ts +2 -2
- package/dist/ch/uid.js +1 -9
- package/dist/ch/uid.js.map +1 -1
- package/dist/ch/vat.d.ts +2 -2
- package/dist/ch/vat.js +1 -9
- package/dist/ch/vat.js.map +1 -1
- package/dist/cl/rut.d.ts +2 -2
- package/dist/cl/rut.js +1 -14
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/ric.d.ts +2 -2
- package/dist/cn/ric.js +3 -14
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +2 -2
- package/dist/cn/uscc.js +1 -10
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/nit.d.ts +2 -2
- package/dist/co/nit.js +2 -12
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.d.ts +18 -2
- package/dist/cr/cpf.js +1 -16
- package/dist/cr/cpf.js.map +1 -1
- package/dist/creditcard.d.ts +2 -2
- package/dist/creditcard.js +5 -14
- package/dist/creditcard.js.map +1 -1
- package/dist/cu/ni.d.ts +2 -2
- package/dist/cu/ni.js +2 -17
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/vat.d.ts +2 -2
- package/dist/cy/vat.js +1 -8
- package/dist/cy/vat.js.map +1 -1
- package/dist/cz/dic.d.ts +2 -2
- package/dist/cz/dic.js +7 -13
- package/dist/cz/dic.js.map +1 -1
- package/dist/cz/ico.d.ts +2 -2
- package/dist/cz/ico.js +2 -10
- package/dist/cz/ico.js.map +1 -1
- package/dist/cz/rc.d.ts +2 -2
- package/dist/cz/rc.js +2 -26
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.d.ts +19 -2
- package/dist/de/handelsreg.js +1 -17
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +2 -2
- package/dist/de/idnr.js +2 -12
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/stnr.d.ts +17 -2
- package/dist/de/stnr.js +1 -15
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +2 -2
- package/dist/de/svnr.js +2 -11
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +2 -2
- package/dist/de/vat.js +2 -11
- package/dist/de/vat.js.map +1 -1
- package/dist/dk/cpr.d.ts +2 -2
- package/dist/dk/cpr.js +2 -10
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +2 -2
- package/dist/dk/cvr.js +2 -15
- package/dist/dk/cvr.js.map +1 -1
- package/dist/dk/vat.d.ts +2 -2
- package/dist/dk/vat.js +3 -13
- package/dist/dk/vat.js.map +1 -1
- package/dist/do/rnc.d.ts +2 -2
- package/dist/do/rnc.js +2 -16
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/ruc.d.ts +2 -2
- package/dist/ec/ruc.js +1 -18
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +2 -2
- package/dist/ee/ik.js +3 -20
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/registrikood.d.ts +2 -2
- package/dist/ee/registrikood.js +1 -8
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +2 -2
- package/dist/ee/vat.js +2 -10
- package/dist/ee/vat.js.map +1 -1
- 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 -2
- package/dist/es/cif.js +1 -10
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +2 -2
- package/dist/es/dni.js +1 -9
- package/dist/es/dni.js.map +1 -1
- package/dist/es/nie.d.ts +2 -2
- package/dist/es/nie.js +1 -9
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +2 -2
- package/dist/es/nss.js +1 -16
- package/dist/es/nss.js.map +1 -1
- package/dist/es/vat.d.ts +2 -2
- package/dist/es/vat.js +5 -10
- package/dist/es/vat.js.map +1 -1
- package/dist/eu/vat.d.ts +2 -2
- package/dist/eu/vat.js +1 -0
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +2 -2
- package/dist/fi/hetu.js +2 -10
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/vat.d.ts +2 -2
- package/dist/fi/vat.js +3 -10
- package/dist/fi/vat.js.map +1 -1
- package/dist/fi/ytunnus.d.ts +2 -2
- package/dist/fi/ytunnus.js +2 -10
- package/dist/fi/ytunnus.js.map +1 -1
- package/dist/fr/nif.d.ts +2 -2
- package/dist/fr/nif.js +1 -9
- package/dist/fr/nif.js.map +1 -1
- package/dist/fr/nir.d.ts +2 -2
- package/dist/fr/nir.js +2 -14
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +2 -2
- package/dist/fr/siren.js +2 -10
- package/dist/fr/siren.js.map +1 -1
- package/dist/fr/siret.d.ts +2 -2
- package/dist/fr/siret.js +2 -11
- package/dist/fr/siret.js.map +1 -1
- package/dist/fr/tva.d.ts +2 -2
- package/dist/fr/tva.js +2 -12
- package/dist/fr/tva.js.map +1 -1
- package/dist/gb/nino.d.ts +12 -2
- package/dist/gb/nino.js +1 -10
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +2 -2
- package/dist/gb/sedol.js +1 -11
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +2 -2
- package/dist/gb/utr.js +2 -10
- package/dist/gb/utr.js.map +1 -1
- package/dist/gb/vat.d.ts +2 -2
- package/dist/gb/vat.js +2 -11
- package/dist/gb/vat.js.map +1 -1
- 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/tin.d.ts +2 -2
- package/dist/gh/tin.js +1 -15
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +2 -2
- package/dist/gr/amka.js +3 -11
- package/dist/gr/amka.js.map +1 -1
- package/dist/gr/vat.d.ts +2 -2
- package/dist/gr/vat.js +1 -10
- package/dist/gr/vat.js.map +1 -1
- package/dist/gt/nit.d.ts +2 -2
- package/dist/gt/nit.js +1 -12
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +2 -2
- package/dist/hk/hkid.js +1 -10
- package/dist/hk/hkid.js.map +1 -1
- package/dist/hr/vat.d.ts +2 -2
- package/dist/hr/vat.js +2 -9
- package/dist/hr/vat.js.map +1 -1
- package/dist/hu/vat.d.ts +2 -2
- package/dist/hu/vat.js +3 -10
- package/dist/hu/vat.js.map +1 -1
- package/dist/iban.d.ts +2 -2
- package/dist/iban.js +2 -8
- package/dist/iban.js.map +1 -1
- package/dist/id/npwp.d.ts +2 -2
- package/dist/id/npwp.js +3 -13
- package/dist/id/npwp.js.map +1 -1
- package/dist/ie/pps.d.ts +2 -2
- package/dist/ie/pps.js +1 -10
- package/dist/ie/pps.js.map +1 -1
- package/dist/ie/vat.d.ts +2 -2
- package/dist/ie/vat.js +1 -9
- package/dist/ie/vat.js.map +1 -1
- package/dist/il/idnr.d.ts +2 -2
- package/dist/il/idnr.js +2 -9
- package/dist/il/idnr.js.map +1 -1
- package/dist/in/aadhaar.d.ts +2 -2
- package/dist/in/aadhaar.js +2 -12
- package/dist/in/aadhaar.js.map +1 -1
- package/dist/in/gstin.d.ts +2 -2
- package/dist/in/gstin.js +1 -10
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/pan.d.ts +15 -2
- package/dist/in/pan.js +1 -13
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- 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/nid.d.ts +2 -2
- package/dist/ir/nid.js +2 -24
- package/dist/ir/nid.js.map +1 -1
- package/dist/is/kennitala.d.ts +2 -2
- package/dist/is/kennitala.js +2 -13
- package/dist/is/kennitala.js.map +1 -1
- 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 -2
- package/dist/isin.js +2 -12
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +2 -2
- package/dist/it/codicefiscale.js +1 -21
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +2 -2
- package/dist/it/iva.js +2 -9
- package/dist/it/iva.js.map +1 -1
- package/dist/jp/cn.d.ts +2 -2
- package/dist/jp/cn.js +1 -9
- package/dist/jp/cn.js.map +1 -1
- package/dist/jp/mynumber.d.ts +2 -2
- 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/rrn.d.ts +2 -2
- package/dist/kr/rrn.js +2 -11
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +2 -2
- package/dist/kw/civil.js +2 -14
- package/dist/kw/civil.js.map +1 -1
- package/dist/kz/iin.d.ts +2 -2
- package/dist/kz/iin.js +3 -18
- package/dist/kz/iin.js.map +1 -1
- package/dist/lei.d.ts +2 -2
- package/dist/lei.js +2 -11
- package/dist/lei.js.map +1 -1
- 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/nic.d.ts +2 -2
- package/dist/lk/nic.js +2 -14
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +2 -2
- package/dist/lt/asmens.js +2 -1
- package/dist/lt/asmens.js.map +1 -1
- package/dist/lt/vat.d.ts +2 -2
- package/dist/lt/vat.js +2 -10
- package/dist/lt/vat.js.map +1 -1
- package/dist/lu/vat.d.ts +2 -2
- package/dist/lu/vat.js +2 -8
- package/dist/lu/vat.js.map +1 -1
- package/dist/luhn.d.ts +2 -2
- package/dist/luhn.js +2 -9
- package/dist/luhn.js.map +1 -1
- package/dist/lv/vat.d.ts +2 -2
- package/dist/lv/vat.js +2 -28
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +2 -2
- package/dist/ma/ice.js +2 -11
- package/dist/ma/ice.js.map +1 -1
- package/dist/mc/tva.d.ts +2 -2
- package/dist/mc/tva.js +1 -0
- package/dist/mc/tva.js.map +1 -1
- package/dist/md/idno.d.ts +2 -2
- package/dist/md/idno.js +1 -10
- package/dist/md/idno.js.map +1 -1
- package/dist/me/pib.d.ts +2 -2
- package/dist/me/pib.js +2 -10
- package/dist/me/pib.js.map +1 -1
- package/dist/mk/edb.d.ts +2 -2
- package/dist/mk/edb.js +2 -11
- package/dist/mk/edb.js.map +1 -1
- package/dist/mt/vat.d.ts +2 -2
- 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/mx/clabe.d.ts +2 -2
- package/dist/mx/clabe.js +1 -14
- package/dist/mx/clabe.js.map +1 -1
- package/dist/mx/curp.d.ts +2 -2
- package/dist/mx/curp.js +3 -17
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/rfc.d.ts +2 -2
- package/dist/mx/rfc.js +3 -19
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/nric.d.ts +2 -2
- package/dist/my/nric.js +2 -14
- package/dist/my/nric.js.map +1 -1
- 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/ruc.d.ts +2 -2
- package/dist/ni/ruc.js +1 -23
- package/dist/ni/ruc.js.map +1 -1
- package/dist/nl/bsn.d.ts +2 -2
- 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/vat.d.ts +2 -2
- package/dist/nl/vat.js +1 -13
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +2 -2
- package/dist/no/fodselsnummer.js +2 -10
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mva.d.ts +2 -2
- package/dist/no/mva.js +1 -8
- package/dist/no/mva.js.map +1 -1
- package/dist/no/orgnr.d.ts +2 -2
- package/dist/no/orgnr.js +2 -8
- package/dist/no/orgnr.js.map +1 -1
- package/dist/nz/ird.d.ts +2 -2
- package/dist/nz/ird.js +2 -11
- package/dist/nz/ird.js.map +1 -1
- package/dist/pa/ruc.d.ts +2 -2
- package/dist/pa/ruc.js +1 -18
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +8 -7
- package/dist/patterns.js +3 -5
- package/dist/patterns.js.map +1 -1
- package/dist/pe/ruc.d.ts +2 -2
- package/dist/pe/ruc.js +1 -15
- package/dist/pe/ruc.js.map +1 -1
- 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/pl/nip.d.ts +2 -2
- package/dist/pl/nip.js +2 -10
- package/dist/pl/nip.js.map +1 -1
- package/dist/pl/pesel.d.ts +2 -2
- package/dist/pl/pesel.js +3 -13
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +2 -2
- package/dist/pl/regon.js +2 -11
- package/dist/pl/regon.js.map +1 -1
- package/dist/pt/cc.d.ts +2 -2
- package/dist/pt/cc.js +1 -9
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/vat.d.ts +2 -2
- package/dist/pt/vat.js +3 -11
- package/dist/pt/vat.js.map +1 -1
- package/dist/ro/cnp.d.ts +2 -2
- package/dist/ro/cnp.js +4 -14
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/vat.d.ts +2 -2
- package/dist/ro/vat.js +13 -11
- package/dist/ro/vat.js.map +1 -1
- package/dist/rs/pib.d.ts +2 -2
- package/dist/rs/pib.js +1 -9
- package/dist/rs/pib.js.map +1 -1
- package/dist/ru/inn.d.ts +2 -2
- package/dist/ru/inn.js +1 -11
- package/dist/ru/inn.js.map +1 -1
- package/dist/se/orgnr.d.ts +2 -2
- package/dist/se/orgnr.js +2 -9
- package/dist/se/orgnr.js.map +1 -1
- package/dist/se/personnummer.d.ts +2 -2
- package/dist/se/personnummer.js +7 -15
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +2 -2
- package/dist/se/vat.js +3 -10
- package/dist/se/vat.js.map +1 -1
- package/dist/sg/uen.d.ts +2 -2
- package/dist/sg/uen.js +1 -15
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +2 -2
- package/dist/si/emso.js +3 -18
- package/dist/si/emso.js.map +1 -1
- package/dist/si/vat.d.ts +2 -2
- package/dist/si/vat.js +3 -12
- package/dist/si/vat.js.map +1 -1
- package/dist/sk/dic.d.ts +2 -2
- package/dist/sk/dic.js +1 -0
- package/dist/sk/dic.js.map +1 -1
- package/dist/sk/ico.d.ts +2 -2
- package/dist/sk/ico.js +1 -0
- package/dist/sk/ico.js.map +1 -1
- package/dist/sk/rc.d.ts +2 -2
- package/dist/sk/rc.js +1 -0
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/tin.d.ts +2 -2
- package/dist/th/tin.js +1 -11
- package/dist/th/tin.js.map +1 -1
- package/dist/tr/tckimlik.d.ts +2 -2
- package/dist/tr/tckimlik.js +1 -20
- package/dist/tr/tckimlik.js.map +1 -1
- package/dist/tr/vkn.d.ts +2 -2
- package/dist/tr/vkn.js +1 -20
- package/dist/tr/vkn.js.map +1 -1
- package/dist/tw/ubn.d.ts +2 -2
- package/dist/tw/ubn.js +1 -11
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +26 -4
- package/dist/ua/edrpou.d.ts +2 -2
- package/dist/ua/edrpou.js +1 -11
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/us/ein.d.ts +12 -2
- package/dist/us/ein.js +1 -10
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.d.ts +13 -2
- package/dist/us/itin.js +1 -11
- package/dist/us/itin.js.map +1 -1
- package/dist/us/rtn.d.ts +2 -2
- package/dist/us/rtn.js +3 -18
- 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/rut.d.ts +2 -2
- package/dist/uy/rut.js +1 -14
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/rif.d.ts +2 -2
- package/dist/ve/rif.js +2 -15
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mst.d.ts +2 -2
- package/dist/vn/mst.js +1 -12
- package/dist/vn/mst.js.map +1 -1
- package/dist/za/idnr.d.ts +2 -2
- package/dist/za/idnr.js +3 -16
- package/dist/za/idnr.js.map +1 -1
- package/package.json +22 -12
- package/src/_checksums/mod1110.ts +1 -1
- package/src/ad/nrt.ts +7 -3
- 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 +7 -3
- package/src/ar/cuit.ts +7 -3
- 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 +37 -9
- 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 +7 -3
- package/src/ba/jmbg.ts +8 -7
- package/src/bd/nid.ts +7 -3
- 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 +8 -7
- package/src/bg/pnf.ts +7 -3
- package/src/bg/vat.ts +8 -3
- package/src/bh/cpr.ts +7 -3
- package/src/bic.ts +7 -3
- package/src/br/cnpj.ts +7 -3
- package/src/br/cpf.ts +7 -3
- package/src/by/unp.ts +10 -5
- package/src/bz/tin.ts +7 -3
- 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 +7 -3
- package/src/cn/ric.ts +8 -7
- package/src/cn/uscc.ts +7 -3
- package/src/co/nit.ts +8 -4
- package/src/cr/cpf.ts +7 -3
- package/src/creditcard.ts +10 -6
- package/src/cu/ni.ts +8 -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 +8 -7
- package/src/de/handelsreg.ts +7 -3
- package/src/de/idnr.ts +7 -3
- package/src/de/stnr.ts +7 -3
- package/src/de/svnr.ts +7 -3
- package/src/de/vat.ts +7 -3
- package/src/dk/cpr.ts +8 -7
- package/src/dk/cvr.ts +7 -3
- package/src/dk/vat.ts +8 -3
- package/src/do/rnc.ts +7 -3
- package/src/ec/ruc.ts +7 -3
- package/src/ee/ik.ts +8 -7
- package/src/ee/registrikood.ts +8 -4
- package/src/ee/vat.ts +7 -3
- package/src/eg/tn.ts +7 -3
- package/src/es/cif.ts +8 -4
- package/src/es/dni.ts +7 -3
- package/src/es/nie.ts +8 -4
- package/src/es/nss.ts +7 -3
- package/src/es/vat.ts +13 -5
- package/src/eu/vat.ts +10 -6
- package/src/fi/hetu.ts +8 -7
- 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 +8 -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 +7 -3
- package/src/gb/sedol.ts +7 -3
- 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 +7 -3
- package/src/gr/amka.ts +7 -3
- package/src/gr/vat.ts +7 -3
- package/src/gt/nit.ts +7 -3
- package/src/hk/hkid.ts +7 -3
- 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 +7 -3
- package/src/in/pan.ts +7 -3
- package/src/index.ts +3 -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 +7 -3
- package/src/it/codicefiscale.ts +11 -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 +8 -7
- package/src/kw/civil.ts +8 -7
- package/src/kz/iin.ts +8 -8
- package/src/lei.ts +7 -3
- package/src/li/peid.ts +7 -3
- package/src/lk/nic.ts +8 -7
- 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 +7 -3
- package/src/lv/vat.ts +7 -3
- 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 +9 -8
- package/src/mx/rfc.ts +8 -4
- package/src/my/nric.ts +8 -7
- 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 +7 -3
- package/src/no/fodselsnummer.ts +11 -7
- package/src/no/mva.ts +9 -5
- package/src/no/orgnr.ts +7 -3
- package/src/nz/ird.ts +8 -4
- package/src/pa/ruc.ts +7 -3
- package/src/patterns.ts +49 -18
- package/src/pe/ruc.ts +7 -3
- package/src/ph/philid.ts +7 -3
- package/src/pk/cnic.ts +7 -3
- package/src/pl/nip.ts +7 -3
- package/src/pl/pesel.ts +8 -7
- package/src/pl/regon.ts +7 -3
- package/src/pt/cc.ts +7 -3
- package/src/pt/vat.ts +8 -3
- package/src/ro/cnp.ts +15 -8
- package/src/ro/vat.ts +8 -3
- package/src/rs/pib.ts +7 -3
- package/src/ru/inn.ts +7 -3
- package/src/se/orgnr.ts +7 -3
- package/src/se/personnummer.ts +35 -33
- package/src/se/vat.ts +8 -3
- package/src/sg/uen.ts +7 -3
- package/src/si/emso.ts +8 -7
- 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 +6 -2
- 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 +7 -3
- package/src/types.ts +34 -3
- package/src/ua/edrpou.ts +7 -3
- package/src/us/ein.ts +7 -3
- package/src/us/itin.ts +7 -3
- package/src/us/rtn.ts +16 -8
- package/src/us/ssn.ts +7 -3
- package/src/uy/rut.ts +7 -3
- package/src/ve/rif.ts +8 -6
- package/src/vn/mst.ts +7 -3
- package/src/za/idnr.ts +8 -7
package/dist/au/acn.js
CHANGED
|
@@ -3,16 +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/au/acn.ts
|
|
6
|
-
/**
|
|
7
|
-
* ACN (Australian Company Number).
|
|
8
|
-
*
|
|
9
|
-
* 9-digit identifier. Weights [8,7,6,5,4,3,2,1]
|
|
10
|
-
* applied to the first 8 digits; check digit is
|
|
11
|
-
* (10 - sum % 10) % 10.
|
|
12
|
-
*
|
|
13
|
-
* @see https://en.wikipedia.org/wiki/Australian_Company_Number
|
|
14
|
-
* @see https://asic.gov.au/
|
|
15
|
-
*/
|
|
16
6
|
const WEIGHTS = [
|
|
17
7
|
8,
|
|
18
8
|
7,
|
|
@@ -55,6 +45,7 @@ const acn = {
|
|
|
55
45
|
abbreviation: "ACN",
|
|
56
46
|
aliases: ["ACN", "Australian Company Number"],
|
|
57
47
|
candidatePattern: "\\d{3}\\s?\\d{3}\\s?\\d{3}",
|
|
48
|
+
scope: "country",
|
|
58
49
|
country: "AU",
|
|
59
50
|
entityType: "company",
|
|
60
51
|
sourceUrl: "https://asic.gov.au/",
|
package/dist/au/acn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acn.js","names":[],"sources":["../../src/au/acn.ts"],"sourcesContent":["/**\n * ACN (Australian Company Number).\n *\n * 9-digit identifier. Weights [8,7,6,5,4,3,2,1]\n * applied to the first 8 digits; check digit is\n * (10 - sum % 10) % 10.\n *\n * @see https://en.wikipedia.org/wiki/Australian_Company_Number\n * @see https://asic.gov.au/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"acn.js","names":[],"sources":["../../src/au/acn.ts"],"sourcesContent":["/**\n * ACN (Australian Company Number).\n *\n * 9-digit identifier. Weights [8,7,6,5,4,3,2,1]\n * applied to the first 8 digits; check digit is\n * (10 - sum % 10) % 10.\n *\n * @see https://en.wikipedia.org/wiki/Australian_Company_Number\n * @see https://asic.gov.au/\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 = [8, 7, 6, 5, 4, 3, 2, 1] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"ACN must contain only digits\",\n );\n }\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"ACN must be 9 digits\");\n }\n\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n sum += Number(v.charAt(i)) * (WEIGHTS[i] ?? 0);\n }\n const check = (10 - (sum % 10)) % 10;\n if (check !== Number(v.charAt(8))) {\n return err(\n \"INVALID_CHECKSUM\",\n \"ACN check digit mismatch\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 9) {\n return `${v.slice(0, 3)} ${v.slice(3, 6)} ${v.slice(6)}`;\n }\n return v;\n};\n\n/** Generate a random valid ACN. */\nconst generate = (): string => {\n const payload = randomDigits(8);\n let sum = 0;\n for (let i = 0; i < 8; i++)\n sum += Number(payload.charAt(i)) * (WEIGHTS[i] ?? 0);\n return payload + String((10 - (sum % 10)) % 10);\n};\n\n/** Australian Company Number. */\nconst acn: CountryValidator<\"AU\"> = {\n name: \"Australian Company Number\",\n localName: \"Australian Company Number\",\n abbreviation: \"ACN\",\n aliases: [\"ACN\", \"Australian Company Number\"] as const,\n candidatePattern: \"\\\\d{3}\\\\s?\\\\d{3}\\\\s?\\\\d{3}\",\n scope: \"country\",\n country: \"AU\",\n entityType: \"company\",\n sourceUrl: \"https://asic.gov.au/\",\n examples: [\"004085616\", \"010499966\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default acn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAqBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEvC,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,EAAE,WAAW,GACf,OAAO,IAAI,kBAAkB,sBAAsB;CAGrD,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,OAAO,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,QAAQ,MAAM;CAG9C,KADe,KAAM,MAAM,MAAO,OACpB,OAAO,EAAE,OAAO,CAAC,CAAC,GAC9B,OAAO,IACL,oBACA,0BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;CAEvD,OAAO;AACT;;AAGA,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,CAAC;CAC9B,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,OAAO,OAAO,QAAQ,OAAO,CAAC,CAAC,KAAK,QAAQ,MAAM;CACpD,OAAO,UAAU,QAAQ,KAAM,MAAM,MAAO,EAAE;AAChD;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,2BAA2B;CAC5C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa,WAAW;CACnC;CACA;CACA;CACA;AACF"}
|
package/dist/au/tfn.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/au/tfn.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -7,7 +7,7 @@ declare const format: (value: string) => string;
|
|
|
7
7
|
/** Generate a random valid TFN. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Australian Tax File Number. */
|
|
10
|
-
declare const tfn:
|
|
10
|
+
declare const tfn: CountryValidator<"AU">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, tfn as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=tfn.d.ts.map
|
package/dist/au/tfn.js
CHANGED
|
@@ -3,16 +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/au/tfn.ts
|
|
6
|
-
/**
|
|
7
|
-
* TFN (Australian Tax File Number).
|
|
8
|
-
*
|
|
9
|
-
* 8 or 9 digit identifier. Weighted checksum with
|
|
10
|
-
* weights [1,4,3,7,5,8,6,9,10]; sum mod 11
|
|
11
|
-
* must equal 0.
|
|
12
|
-
*
|
|
13
|
-
* @see https://en.wikipedia.org/wiki/Tax_file_number
|
|
14
|
-
* @see https://www.ato.gov.au/Individuals/Tax-file-number/
|
|
15
|
-
*/
|
|
16
6
|
const WEIGHTS = [
|
|
17
7
|
1,
|
|
18
8
|
4,
|
|
@@ -56,6 +46,7 @@ const tfn = {
|
|
|
56
46
|
abbreviation: "TFN",
|
|
57
47
|
aliases: ["TFN", "Tax File Number"],
|
|
58
48
|
candidatePattern: "\\d{8,9}",
|
|
49
|
+
scope: "country",
|
|
59
50
|
country: "AU",
|
|
60
51
|
entityType: "person",
|
|
61
52
|
sourceUrl: "https://www.ato.gov.au/individuals-and-families/tax-file-number",
|
package/dist/au/tfn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tfn.js","names":[],"sources":["../../src/au/tfn.ts"],"sourcesContent":["/**\n * TFN (Australian Tax File Number).\n *\n * 8 or 9 digit identifier. Weighted checksum with\n * weights [1,4,3,7,5,8,6,9,10]; sum mod 11\n * must equal 0.\n *\n * @see https://en.wikipedia.org/wiki/Tax_file_number\n * @see https://www.ato.gov.au/Individuals/Tax-file-number/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"tfn.js","names":[],"sources":["../../src/au/tfn.ts"],"sourcesContent":["/**\n * TFN (Australian Tax File Number).\n *\n * 8 or 9 digit identifier. Weighted checksum with\n * weights [1,4,3,7,5,8,6,9,10]; sum mod 11\n * must equal 0.\n *\n * @see https://en.wikipedia.org/wiki/Tax_file_number\n * @see https://www.ato.gov.au/Individuals/Tax-file-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 = [1, 4, 3, 7, 5, 8, 6, 9, 10] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"TFN must contain only digits\",\n );\n }\n if (v.length !== 8 && v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"TFN must be 8 or 9 digits\",\n );\n }\n\n let sum = 0;\n for (let i = 0; i < v.length; i++) {\n sum += Number(v.charAt(i)) * (WEIGHTS[i] ?? 0);\n }\n if (sum % 11 !== 0) {\n return err(\"INVALID_CHECKSUM\", \"TFN checksum mismatch\");\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 8 || v.length === 9) {\n return `${v.slice(0, 3)} ${v.slice(3, 6)} ${v.slice(6)}`;\n }\n return v;\n};\n\n/** Generate a random valid TFN. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Australian Tax File Number. */\nconst tfn: CountryValidator<\"AU\"> = {\n name: \"Tax File Number\",\n localName: \"Tax File Number\",\n abbreviation: \"TFN\",\n aliases: [\"TFN\", \"Tax File Number\"] as const,\n candidatePattern: \"\\\\d{8,9}\",\n scope: \"country\",\n country: \"AU\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.ato.gov.au/individuals-and-families/tax-file-number\",\n examples: [\"87650006\", \"123456782\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default tfn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAqBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAE;AAE3C,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,EAAE,WAAW,KAAK,EAAE,WAAW,GACjC,OAAO,IACL,kBACA,2BACF;CAGF,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAC5B,OAAO,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,QAAQ,MAAM;CAE9C,IAAI,MAAM,OAAO,GACf,OAAO,IAAI,oBAAoB,uBAAuB;CAGxD,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,KAAK,EAAE,WAAW,GACjC,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;CAEvD,OAAO;AACT;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,CAAC;EACxB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,iBAAiB;CAClC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,YAAY,WAAW;CAClC;CACA;CACA;CACA;AACF"}
|
package/dist/az/voen.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/az/voen.d.ts
|
|
4
4
|
/**
|
|
@@ -14,7 +14,7 @@ declare const generate: () => string;
|
|
|
14
14
|
*
|
|
15
15
|
* Examples sourced from python-stdnum test suite.
|
|
16
16
|
*/
|
|
17
|
-
declare const voen:
|
|
17
|
+
declare const voen: CountryValidator<"AZ">;
|
|
18
18
|
//#endregion
|
|
19
19
|
export { compact, voen as default, format, generate, validate };
|
|
20
20
|
//# sourceMappingURL=voen.d.ts.map
|
package/dist/az/voen.js
CHANGED
|
@@ -2,20 +2,6 @@ import { clean } from "../_util/clean.js";
|
|
|
2
2
|
import { randomDigits } from "../_util/generate.js";
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
//#region src/az/voen.ts
|
|
5
|
-
/**
|
|
6
|
-
* VÖEN (Vergi Ödəyicisinin Eyniləşdirmə Nömrəsi,
|
|
7
|
-
* Azerbaijani tax identification number).
|
|
8
|
-
*
|
|
9
|
-
* 10 digits: TTSSSSSSCD where:
|
|
10
|
-
* - TT = territorial unit code
|
|
11
|
-
* - SSSSSS = serial number
|
|
12
|
-
* - C = check digit (weighted sum mod 11)
|
|
13
|
-
* - D = legal status (1=legal person, 2=natural person)
|
|
14
|
-
*
|
|
15
|
-
* Ported from python-stdnum az.voen module.
|
|
16
|
-
*
|
|
17
|
-
* @see https://www.taxes.gov.az/
|
|
18
|
-
*/
|
|
19
5
|
/** Weights for check digit computation (positions 0-7). */
|
|
20
6
|
const WEIGHTS = [
|
|
21
7
|
4,
|
|
@@ -84,6 +70,7 @@ const voen = {
|
|
|
84
70
|
abbreviation: "VÖEN",
|
|
85
71
|
aliases: ["VÖEN"],
|
|
86
72
|
candidatePattern: "\\d{10}",
|
|
73
|
+
scope: "country",
|
|
87
74
|
country: "AZ",
|
|
88
75
|
entityType: "any",
|
|
89
76
|
lengths: [10],
|
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 {
|
|
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 type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\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: CountryValidator<\"AZ\"> = {\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 scope: \"country\",\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":";;;;;AAyBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;;;;AAKvC,MAAM,WAAW,UAA0B;CACzC,IAAI,SAAS,MAAM,OAAO,GAAG,EAAE,KAAK;CACpC,IAAI,OAAO,WAAW,GACpB,SAAS,MAAM;CAEjB,OAAO;AACT;;;;;AAMA,MAAM,kBAAkB,UAAiC;CACvD,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,QAAQ,QAAQ,MAAM,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;CAEnD,MAAM,SAAS,MAAM;CACrB,OAAO,WAAW,KAAK,OAAO,OAAO,MAAM;AAC7C;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,oCACF;CAGF,IAAI,CAAC,WAAW,KAAK,CAAC,GACpB,OAAO,IACL,kBACA,2CACF;CAKF,MAAM,YAAY,EAAE;CACpB,IAAI,cAAc,OAAO,cAAc,KACrC,OAAO,IACL,qBACA,gCACF;CAGF,MAAM,WAAW,eAAe,CAAC;CACjC,IAAI,aAAa,QAAQ,EAAE,OAAO,UAChC,OAAO,IACL,oBACA,iCACF;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,EAAE;AAC3D;;AAGA,MAAM,iBAAyB;CAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;EAC5B,MAAM,UAAU,aAAa,CAAC;EAC9B,MAAM,QAAQ,eAAe,OAAO;EACpC,IAAI,UAAU,MAAM;EACpB,MAAM,SAAS,KAAK,OAAO,IAAI,KAAM,MAAM;EAC3C,OAAO,UAAU,QAAQ;CAC3B;CACA,MAAM,IAAI,MAAM,+BAA+B;AACjD;;;;;;AAOA,MAAM,OAA+B;CACnC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,MAAM;CAChB,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,cAAc,YAAY;CACrC;CACA;CACA;CACA,WAAW;CACX;AACF"}
|
package/dist/ba/jmbg.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ba/jmbg.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -8,7 +8,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
8
8
|
/** Generate a random valid JMBG. */
|
|
9
9
|
declare const generate: () => string;
|
|
10
10
|
/** Bosnian Unique Master Citizen Number. */
|
|
11
|
-
declare const jmbg:
|
|
11
|
+
declare const jmbg: CountryValidator<"BA", ParsedPersonId>;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { compact, jmbg as default, format, generate, parse, validate };
|
|
14
14
|
//# sourceMappingURL=jmbg.d.ts.map
|
package/dist/ba/jmbg.js
CHANGED
|
@@ -1,19 +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/ba/jmbg.ts
|
|
8
|
-
/**
|
|
9
|
-
* JMBG (Jedinstveni matični broj građana).
|
|
10
|
-
*
|
|
11
|
-
* Bosnian unique master citizen number. 13 digits
|
|
12
|
-
* encoding DDMMYYY (7-digit birth year), region code,
|
|
13
|
-
* serial number, and a check digit.
|
|
14
|
-
*
|
|
15
|
-
* @see https://en.wikipedia.org/wiki/Unique_Master_Citizen_Number
|
|
16
|
-
*/
|
|
17
8
|
const WEIGHTS = [
|
|
18
9
|
7,
|
|
19
10
|
6,
|
|
@@ -81,6 +72,7 @@ const jmbg = {
|
|
|
81
72
|
abbreviation: "JMBG",
|
|
82
73
|
aliases: ["JMBG", "matični broj"],
|
|
83
74
|
candidatePattern: "\\d{13}",
|
|
75
|
+
scope: "country",
|
|
84
76
|
country: "BA",
|
|
85
77
|
entityType: "person",
|
|
86
78
|
lengths: [13],
|
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/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
|
@@ -3,27 +3,6 @@ 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
|
-
* 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
|
-
*/
|
|
27
6
|
const RMO_VALUES = [
|
|
28
7
|
"1",
|
|
29
8
|
"2",
|
|
@@ -89,6 +68,7 @@ const nid = {
|
|
|
89
68
|
"National ID Card"
|
|
90
69
|
],
|
|
91
70
|
candidatePattern: "\\d{10,17}",
|
|
71
|
+
scope: "country",
|
|
92
72
|
country: "BD",
|
|
93
73
|
entityType: "person",
|
|
94
74
|
lengths: [
|
package/dist/bd/nid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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\
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/be/bis.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -7,7 +7,7 @@ declare const format: (value: string) => string;
|
|
|
7
7
|
/** Generate a random valid BIS number. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Belgian BIS Number. */
|
|
10
|
-
declare const bis:
|
|
10
|
+
declare const bis: CountryValidator<"BE">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, bis as default, format, generate, validate };
|
|
13
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/nn.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/be/nn.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -14,7 +14,7 @@ declare const format: (value: string) => string;
|
|
|
14
14
|
/** Generate a random valid Belgian NN. */
|
|
15
15
|
declare const generate: () => string;
|
|
16
16
|
/** Belgian National Number. */
|
|
17
|
-
declare const nn:
|
|
17
|
+
declare const nn: CountryValidator<"BE">;
|
|
18
18
|
//#endregion
|
|
19
19
|
export { checksum, compact, nn as default, format, generate, validate };
|
|
20
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,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/be/vat.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -7,7 +7,7 @@ declare const format: (value: string) => string;
|
|
|
7
7
|
/** Generate a random valid Belgian VAT number. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Belgian VAT Number. */
|
|
10
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"BE">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, vat as default, format, generate, validate };
|
|
13
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,4 +1,4 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/bg/egn.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -12,7 +12,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
12
12
|
/** Generate a random valid EGN. */
|
|
13
13
|
declare const generate: () => string;
|
|
14
14
|
/** Bulgarian Personal Identification Number. */
|
|
15
|
-
declare const egn:
|
|
15
|
+
declare const egn: CountryValidator<"BG", ParsedPersonId>;
|
|
16
16
|
//#endregion
|
|
17
17
|
export { compact, egn as default, format, generate, parse, validate };
|
|
18
18
|
//# sourceMappingURL=egn.d.ts.map
|