@stll/stdnum 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"luhn.js","names":[],"sources":["../../src/_checksums/luhn.ts"],"sourcesContent":["/**\n * Luhn checksum algorithm (ISO/IEC 7812-1).\n * Used by credit cards, IMEI, Canadian SIN, etc.\n */\n\n/** Compute the Luhn checksum of a digit string. */\nexport const luhnChecksum = (value: string): number => {\n let sum = 0;\n let double = false;\n for (let i = value.length - 1; i >= 0; i--) {\n let d = Number(value[i]);\n if (double) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n sum += d;\n double = !double;\n }\n return sum % 10;\n};\n\n/** Validate a digit string using Luhn. */\nexport const luhnValidate = (value: string): boolean =>\n luhnChecksum(value) === 0;\n"],"mappings":";;;;;;AAMA,MAAa,gBAAgB,UAA0B;CACrD,IAAI,MAAM;CACV,IAAI,SAAS;
|
|
1
|
+
{"version":3,"file":"luhn.js","names":[],"sources":["../../src/_checksums/luhn.ts"],"sourcesContent":["/**\n * Luhn checksum algorithm (ISO/IEC 7812-1).\n * Used by credit cards, IMEI, Canadian SIN, etc.\n */\n\n/** Compute the Luhn checksum of a digit string. */\nexport const luhnChecksum = (value: string): number => {\n let sum = 0;\n let double = false;\n for (let i = value.length - 1; i >= 0; i--) {\n let d = Number(value[i]);\n if (double) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n sum += d;\n double = !double;\n }\n return sum % 10;\n};\n\n/** Validate a digit string using Luhn. */\nexport const luhnValidate = (value: string): boolean =>\n luhnChecksum(value) === 0;\n"],"mappings":";;;;;;AAMA,MAAa,gBAAgB,UAA0B;CACrD,IAAI,MAAM;CACV,IAAI,SAAS;CACb,KAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;EAC1C,IAAI,IAAI,OAAO,MAAM,EAAE;EACvB,IAAI,QAAQ;GACV,KAAK;GACL,IAAI,IAAI,GAAG,KAAK;EAClB;EACA,OAAO;EACP,SAAS,CAAC;CACZ;CACA,OAAO,MAAM;AACf;;AAGA,MAAa,gBAAgB,UAC3B,aAAa,KAAK,MAAM"}
|
|
@@ -16,7 +16,7 @@ const mod1110checkDigit = (payload) => {
|
|
|
16
16
|
/** Validate a string with a Mod 11,10 check digit. */
|
|
17
17
|
const mod1110validate = (value) => {
|
|
18
18
|
const payload = value.slice(0, -1);
|
|
19
|
-
const check = Number(value
|
|
19
|
+
const check = Number(value.at(-1));
|
|
20
20
|
return mod1110checkDigit(payload) === check;
|
|
21
21
|
};
|
|
22
22
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod1110.js","names":[],"sources":["../../src/_checksums/mod1110.ts"],"sourcesContent":["/**\n * ISO 7064 Mod 11,10 check digit algorithm.\n * Used by DE VAT, DE IdNr, HR OIB.\n */\n\n/** Compute the Mod 11,10 check digit for a payload. */\nexport const mod1110checkDigit = (\n payload: string,\n): number => {\n let product = 10;\n for (let i = 0; i < payload.length; i++) {\n let sum = (Number(payload[i]) + product) % 10;\n if (sum === 0) sum = 10;\n product = (sum * 2) % 11;\n }\n return (11 - product) % 10;\n};\n\n/** Validate a string with a Mod 11,10 check digit. */\nexport const mod1110validate = (value: string): boolean => {\n const payload = value.slice(0, -1);\n const check = Number(value
|
|
1
|
+
{"version":3,"file":"mod1110.js","names":[],"sources":["../../src/_checksums/mod1110.ts"],"sourcesContent":["/**\n * ISO 7064 Mod 11,10 check digit algorithm.\n * Used by DE VAT, DE IdNr, HR OIB.\n */\n\n/** Compute the Mod 11,10 check digit for a payload. */\nexport const mod1110checkDigit = (\n payload: string,\n): number => {\n let product = 10;\n for (let i = 0; i < payload.length; i++) {\n let sum = (Number(payload[i]) + product) % 10;\n if (sum === 0) sum = 10;\n product = (sum * 2) % 11;\n }\n return (11 - product) % 10;\n};\n\n/** Validate a string with a Mod 11,10 check digit. */\nexport const mod1110validate = (value: string): boolean => {\n const payload = value.slice(0, -1);\n const check = Number(value.at(-1));\n return mod1110checkDigit(payload) === check;\n};\n"],"mappings":";;;;;;AAMA,MAAa,qBACX,YACW;CACX,IAAI,UAAU;CACd,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACvC,IAAI,OAAO,OAAO,QAAQ,EAAE,IAAI,WAAW;EAC3C,IAAI,QAAQ,GAAG,MAAM;EACrB,UAAW,MAAM,IAAK;CACxB;CACA,QAAQ,KAAK,WAAW;AAC1B;;AAGA,MAAa,mBAAmB,UAA2B;CACzD,MAAM,UAAU,MAAM,MAAM,GAAG,EAAE;CACjC,MAAM,QAAQ,OAAO,MAAM,GAAG,EAAE,CAAC;CACjC,OAAO,kBAAkB,OAAO,MAAM;AACxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod112.js","names":[],"sources":["../../src/_checksums/mod112.ts"],"sourcesContent":["/**\n * ISO 7064 Mod 11,2 check character algorithm.\n * Used by CN RIC (Resident Identity Card).\n *\n * Weights are powers of 2 modulo 11\n * (2^17 mod 11 ... 2^1 mod 11), applied\n * left-to-right across the 17-character payload.\n * The check character is looked up from\n * \"10X98765432\".\n */\n\nconst WEIGHTS = [\n 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,\n] as const;\n\nconst CHECK_CHARS = \"10X98765432\";\n\n/**\n * Compute the ISO 7064 Mod 11,2 check character\n * for a 17-character payload.\n */\nexport const mod112checkChar = (\n payload: string,\n): string => {\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(payload[i]) * weight;\n }\n // SAFETY: sum % 11 is in 0..10 and CHECK_CHARS has 11 chars.\n return CHECK_CHARS[sum % 11] ?? \"\";\n};\n\n/**\n * Validate an 18-character string with a Mod 11,2\n * check character (last char is 0-9 or X).\n */\nexport const mod112validate = (value: string): boolean => {\n const check = value[17]?.toUpperCase();\n if (check === undefined) return false;\n return mod112checkChar(value.slice(0, 17)) === check;\n};\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,UAAU;CACd;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;
|
|
1
|
+
{"version":3,"file":"mod112.js","names":[],"sources":["../../src/_checksums/mod112.ts"],"sourcesContent":["/**\n * ISO 7064 Mod 11,2 check character algorithm.\n * Used by CN RIC (Resident Identity Card).\n *\n * Weights are powers of 2 modulo 11\n * (2^17 mod 11 ... 2^1 mod 11), applied\n * left-to-right across the 17-character payload.\n * The check character is looked up from\n * \"10X98765432\".\n */\n\nconst WEIGHTS = [\n 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,\n] as const;\n\nconst CHECK_CHARS = \"10X98765432\";\n\n/**\n * Compute the ISO 7064 Mod 11,2 check character\n * for a 17-character payload.\n */\nexport const mod112checkChar = (\n payload: string,\n): string => {\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(payload[i]) * weight;\n }\n // SAFETY: sum % 11 is in 0..10 and CHECK_CHARS has 11 chars.\n return CHECK_CHARS[sum % 11] ?? \"\";\n};\n\n/**\n * Validate an 18-character string with a Mod 11,2\n * check character (last char is 0-9 or X).\n */\nexport const mod112validate = (value: string): boolean => {\n const check = value[17]?.toUpperCase();\n if (check === undefined) return false;\n return mod112checkChar(value.slice(0, 17)) === check;\n};\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,UAAU;CACd;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;AACpD;AAEA,MAAM,cAAc;;;;;AAMpB,MAAa,mBACX,YACW;CACX,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GACxC,OAAO,OAAO,QAAQ,EAAE,IAAI;CAG9B,OAAO,YAAY,MAAM,OAAO;AAClC;;;;;AAMA,MAAa,kBAAkB,UAA2B;CACxD,MAAM,QAAQ,MAAM,KAAK,YAAY;CACrC,IAAI,UAAU,KAAA,GAAW,OAAO;CAChC,OAAO,gBAAgB,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM;AACjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod97.js","names":[],"sources":["../../src/_checksums/mod97.ts"],"sourcesContent":["/**\n * ISO 7064 Mod 97-10 checksum.\n * Used by IBAN and LEI.\n *\n * Processes one digit at a time to avoid BigInt.\n */\n\n/**\n * Compute mod 97 of a numeric string.\n * Letters must already be converted to digits.\n */\nexport const mod97 = (value: string): number => {\n let remainder = 0;\n for (let i = 0; i < value.length; i++) {\n remainder = (remainder * 10 + Number(value[i])) % 97;\n }\n return remainder;\n};\n\n/**\n * Validate a string using ISO 7064 Mod 97-10.\n * The remainder must equal 1.\n *\n * @param value - Numeric string (letters already\n * converted via charValue)\n */\nexport const mod97validate = (value: string): boolean =>\n mod97(value) === 1;\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,SAAS,UAA0B;CAC9C,IAAI,YAAY;
|
|
1
|
+
{"version":3,"file":"mod97.js","names":[],"sources":["../../src/_checksums/mod97.ts"],"sourcesContent":["/**\n * ISO 7064 Mod 97-10 checksum.\n * Used by IBAN and LEI.\n *\n * Processes one digit at a time to avoid BigInt.\n */\n\n/**\n * Compute mod 97 of a numeric string.\n * Letters must already be converted to digits.\n */\nexport const mod97 = (value: string): number => {\n let remainder = 0;\n for (let i = 0; i < value.length; i++) {\n remainder = (remainder * 10 + Number(value[i])) % 97;\n }\n return remainder;\n};\n\n/**\n * Validate a string using ISO 7064 Mod 97-10.\n * The remainder must equal 1.\n *\n * @param value - Numeric string (letters already\n * converted via charValue)\n */\nexport const mod97validate = (value: string): boolean =>\n mod97(value) === 1;\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,SAAS,UAA0B;CAC9C,IAAI,YAAY;CAChB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAChC,aAAa,YAAY,KAAK,OAAO,MAAM,EAAE,KAAK;CAEpD,OAAO;AACT;;;;;;;;AASA,MAAa,iBAAiB,UAC5B,MAAM,KAAK,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verhoeff.js","names":[],"sources":["../../src/_checksums/verhoeff.ts"],"sourcesContent":["/**\n * Verhoeff checksum algorithm.\n *\n * Uses three tables (d, p, inv) to detect all\n * single-digit and adjacent-transposition errors.\n * Used by Indian Aadhaar numbers.\n *\n * @see https://en.wikipedia.org/wiki/Verhoeff_algorithm\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\n// Dihedral group D5 multiplication table\nconst D: readonly (readonly number[])[] = [\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],\n [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],\n [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],\n [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],\n [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],\n [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],\n [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],\n [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],\n [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],\n];\n\n// Permutation table\nconst P: readonly (readonly number[])[] = [\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],\n [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],\n [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],\n [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],\n [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],\n [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],\n [7, 0, 4, 6, 9, 1, 3, 2, 5, 8],\n];\n\n// Inverse table\nconst INV = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9] as const;\n\n/** Compute the Verhoeff checksum of a digit string. */\nexport const verhoeffChecksum = (value: string): number => {\n let c = 0;\n for (let i = value.length - 1; i >= 0; i--) {\n const pos = (value.length - 1 - i) % 8;\n const digit = Number(value[i]);\n c = D[c]![P[pos]![digit]!]!;\n }\n return c;\n};\n\n/** Validate a digit string using Verhoeff. */\nexport const verhoeffValidate = (value: string): boolean =>\n verhoeffChecksum(value) === 0;\n\n/**\n * Calculate the Verhoeff check digit for a\n * digit string (without the check digit).\n */\nexport const verhoeffCheckDigit = (\n value: string,\n): number => {\n let c = 0;\n for (let i = value.length - 1; i >= 0; i--) {\n const pos = (value.length - i) % 8;\n const digit = Number(value[i]);\n c = D[c]![P[pos]![digit]!]!;\n }\n return INV[c]!;\n};\n"],"mappings":";;;;;;;;;;AAaA,MAAM,IAAoC;CACxC;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;
|
|
1
|
+
{"version":3,"file":"verhoeff.js","names":[],"sources":["../../src/_checksums/verhoeff.ts"],"sourcesContent":["/**\n * Verhoeff checksum algorithm.\n *\n * Uses three tables (d, p, inv) to detect all\n * single-digit and adjacent-transposition errors.\n * Used by Indian Aadhaar numbers.\n *\n * @see https://en.wikipedia.org/wiki/Verhoeff_algorithm\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\n// Dihedral group D5 multiplication table\nconst D: readonly (readonly number[])[] = [\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],\n [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],\n [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],\n [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],\n [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],\n [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],\n [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],\n [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],\n [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],\n];\n\n// Permutation table\nconst P: readonly (readonly number[])[] = [\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],\n [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],\n [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],\n [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],\n [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],\n [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],\n [7, 0, 4, 6, 9, 1, 3, 2, 5, 8],\n];\n\n// Inverse table\nconst INV = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9] as const;\n\n/** Compute the Verhoeff checksum of a digit string. */\nexport const verhoeffChecksum = (value: string): number => {\n let c = 0;\n for (let i = value.length - 1; i >= 0; i--) {\n const pos = (value.length - 1 - i) % 8;\n const digit = Number(value[i]);\n c = D[c]![P[pos]![digit]!]!;\n }\n return c;\n};\n\n/** Validate a digit string using Verhoeff. */\nexport const verhoeffValidate = (value: string): boolean =>\n verhoeffChecksum(value) === 0;\n\n/**\n * Calculate the Verhoeff check digit for a\n * digit string (without the check digit).\n */\nexport const verhoeffCheckDigit = (\n value: string,\n): number => {\n let c = 0;\n for (let i = value.length - 1; i >= 0; i--) {\n const pos = (value.length - i) % 8;\n const digit = Number(value[i]);\n c = D[c]![P[pos]![digit]!]!;\n }\n return INV[c]!;\n};\n"],"mappings":";;;;;;;;;;AAaA,MAAM,IAAoC;CACxC;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;AAC/B;AAGA,MAAM,IAAoC;CACxC;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC7B;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;AAC/B;AAGA,MAAM,MAAM;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;;AAGzC,MAAa,oBAAoB,UAA0B;CACzD,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;EAC1C,MAAM,OAAO,MAAM,SAAS,IAAI,KAAK;EACrC,MAAM,QAAQ,OAAO,MAAM,EAAE;EAC7B,IAAI,EAAE,GAAI,EAAE,KAAM;CACpB;CACA,OAAO;AACT;;AAGA,MAAa,oBAAoB,UAC/B,iBAAiB,KAAK,MAAM;;;;;AAM9B,MAAa,sBACX,UACW;CACX,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;EAC1C,MAAM,OAAO,MAAM,SAAS,KAAK;EACjC,MAAM,QAAQ,OAAO,MAAM,EAAE;EAC7B,IAAI,EAAE,GAAI,EAAE,KAAM;CACpB;CACA,OAAO,IAAI;AACb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weighted-sum.js","names":[],"sources":["../../src/_checksums/weighted-sum.ts"],"sourcesContent":["/**\n * Compute a weighted sum of digits.\n *\n * @param value - String of digits\n * @param weights - Array of weights (cycled if\n * shorter than value)\n * @param modulus - Modulus for the result\n */\nexport const weightedSum = (\n value: string,\n weights: readonly number[],\n modulus: number,\n): number => {\n let sum = 0;\n for (let i = 0; i < value.length; i++) {\n const digit = Number(value[i]);\n // SAFETY: modulo guarantees valid index\n // eslint-disable-next-line no-non-null-assertion\n const weight = weights[i % weights.length]!;\n sum += digit * weight;\n }\n return ((sum % modulus) + modulus) % modulus;\n};\n"],"mappings":";;;;;;;;;AAQA,MAAa,eACX,OACA,SACA,YACW;CACX,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"weighted-sum.js","names":[],"sources":["../../src/_checksums/weighted-sum.ts"],"sourcesContent":["/**\n * Compute a weighted sum of digits.\n *\n * @param value - String of digits\n * @param weights - Array of weights (cycled if\n * shorter than value)\n * @param modulus - Modulus for the result\n */\nexport const weightedSum = (\n value: string,\n weights: readonly number[],\n modulus: number,\n): number => {\n let sum = 0;\n for (let i = 0; i < value.length; i++) {\n const digit = Number(value[i]);\n // SAFETY: modulo guarantees valid index\n // eslint-disable-next-line no-non-null-assertion\n const weight = weights[i % weights.length]!;\n sum += digit * weight;\n }\n return ((sum % modulus) + modulus) % modulus;\n};\n"],"mappings":";;;;;;;;;AAQA,MAAa,eACX,OACA,SACA,YACW;CACX,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,MAAM,QAAQ,OAAO,MAAM,EAAE;EAG7B,MAAM,SAAS,QAAQ,IAAI,QAAQ;EACnC,OAAO,QAAQ;CACjB;CACA,QAAS,MAAM,UAAW,WAAW;AACvC"}
|
package/dist/_util/arabic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arabic.js","names":[],"sources":["../../src/_util/arabic.ts"],"sourcesContent":["/**\n * Shared Arabic-Indic and Extended Arabic-Indic digit\n * normalization utilities.\n *\n * Arabic-Indic (U+0660..U+0669) and Extended Arabic-Indic\n * (U+06F0..U+06F9, used for Persian/Dari) digits are\n * mapped to ASCII 0-9.\n */\n\nexport const ARABIC_DIGITS: Record<string, string> = {\n \"\\u0660\": \"0\", // ٠\n \"\\u0661\": \"1\", // ١\n \"\\u0662\": \"2\", // ٢\n \"\\u0663\": \"3\", // ٣\n \"\\u0664\": \"4\", // ٤\n \"\\u0665\": \"5\", // ٥\n \"\\u0666\": \"6\", // ٦\n \"\\u0667\": \"7\", // ٧\n \"\\u0668\": \"8\", // ٨\n \"\\u0669\": \"9\", // ٩\n \"\\u06F0\": \"0\", // ۰\n \"\\u06F1\": \"1\", // ۱\n \"\\u06F2\": \"2\", // ۲\n \"\\u06F3\": \"3\", // ۳\n \"\\u06F4\": \"4\", // ۴\n \"\\u06F5\": \"5\", // ۵\n \"\\u06F6\": \"6\", // ۶\n \"\\u06F7\": \"7\", // ۷\n \"\\u06F8\": \"8\", // ۸\n \"\\u06F9\": \"9\", // ۹\n};\n\nexport const ARABIC_REGEX = new RegExp(\n `[${Object.keys(ARABIC_DIGITS).join(\"\")}]`,\n \"g\",\n);\n\n/**\n * Replace Arabic-Indic and Extended Arabic-Indic digits\n * with their ASCII equivalents.\n */\nexport const normalizeArabicDigits = (\n value: string,\n): string =>\n value.replace(\n ARABIC_REGEX,\n (ch) => ARABIC_DIGITS[ch] ?? ch,\n );\n"],"mappings":";;;;;;;;;AASA,MAAa,gBAAwC;CACnD,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;
|
|
1
|
+
{"version":3,"file":"arabic.js","names":[],"sources":["../../src/_util/arabic.ts"],"sourcesContent":["/**\n * Shared Arabic-Indic and Extended Arabic-Indic digit\n * normalization utilities.\n *\n * Arabic-Indic (U+0660..U+0669) and Extended Arabic-Indic\n * (U+06F0..U+06F9, used for Persian/Dari) digits are\n * mapped to ASCII 0-9.\n */\n\nexport const ARABIC_DIGITS: Record<string, string> = {\n \"\\u0660\": \"0\", // ٠\n \"\\u0661\": \"1\", // ١\n \"\\u0662\": \"2\", // ٢\n \"\\u0663\": \"3\", // ٣\n \"\\u0664\": \"4\", // ٤\n \"\\u0665\": \"5\", // ٥\n \"\\u0666\": \"6\", // ٦\n \"\\u0667\": \"7\", // ٧\n \"\\u0668\": \"8\", // ٨\n \"\\u0669\": \"9\", // ٩\n \"\\u06F0\": \"0\", // ۰\n \"\\u06F1\": \"1\", // ۱\n \"\\u06F2\": \"2\", // ۲\n \"\\u06F3\": \"3\", // ۳\n \"\\u06F4\": \"4\", // ۴\n \"\\u06F5\": \"5\", // ۵\n \"\\u06F6\": \"6\", // ۶\n \"\\u06F7\": \"7\", // ۷\n \"\\u06F8\": \"8\", // ۸\n \"\\u06F9\": \"9\", // ۹\n};\n\nexport const ARABIC_REGEX = new RegExp(\n `[${Object.keys(ARABIC_DIGITS).join(\"\")}]`,\n \"g\",\n);\n\n/**\n * Replace Arabic-Indic and Extended Arabic-Indic digits\n * with their ASCII equivalents.\n */\nexport const normalizeArabicDigits = (\n value: string,\n): string =>\n value.replace(\n ARABIC_REGEX,\n (ch) => ARABIC_DIGITS[ch] ?? ch,\n );\n"],"mappings":";;;;;;;;;AASA,MAAa,gBAAwC;CACnD,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;AACZ;AAEA,MAAa,eAAe,IAAI,OAC9B,IAAI,OAAO,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,IACxC,GACF;;;;;AAMA,MAAa,yBACX,UAEA,MAAM,QACJ,eACC,OAAO,cAAc,OAAO,EAC/B"}
|
package/dist/_util/clean.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clean.js","names":[],"sources":["../../src/_util/clean.ts"],"sourcesContent":["/**\n * Unicode normalization map for common OCR, PDF\n * extraction, and copy-paste artifacts.\n *\n * Maps fullwidth digits, various dashes, dots,\n * spaces, and quotes to their ASCII equivalents.\n * Ported from python-stdnum's util.py _char_map.\n */\nconst CHAR_MAP: Record<string, string> = {\n // Fullwidth digits\n \"\\uFF10\": \"0\",\n \"\\uFF11\": \"1\",\n \"\\uFF12\": \"2\",\n \"\\uFF13\": \"3\",\n \"\\uFF14\": \"4\",\n \"\\uFF15\": \"5\",\n \"\\uFF16\": \"6\",\n \"\\uFF17\": \"7\",\n \"\\uFF18\": \"8\",\n \"\\uFF19\": \"9\",\n // Dashes and hyphens\n \"\\u2010\": \"-\", // hyphen\n \"\\u2011\": \"-\", // non-breaking hyphen\n \"\\u2012\": \"-\", // figure dash\n \"\\u2013\": \"-\", // en dash\n \"\\u2014\": \"-\", // em dash\n \"\\u2015\": \"-\", // horizontal bar\n \"\\u2212\": \"-\", // minus sign\n \"\\uFE58\": \"-\", // small em dash\n \"\\uFE63\": \"-\", // small hyphen-minus\n \"\\uFF0D\": \"-\", // fullwidth hyphen-minus\n // Dots and periods\n \"\\u2024\": \".\", // one dot leader\n \"\\uFE52\": \".\", // small full stop\n \"\\uFF0E\": \".\", // fullwidth full stop\n // Spaces\n \"\\u00A0\": \" \", // non-breaking space\n \"\\u2000\": \" \", // en quad\n \"\\u2001\": \" \", // em quad\n \"\\u2002\": \" \", // en space\n \"\\u2003\": \" \", // em space\n \"\\u2004\": \" \", // three-per-em space\n \"\\u2005\": \" \", // four-per-em space\n \"\\u2006\": \" \", // six-per-em space\n \"\\u2007\": \" \", // figure space\n \"\\u2008\": \" \", // punctuation space\n \"\\u2009\": \" \", // thin space\n \"\\u200A\": \" \", // hair space\n \"\\u200B\": \"\", // zero-width space (remove)\n \"\\u202F\": \" \", // narrow no-break space\n \"\\u205F\": \" \", // medium mathematical space\n \"\\u3000\": \" \", // ideographic space\n \"\\uFEFF\": \"\", // BOM / zero-width no-break\n // Slashes\n \"\\uFF0F\": \"/\", // fullwidth solidus\n \"\\u2044\": \"/\", // fraction slash\n};\n\nconst CHAR_REGEX = new RegExp(\n `[${Object.keys(CHAR_MAP).join(\"\")}]`,\n \"g\",\n);\n\n/**\n * Normalize Unicode artifacts to ASCII\n * equivalents and strip the given characters.\n *\n * @param value - The input string\n * @param strip - Characters to remove\n * (e.g. \" -/\" to strip spaces, dashes, slashes)\n */\nexport const clean = (\n value: string,\n strip: string = \"\",\n): string => {\n let result = value.replace(\n CHAR_REGEX,\n (ch) => CHAR_MAP[ch] ?? ch,\n );\n if (strip) {\n for (const ch of strip) {\n result = result.replaceAll(ch, \"\");\n }\n }\n return result;\n};\n"],"mappings":";;;;;;;;;AAQA,MAAM,WAAmC;CAEvC,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CAEV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CAEV,KAAU;CACV,KAAU;CACV,KAAU;CAEV,QAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CAEV,KAAU;CACV,KAAU;
|
|
1
|
+
{"version":3,"file":"clean.js","names":[],"sources":["../../src/_util/clean.ts"],"sourcesContent":["/**\n * Unicode normalization map for common OCR, PDF\n * extraction, and copy-paste artifacts.\n *\n * Maps fullwidth digits, various dashes, dots,\n * spaces, and quotes to their ASCII equivalents.\n * Ported from python-stdnum's util.py _char_map.\n */\nconst CHAR_MAP: Record<string, string> = {\n // Fullwidth digits\n \"\\uFF10\": \"0\",\n \"\\uFF11\": \"1\",\n \"\\uFF12\": \"2\",\n \"\\uFF13\": \"3\",\n \"\\uFF14\": \"4\",\n \"\\uFF15\": \"5\",\n \"\\uFF16\": \"6\",\n \"\\uFF17\": \"7\",\n \"\\uFF18\": \"8\",\n \"\\uFF19\": \"9\",\n // Dashes and hyphens\n \"\\u2010\": \"-\", // hyphen\n \"\\u2011\": \"-\", // non-breaking hyphen\n \"\\u2012\": \"-\", // figure dash\n \"\\u2013\": \"-\", // en dash\n \"\\u2014\": \"-\", // em dash\n \"\\u2015\": \"-\", // horizontal bar\n \"\\u2212\": \"-\", // minus sign\n \"\\uFE58\": \"-\", // small em dash\n \"\\uFE63\": \"-\", // small hyphen-minus\n \"\\uFF0D\": \"-\", // fullwidth hyphen-minus\n // Dots and periods\n \"\\u2024\": \".\", // one dot leader\n \"\\uFE52\": \".\", // small full stop\n \"\\uFF0E\": \".\", // fullwidth full stop\n // Spaces\n \"\\u00A0\": \" \", // non-breaking space\n \"\\u2000\": \" \", // en quad\n \"\\u2001\": \" \", // em quad\n \"\\u2002\": \" \", // en space\n \"\\u2003\": \" \", // em space\n \"\\u2004\": \" \", // three-per-em space\n \"\\u2005\": \" \", // four-per-em space\n \"\\u2006\": \" \", // six-per-em space\n \"\\u2007\": \" \", // figure space\n \"\\u2008\": \" \", // punctuation space\n \"\\u2009\": \" \", // thin space\n \"\\u200A\": \" \", // hair space\n \"\\u200B\": \"\", // zero-width space (remove)\n \"\\u202F\": \" \", // narrow no-break space\n \"\\u205F\": \" \", // medium mathematical space\n \"\\u3000\": \" \", // ideographic space\n \"\\uFEFF\": \"\", // BOM / zero-width no-break\n // Slashes\n \"\\uFF0F\": \"/\", // fullwidth solidus\n \"\\u2044\": \"/\", // fraction slash\n};\n\nconst CHAR_REGEX = new RegExp(\n `[${Object.keys(CHAR_MAP).join(\"\")}]`,\n \"g\",\n);\n\n/**\n * Normalize Unicode artifacts to ASCII\n * equivalents and strip the given characters.\n *\n * @param value - The input string\n * @param strip - Characters to remove\n * (e.g. \" -/\" to strip spaces, dashes, slashes)\n */\nexport const clean = (\n value: string,\n strip: string = \"\",\n): string => {\n let result = value.replace(\n CHAR_REGEX,\n (ch) => CHAR_MAP[ch] ?? ch,\n );\n if (strip) {\n for (const ch of strip) {\n result = result.replaceAll(ch, \"\");\n }\n }\n return result;\n};\n"],"mappings":";;;;;;;;;AAQA,MAAM,WAAmC;CAEvC,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CAEV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CAEV,KAAU;CACV,KAAU;CACV,KAAU;CAEV,QAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CAEV,KAAU;CACV,KAAU;AACZ;AAEA,MAAM,aAAa,IAAI,OACrB,IAAI,OAAO,KAAK,QAAQ,EAAE,KAAK,EAAE,EAAE,IACnC,GACF;;;;;;;;;AAUA,MAAa,SACX,OACA,QAAgB,OACL;CACX,IAAI,SAAS,MAAM,QACjB,aACC,OAAO,SAAS,OAAO,EAC1B;CACA,IAAI,OACF,KAAK,MAAM,MAAM,OACf,SAAS,OAAO,WAAW,IAAI,EAAE;CAGrC,OAAO;AACT"}
|
package/dist/_util/date.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","names":[],"sources":["../../src/_util/date.ts"],"sourcesContent":["/** Validate a calendar date via Date round-trip. */\nexport const isValidDate = (\n year: number,\n month: number,\n day: number,\n): boolean => {\n const d = new Date(year, month - 1, day);\n return (\n d.getFullYear() === year &&\n d.getMonth() === month - 1 &&\n d.getDate() === day\n );\n};\n\n/**\n * Resolve a 2-digit year to a 4-digit year using a\n * rolling pivot: years after the current year are\n * assumed to be in the previous century.\n */\nexport const resolveTwoDigitYear = (yy: number): number => {\n const y = 2000 + yy;\n return y > new Date().getFullYear() ? y - 100 : y;\n};\n"],"mappings":";;AACA,MAAa,eACX,MACA,OACA,QACY;CACZ,MAAM,IAAI,IAAI,KAAK,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"date.js","names":[],"sources":["../../src/_util/date.ts"],"sourcesContent":["/** Validate a calendar date via Date round-trip. */\nexport const isValidDate = (\n year: number,\n month: number,\n day: number,\n): boolean => {\n const d = new Date(year, month - 1, day);\n return (\n d.getFullYear() === year &&\n d.getMonth() === month - 1 &&\n d.getDate() === day\n );\n};\n\n/**\n * Resolve a 2-digit year to a 4-digit year using a\n * rolling pivot: years after the current year are\n * assumed to be in the previous century.\n */\nexport const resolveTwoDigitYear = (yy: number): number => {\n const y = 2000 + yy;\n return y > new Date().getFullYear() ? y - 100 : y;\n};\n"],"mappings":";;AACA,MAAa,eACX,MACA,OACA,QACY;CACZ,MAAM,IAAI,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;CACvC,OACE,EAAE,YAAY,MAAM,QACpB,EAAE,SAAS,MAAM,QAAQ,KACzB,EAAE,QAAQ,MAAM;AAEpB;;;;;;AAOA,MAAa,uBAAuB,OAAuB;CACzD,MAAM,IAAI,MAAO;CACjB,OAAO,qBAAI,IAAI,KAAK,GAAE,YAAY,IAAI,IAAI,MAAM;AAClD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","names":[],"sources":["../../src/_util/generate.ts"],"sourcesContent":["/**\n * Helpers for generating random valid identifiers.\n * NOT cryptographically secure; use only for\n * testing, demos, and form placeholders.\n */\n\n/** Generate a string of n random decimal digits. */\nexport const randomDigits = (n: number): string => {\n let result = \"\";\n for (let i = 0; i < n; i++) {\n result += String(Math.floor(Math.random() * 10));\n }\n return result;\n};\n\n/**\n * Generate a random integer in [min, max]\n * (inclusive).\n */\nexport const randomInt = (\n min: number,\n max: number,\n): number =>\n min + Math.floor(Math.random() * (max - min + 1));\n\n/**\n * Pick a random element from a non-empty array.\n * Throws if the array is empty so generators that\n * declare a fixed pool fail loudly instead of\n * returning `undefined`.\n */\nexport const randomPick = <T>(values: readonly T[]): T => {\n if (values.length === 0) {\n throw new Error(\"randomPick called with empty array\");\n }\n const idx = randomInt(0, values.length - 1);\n // SAFETY: idx is bounded by values.length and the\n // array is non-empty (checked above).\n const value = values[idx];\n if (value === undefined) {\n throw new Error(\"randomPick produced undefined\");\n }\n return value;\n};\n\n/**\n * Pick a random character from a non-empty string.\n * Same contract as `randomPick` for arrays.\n */\nexport const randomChar = (chars: string): string => {\n if (chars.length === 0) {\n throw new Error(\"randomChar called with empty string\");\n }\n const idx = randomInt(0, chars.length - 1);\n // SAFETY: idx is bounded by chars.length and the\n // string is non-empty (checked above).\n const ch = chars[idx];\n if (ch === undefined) {\n throw new Error(\"randomChar produced undefined\");\n }\n return ch;\n};\n"],"mappings":";;;;;;;AAOA,MAAa,gBAAgB,MAAsB;CACjD,IAAI,SAAS;
|
|
1
|
+
{"version":3,"file":"generate.js","names":[],"sources":["../../src/_util/generate.ts"],"sourcesContent":["/**\n * Helpers for generating random valid identifiers.\n * NOT cryptographically secure; use only for\n * testing, demos, and form placeholders.\n */\n\n/** Generate a string of n random decimal digits. */\nexport const randomDigits = (n: number): string => {\n let result = \"\";\n for (let i = 0; i < n; i++) {\n result += String(Math.floor(Math.random() * 10));\n }\n return result;\n};\n\n/**\n * Generate a random integer in [min, max]\n * (inclusive).\n */\nexport const randomInt = (\n min: number,\n max: number,\n): number =>\n min + Math.floor(Math.random() * (max - min + 1));\n\n/**\n * Pick a random element from a non-empty array.\n * Throws if the array is empty so generators that\n * declare a fixed pool fail loudly instead of\n * returning `undefined`.\n */\nexport const randomPick = <T>(values: readonly T[]): T => {\n if (values.length === 0) {\n throw new Error(\"randomPick called with empty array\");\n }\n const idx = randomInt(0, values.length - 1);\n // SAFETY: idx is bounded by values.length and the\n // array is non-empty (checked above).\n const value = values[idx];\n if (value === undefined) {\n throw new Error(\"randomPick produced undefined\");\n }\n return value;\n};\n\n/**\n * Pick a random character from a non-empty string.\n * Same contract as `randomPick` for arrays.\n */\nexport const randomChar = (chars: string): string => {\n if (chars.length === 0) {\n throw new Error(\"randomChar called with empty string\");\n }\n const idx = randomInt(0, chars.length - 1);\n // SAFETY: idx is bounded by chars.length and the\n // string is non-empty (checked above).\n const ch = chars[idx];\n if (ch === undefined) {\n throw new Error(\"randomChar produced undefined\");\n }\n return ch;\n};\n"],"mappings":";;;;;;;AAOA,MAAa,gBAAgB,MAAsB;CACjD,IAAI,SAAS;CACb,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,UAAU,OAAO,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE,CAAC;CAEjD,OAAO;AACT;;;;;AAMA,MAAa,aACX,KACA,QAEA,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,MAAM,EAAE;;;;;;;AAQlD,MAAa,cAAiB,WAA4B;CACxD,IAAI,OAAO,WAAW,GACpB,MAAM,IAAI,MAAM,oCAAoC;CAKtD,MAAM,QAAQ,OAHF,UAAU,GAAG,OAAO,SAAS,CAGlB;CACvB,IAAI,UAAU,KAAA,GACZ,MAAM,IAAI,MAAM,+BAA+B;CAEjD,OAAO;AACT;;;;;AAMA,MAAa,cAAc,UAA0B;CACnD,IAAI,MAAM,WAAW,GACnB,MAAM,IAAI,MAAM,qCAAqC;CAKvD,MAAM,KAAK,MAHC,UAAU,GAAG,MAAM,SAAS,CAGrB;CACnB,IAAI,OAAO,KAAA,GACT,MAAM,IAAI,MAAM,+BAA+B;CAEjD,OAAO;AACT"}
|
package/dist/_util/result.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","names":[],"sources":["../../src/_util/result.ts"],"sourcesContent":["import type { StdnumError, ValidateResult } from \"../types\";\n\n/** Create an error ValidateResult. */\nexport const err = (\n code: StdnumError[\"code\"],\n message: string,\n): ValidateResult => ({\n valid: false,\n error: { code, message },\n});\n"],"mappings":";;AAGA,MAAa,OACX,MACA,aACoB;CACpB,OAAO;CACP,OAAO;EAAE;EAAM;
|
|
1
|
+
{"version":3,"file":"result.js","names":[],"sources":["../../src/_util/result.ts"],"sourcesContent":["import type { StdnumError, ValidateResult } from \"../types\";\n\n/** Create an error ValidateResult. */\nexport const err = (\n code: StdnumError[\"code\"],\n message: string,\n): ValidateResult => ({\n valid: false,\n error: { code, message },\n});\n"],"mappings":";;AAGA,MAAa,OACX,MACA,aACoB;CACpB,OAAO;CACP,OAAO;EAAE;EAAM;CAAQ;AACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.js","names":[],"sources":["../../src/_util/strings.ts"],"sourcesContent":["/** Check if the string contains only digits. */\nexport const isdigits = (value: string): boolean =>\n value.length > 0 && /^\\d+$/.test(value);\n\n/**\n * Check if the string contains only ASCII\n * letters (a-z, A-Z).\n */\nexport const isalpha = (value: string): boolean =>\n value.length > 0 && /^[a-zA-Z]+$/.test(value);\n\n/**\n * Check if the string contains only ASCII\n * letters and digits.\n */\nexport const isalnum = (value: string): boolean =>\n value.length > 0 && /^[a-zA-Z0-9]+$/.test(value);\n\n/**\n * Convert a single character to its numeric\n * value (0-9 for digits, 10-35 for A-Z).\n */\nexport const charValue = (ch: string): number => {\n const code = ch.charCodeAt(0);\n // 0-9\n if (code >= 48 && code <= 57) return code - 48;\n // A-Z\n if (code >= 65 && code <= 90) return code - 55;\n // a-z\n if (code >= 97 && code <= 122) return code - 87;\n return 0;\n};\n"],"mappings":";;AACA,MAAa,YAAY,UACvB,MAAM,SAAS,KAAK,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"strings.js","names":[],"sources":["../../src/_util/strings.ts"],"sourcesContent":["/** Check if the string contains only digits. */\nexport const isdigits = (value: string): boolean =>\n value.length > 0 && /^\\d+$/.test(value);\n\n/**\n * Check if the string contains only ASCII\n * letters (a-z, A-Z).\n */\nexport const isalpha = (value: string): boolean =>\n value.length > 0 && /^[a-zA-Z]+$/.test(value);\n\n/**\n * Check if the string contains only ASCII\n * letters and digits.\n */\nexport const isalnum = (value: string): boolean =>\n value.length > 0 && /^[a-zA-Z0-9]+$/.test(value);\n\n/**\n * Convert a single character to its numeric\n * value (0-9 for digits, 10-35 for A-Z).\n */\nexport const charValue = (ch: string): number => {\n const code = ch.charCodeAt(0);\n // 0-9\n if (code >= 48 && code <= 57) return code - 48;\n // A-Z\n if (code >= 65 && code <= 90) return code - 55;\n // a-z\n if (code >= 97 && code <= 122) return code - 87;\n return 0;\n};\n"],"mappings":";;AACA,MAAa,YAAY,UACvB,MAAM,SAAS,KAAK,QAAQ,KAAK,KAAK;;;;;AAMxC,MAAa,WAAW,UACtB,MAAM,SAAS,KAAK,cAAc,KAAK,KAAK;;;;;AAM9C,MAAa,WAAW,UACtB,MAAM,SAAS,KAAK,iBAAiB,KAAK,KAAK;;;;;AAMjD,MAAa,aAAa,OAAuB;CAC/C,MAAM,OAAO,GAAG,WAAW,CAAC;CAE5B,IAAI,QAAQ,MAAM,QAAQ,IAAI,OAAO,OAAO;CAE5C,IAAI,QAAQ,MAAM,QAAQ,IAAI,OAAO,OAAO;CAE5C,IAAI,QAAQ,MAAM,QAAQ,KAAK,OAAO,OAAO;CAC7C,OAAO;AACT"}
|
package/dist/ad/nrt.d.ts
CHANGED
|
@@ -1,13 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ad/nrt.d.ts
|
|
4
4
|
/** Generate a random valid Andorra NRT. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* NRT (Número de Registre Tributari, Andorra tax number).
|
|
8
|
+
*
|
|
9
|
+
* The NRT identifies legal and natural entities for tax
|
|
10
|
+
* purposes. It consists of one letter indicating entity
|
|
11
|
+
* type, six digits, and a check letter.
|
|
12
|
+
*
|
|
13
|
+
* Entity type prefixes:
|
|
14
|
+
* F — companies (digits <= 699999)
|
|
15
|
+
* A, L — other entities (digits 700000-799999)
|
|
16
|
+
* C, D, E, G, O, P, U — other types
|
|
17
|
+
*
|
|
18
|
+
* @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Andorra-TIN.pdf
|
|
19
|
+
*/
|
|
6
20
|
declare const compact: (value: string) => string;
|
|
7
21
|
declare const validate: (value: string) => ValidateResult;
|
|
8
22
|
declare const format: (value: string) => string;
|
|
9
23
|
/** Andorra NRT (Número de Registre Tributari). */
|
|
10
|
-
declare const nrt:
|
|
24
|
+
declare const nrt: CountryValidator<"AD">;
|
|
11
25
|
//#endregion
|
|
12
26
|
export { compact, nrt as default, format, generate, validate };
|
|
13
27
|
//# sourceMappingURL=nrt.d.ts.map
|
package/dist/ad/nrt.js
CHANGED
|
@@ -3,20 +3,6 @@ import { randomChar, randomDigits, randomInt } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/ad/nrt.ts
|
|
6
|
-
/**
|
|
7
|
-
* NRT (Número de Registre Tributari, Andorra tax number).
|
|
8
|
-
*
|
|
9
|
-
* The NRT identifies legal and natural entities for tax
|
|
10
|
-
* purposes. It consists of one letter indicating entity
|
|
11
|
-
* type, six digits, and a check letter.
|
|
12
|
-
*
|
|
13
|
-
* Entity type prefixes:
|
|
14
|
-
* F — companies (digits <= 699999)
|
|
15
|
-
* A, L — other entities (digits 700000-799999)
|
|
16
|
-
* C, D, E, G, O, P, U — other types
|
|
17
|
-
*
|
|
18
|
-
* @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Andorra-TIN.pdf
|
|
19
|
-
*/
|
|
20
6
|
const NRT_PREFIXES = "CDEGOPU";
|
|
21
7
|
/** Generate a random valid Andorra NRT. */
|
|
22
8
|
const generate = () => {
|
|
@@ -51,6 +37,7 @@ const nrt = {
|
|
|
51
37
|
abbreviation: "NRT",
|
|
52
38
|
aliases: ["NRT", "Número de Registre Tributari"],
|
|
53
39
|
candidatePattern: "[A-Z]-?\\d{6}-?[A-Z]",
|
|
40
|
+
scope: "country",
|
|
54
41
|
country: "AD",
|
|
55
42
|
entityType: "any",
|
|
56
43
|
sourceUrl: "https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Andorra-TIN.pdf",
|
package/dist/ad/nrt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nrt.js","names":[],"sources":["../../src/ad/nrt.ts"],"sourcesContent":["const NRT_PREFIXES = \"CDEGOPU\";\n\n/** Generate a random valid Andorra NRT. */\nconst generate = (): string => {\n const prefix = randomChar(NRT_PREFIXES);\n const digits = randomDigits(6);\n const suffix = String.fromCodePoint(\n 65 + randomInt(0, 25),\n );\n return `${prefix}${digits}${suffix}`;\n};\n\n/**\n * NRT (Número de Registre Tributari, Andorra tax number).\n *\n * The NRT identifies legal and natural entities for tax\n * purposes. It consists of one letter indicating entity\n * type, six digits, and a check letter.\n *\n * Entity type prefixes:\n * F — companies (digits <= 699999)\n * A, L — other entities (digits 700000-799999)\n * C, D, E, G, O, P, U — other types\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Andorra-TIN.pdf\n */\n\nimport { clean } from \"#util/clean\";\nimport {\n randomChar,\n randomDigits,\n randomInt,\n} from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"nrt.js","names":[],"sources":["../../src/ad/nrt.ts"],"sourcesContent":["const NRT_PREFIXES = \"CDEGOPU\";\n\n/** Generate a random valid Andorra NRT. */\nconst generate = (): string => {\n const prefix = randomChar(NRT_PREFIXES);\n const digits = randomDigits(6);\n const suffix = String.fromCodePoint(\n 65 + randomInt(0, 25),\n );\n return `${prefix}${digits}${suffix}`;\n};\n\n/**\n * NRT (Número de Registre Tributari, Andorra tax number).\n *\n * The NRT identifies legal and natural entities for tax\n * purposes. It consists of one letter indicating entity\n * type, six digits, and a check letter.\n *\n * Entity type prefixes:\n * F — companies (digits <= 699999)\n * A, L — other entities (digits 700000-799999)\n * C, D, E, G, O, P, U — other types\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Andorra-TIN.pdf\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport {\n randomChar,\n randomDigits,\n randomInt,\n} from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst VALID_PREFIXES = \"ACDEFGLOPU\";\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").toUpperCase().trim();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"Andorra NRT must be 8 characters\",\n );\n }\n // SAFETY: v.length === 8 guarantees both positions\n // exist; oxlint cannot see the length guard.\n // eslint-disable-next-line no-non-null-assertion\n const prefix = v[0]!;\n // eslint-disable-next-line no-non-null-assertion\n const tail = v[7]!;\n const digits = v.slice(1, 7);\n if (!/^[A-Z]$/.test(prefix) || !/^[A-Z]$/.test(tail)) {\n return err(\n \"INVALID_FORMAT\",\n \"Andorra NRT must start and end with a letter\",\n );\n }\n if (!isdigits(digits)) {\n return err(\n \"INVALID_FORMAT\",\n \"Andorra NRT must have 6 digits in the middle\",\n );\n }\n if (!VALID_PREFIXES.includes(prefix)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Andorra NRT has an invalid entity type prefix\",\n );\n }\n if (prefix === \"F\" && digits > \"699999\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Andorra NRT F-type digits must be <= 699999\",\n );\n }\n if (\n (prefix === \"A\" || prefix === \"L\") &&\n !(\"699999\" < digits && digits < \"800000\")\n ) {\n return err(\n \"INVALID_COMPONENT\",\n \"Andorra NRT A/L-type digits must be 700000-799999\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v[0]}-${v.slice(1, 7)}-${v[7]}`;\n};\n\n/** Andorra NRT (Número de Registre Tributari). */\nconst nrt: CountryValidator<\"AD\"> = {\n name: \"Andorra Tax Number\",\n localName: \"Número de Registre Tributari\",\n abbreviation: \"NRT\",\n aliases: [\"NRT\", \"Número de Registre Tributari\"] as const,\n candidatePattern: \"[A-Z]-?\\\\d{6}-?[A-Z]\",\n scope: \"country\",\n country: \"AD\",\n entityType: \"any\",\n sourceUrl:\n \"https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Andorra-TIN.pdf\",\n examples: [\"U132950X\", \"D059888N\", \"F123456M\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nrt;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAAA,MAAM,eAAe;;AAGrB,MAAM,iBAAyB;CAM7B,OAAO,GALQ,WAAW,YAKX,IAJA,aAAa,CAIJ,IAHT,OAAO,cACpB,KAAK,UAAU,GAAG,EAAE,CAEW;AACnC;AA+BA,MAAM,iBAAiB;AAEvB,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK;AAEzC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,kCACF;CAKF,MAAM,SAAS,EAAE;CAEjB,MAAM,OAAO,EAAE;CACf,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC;CAC3B,IAAI,CAAC,UAAU,KAAK,MAAM,KAAK,CAAC,UAAU,KAAK,IAAI,GACjD,OAAO,IACL,kBACA,8CACF;CAEF,IAAI,CAAC,SAAS,MAAM,GAClB,OAAO,IACL,kBACA,8CACF;CAEF,IAAI,CAAC,eAAe,SAAS,MAAM,GACjC,OAAO,IACL,qBACA,+CACF;CAEF,IAAI,WAAW,OAAO,SAAS,UAC7B,OAAO,IACL,qBACA,6CACF;CAEF,KACG,WAAW,OAAO,WAAW,QAC9B,EAAE,WAAW,UAAU,SAAS,WAEhC,OAAO,IACL,qBACA,mDACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE;AACvC;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,8BAA8B;CAC/C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU;EAAC;EAAY;EAAY;CAAU;CAC7C;CACA;CACA;CACA;AACF"}
|
package/dist/ae/eid.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ae/eid.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -10,7 +10,7 @@ declare const format: (value: string) => string;
|
|
|
10
10
|
*/
|
|
11
11
|
declare const generate: () => string;
|
|
12
12
|
/** UAE Emirates ID. */
|
|
13
|
-
declare const eid:
|
|
13
|
+
declare const eid: CountryValidator<"AE">;
|
|
14
14
|
//#endregion
|
|
15
15
|
export { compact, eid as default, format, generate, validate };
|
|
16
16
|
//# sourceMappingURL=eid.d.ts.map
|
package/dist/ae/eid.js
CHANGED
|
@@ -1,20 +1,9 @@
|
|
|
1
|
+
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
|
-
import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
|
|
5
5
|
import { isdigits } from "../_util/strings.js";
|
|
6
6
|
//#region src/ae/eid.ts
|
|
7
|
-
/**
|
|
8
|
-
* Emirates ID (رقم الهوية, UAE).
|
|
9
|
-
*
|
|
10
|
-
* 15 digits: 784-YYYY-NNNNNNN-C where 784 is the
|
|
11
|
-
* ISO 3166-1 numeric code for the UAE, YYYY is the
|
|
12
|
-
* year of birth, NNNNNNN is a serial number, and C
|
|
13
|
-
* is a Luhn check digit.
|
|
14
|
-
*
|
|
15
|
-
* @see https://en.wikipedia.org/wiki/National_identification_number#United_Arab_Emirates
|
|
16
|
-
* @see https://u.ae/en/information-and-services/visa-and-emirates-id/emirates-id
|
|
17
|
-
*/
|
|
18
7
|
const compact = (value) => clean(value, " -/");
|
|
19
8
|
const validate = (value) => {
|
|
20
9
|
const v = compact(value);
|
|
@@ -57,6 +46,7 @@ const eid = {
|
|
|
57
46
|
"رقم الهوية"
|
|
58
47
|
],
|
|
59
48
|
candidatePattern: "784-\\d{4}-\\d{7}-\\d",
|
|
49
|
+
scope: "country",
|
|
60
50
|
country: "AE",
|
|
61
51
|
entityType: "person",
|
|
62
52
|
lengths: [15],
|
package/dist/ae/eid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eid.js","names":[],"sources":["../../src/ae/eid.ts"],"sourcesContent":["/**\n * Emirates ID (رقم الهوية, UAE).\n *\n * 15 digits: 784-YYYY-NNNNNNN-C where 784 is the\n * ISO 3166-1 numeric code for the UAE, YYYY is the\n * year of birth, NNNNNNN is a serial number, and C\n * is a Luhn check digit.\n *\n * @see https://en.wikipedia.org/wiki/National_identification_number#United_Arab_Emirates\n * @see https://u.ae/en/information-and-services/visa-and-emirates-id/emirates-id\n */\n\nimport {\n luhnChecksum,\n luhnValidate,\n} from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"eid.js","names":[],"sources":["../../src/ae/eid.ts"],"sourcesContent":["/**\n * Emirates ID (رقم الهوية, UAE).\n *\n * 15 digits: 784-YYYY-NNNNNNN-C where 784 is the\n * ISO 3166-1 numeric code for the UAE, YYYY is the\n * year of birth, NNNNNNN is a serial number, and C\n * is a Luhn check digit.\n *\n * @see https://en.wikipedia.org/wiki/National_identification_number#United_Arab_Emirates\n * @see https://u.ae/en/information-and-services/visa-and-emirates-id/emirates-id\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport {\n luhnChecksum,\n luhnValidate,\n} from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -/\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 15) {\n return err(\n \"INVALID_LENGTH\",\n \"Emirates ID must be 15 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Emirates ID must contain only digits\",\n );\n }\n if (!v.startsWith(\"784\")) {\n return err(\n \"INVALID_COMPONENT\",\n \"Emirates ID must start with 784\",\n );\n }\n if (!luhnValidate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Emirates ID Luhn check digit is invalid\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return [\n v.slice(0, 3),\n v.slice(3, 7),\n v.slice(7, 14),\n v.slice(14),\n ].join(\"-\");\n};\n\n/**\n * Generate a random valid Emirates ID in compact\n * form. NOT cryptographically secure.\n */\nconst generate = (): string => {\n const yyyy = String(randomInt(1950, 2010));\n const serial = randomDigits(7);\n const partial = `784${yyyy}${serial}0`;\n const remainder = luhnChecksum(partial);\n const check = (10 - remainder) % 10;\n return `784${yyyy}${serial}${String(check)}`;\n};\n\n/** UAE Emirates ID. */\nconst eid: CountryValidator<\"AE\"> = {\n name: \"Emirates ID\",\n localName: \"رقم الهوية\",\n abbreviation: \"EID\",\n aliases: [\"EID\", \"Emirates ID\", \"رقم الهوية\"] as const,\n candidatePattern: \"784-\\\\d{4}-\\\\d{7}-\\\\d\",\n scope: \"country\",\n country: \"AE\",\n entityType: \"person\",\n lengths: [15],\n examples: [\n \"784198012345678\",\n \"784197912345671\",\n \"784195204640486\",\n \"784196865703050\",\n ] as const,\n description:\n \"15-digit identity number issued to UAE residents\",\n sourceUrl:\n \"https://u.ae/en/information-and-services/visa-and-emirates-id/emirates-id\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default eid;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;AA0BA,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,GACb,OAAO,IACL,kBACA,sCACF;CAEF,IAAI,CAAC,EAAE,WAAW,KAAK,GACrB,OAAO,IACL,qBACA,iCACF;CAEF,IAAI,CAAC,aAAa,CAAC,GACjB,OAAO,IACL,oBACA,yCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO;EACL,EAAE,MAAM,GAAG,CAAC;EACZ,EAAE,MAAM,GAAG,CAAC;EACZ,EAAE,MAAM,GAAG,EAAE;EACb,EAAE,MAAM,EAAE;CACZ,EAAE,KAAK,GAAG;AACZ;;;;;AAMA,MAAM,iBAAyB;CAC7B,MAAM,OAAO,OAAO,UAAU,MAAM,IAAI,CAAC;CACzC,MAAM,SAAS,aAAa,CAAC;CAG7B,MAAM,SAAS,KADG,aAAa,MADT,OAAO,OAAO,EAER,KAAK;CACjC,OAAO,MAAM,OAAO,SAAS,OAAO,KAAK;AAC3C;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EAAC;EAAO;EAAe;CAAY;CAC5C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,EAAE;CACZ,UAAU;EACR;EACA;EACA;EACA;CACF;CACA,aACE;CACF,WACE;CACF;CACA;CACA;CACA;AACF"}
|
package/dist/ai/tin.d.ts
CHANGED
|
@@ -1,8 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ai/tin.d.ts
|
|
4
4
|
/** Generate a random valid Anguilla TIN. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* TIN (Anguilla Tax Identification Number).
|
|
8
|
+
*
|
|
9
|
+
* Issued by the Inland Revenue Department (IRD) to
|
|
10
|
+
* individuals and entities for tax purposes. The
|
|
11
|
+
* number consists of 10 digits including a prefix
|
|
12
|
+
* digit and check digit:
|
|
13
|
+
* - Prefix 1: individual TIN
|
|
14
|
+
* - Prefix 2: non-individual (business) TIN
|
|
15
|
+
*
|
|
16
|
+
* Formatted as XXXXX-XXXXX.
|
|
17
|
+
*
|
|
18
|
+
* Source: OECD CRS TIN information sheet.
|
|
19
|
+
*
|
|
20
|
+
* PERSON/ENTITY
|
|
21
|
+
*
|
|
22
|
+
* @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Anguilla-TIN.pdf
|
|
23
|
+
*/
|
|
6
24
|
declare const compact: (value: string) => string;
|
|
7
25
|
declare const validate: (value: string) => ValidateResult;
|
|
8
26
|
declare const format: (value: string) => string;
|
|
@@ -13,7 +31,7 @@ declare const format: (value: string) => string;
|
|
|
13
31
|
* (format-only validation, no published check
|
|
14
32
|
* digit algorithm).
|
|
15
33
|
*/
|
|
16
|
-
declare const tin:
|
|
34
|
+
declare const tin: CountryValidator<"AI">;
|
|
17
35
|
//#endregion
|
|
18
36
|
export { compact, tin as default, format, generate, validate };
|
|
19
37
|
//# sourceMappingURL=tin.d.ts.map
|
package/dist/ai/tin.js
CHANGED
|
@@ -2,24 +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/ai/tin.ts
|
|
5
|
-
/**
|
|
6
|
-
* TIN (Anguilla Tax Identification Number).
|
|
7
|
-
*
|
|
8
|
-
* Issued by the Inland Revenue Department (IRD) to
|
|
9
|
-
* individuals and entities for tax purposes. The
|
|
10
|
-
* number consists of 10 digits including a prefix
|
|
11
|
-
* digit and check digit:
|
|
12
|
-
* - Prefix 1: individual TIN
|
|
13
|
-
* - Prefix 2: non-individual (business) TIN
|
|
14
|
-
*
|
|
15
|
-
* Formatted as XXXXX-XXXXX.
|
|
16
|
-
*
|
|
17
|
-
* Source: OECD CRS TIN information sheet.
|
|
18
|
-
*
|
|
19
|
-
* PERSON/ENTITY
|
|
20
|
-
*
|
|
21
|
-
* @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Anguilla-TIN.pdf
|
|
22
|
-
*/
|
|
23
5
|
/** Generate a random valid Anguilla TIN. */
|
|
24
6
|
const generate = () => {
|
|
25
7
|
return (Math.random() < .5 ? "1" : "2") + randomDigits(9);
|
|
@@ -55,6 +37,7 @@ const tin = {
|
|
|
55
37
|
abbreviation: "TIN",
|
|
56
38
|
aliases: ["TIN"],
|
|
57
39
|
candidatePattern: "\\d{11}",
|
|
40
|
+
scope: "country",
|
|
58
41
|
country: "AI",
|
|
59
42
|
entityType: "any",
|
|
60
43
|
lengths: [10],
|
package/dist/ai/tin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tin.js","names":[],"sources":["../../src/ai/tin.ts"],"sourcesContent":["/** Generate a random valid Anguilla TIN. */\nconst generate = (): string => {\n const prefix = Math.random() < 0.5 ? \"1\" : \"2\";\n return prefix + randomDigits(9);\n};\n\n/**\n * TIN (Anguilla Tax Identification Number).\n *\n * Issued by the Inland Revenue Department (IRD) to\n * individuals and entities for tax purposes. The\n * number consists of 10 digits including a prefix\n * digit and check digit:\n * - Prefix 1: individual TIN\n * - Prefix 2: non-individual (business) TIN\n *\n * Formatted as XXXXX-XXXXX.\n *\n * Source: OECD CRS TIN information sheet.\n *\n * PERSON/ENTITY\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Anguilla-TIN.pdf\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"tin.js","names":[],"sources":["../../src/ai/tin.ts"],"sourcesContent":["/** Generate a random valid Anguilla TIN. */\nconst generate = (): string => {\n const prefix = Math.random() < 0.5 ? \"1\" : \"2\";\n return prefix + randomDigits(9);\n};\n\n/**\n * TIN (Anguilla Tax Identification Number).\n *\n * Issued by the Inland Revenue Department (IRD) to\n * individuals and entities for tax purposes. The\n * number consists of 10 digits including a prefix\n * digit and check digit:\n * - Prefix 1: individual TIN\n * - Prefix 2: non-individual (business) TIN\n *\n * Formatted as XXXXX-XXXXX.\n *\n * Source: OECD CRS TIN information sheet.\n *\n * PERSON/ENTITY\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Anguilla-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\";\n\nconst compact = (value: string): string => {\n return clean(value, \" -\").trim();\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 \"Anguilla TIN must be 10 digits\",\n );\n }\n\n if (!/^\\d{10}$/.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Anguilla TIN must contain only digits\",\n );\n }\n\n const prefix = v[0];\n\n if (prefix !== \"1\" && prefix !== \"2\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Anguilla TIN must start with 1 (individual) or 2 (business)\",\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, 5)}-${v.slice(5)}`;\n};\n\n/**\n * Anguilla Tax Identification Number.\n *\n * Examples derived from stdnum-js test suite\n * (format-only validation, no published check\n * digit algorithm).\n */\nconst tin: CountryValidator<\"AI\"> = {\n name: \"Anguilla Tax Identification Number\",\n localName: \"Tax Identification Number\",\n abbreviation: \"TIN\",\n aliases: [\"TIN\"] as const,\n candidatePattern: \"\\\\d{11}\",\n scope: \"country\",\n country: \"AI\",\n entityType: \"any\",\n lengths: [10] as const,\n examples: [\"1234567890\", \"2345678901\"] as const,\n compact,\n format,\n validate,\n description:\n \"Anguilla tax number issued by the Inland Revenue Department\",\n sourceUrl:\n \"https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Anguilla-TIN.pdf\",\n generate,\n};\n\nexport default tin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AACA,MAAM,iBAAyB;CAE7B,QADe,KAAK,OAAO,IAAI,KAAM,MAAM,OAC3B,aAAa,CAAC;AAChC;AA8BA,MAAM,WAAW,UAA0B;CACzC,OAAO,MAAM,OAAO,IAAI,EAAE,KAAK;AACjC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,gCACF;CAGF,IAAI,CAAC,WAAW,KAAK,CAAC,GACpB,OAAO,IACL,kBACA,uCACF;CAGF,MAAM,SAAS,EAAE;CAEjB,IAAI,WAAW,OAAO,WAAW,KAC/B,OAAO,IACL,qBACA,6DACF;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,CAAC;AACtC;;;;;;;;AASA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,KAAK;CACf,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,cAAc,YAAY;CACrC;CACA;CACA;CACA,aACE;CACF,WACE;CACF;AACF"}
|
package/dist/al/nipt.d.ts
CHANGED
|
@@ -1,13 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/al/nipt.d.ts
|
|
4
4
|
/** Generate a random valid Albanian NIPT. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* NIPT (Numri i Identifikimit për Personin e Tatueshëm,
|
|
8
|
+
* Albanian tax number).
|
|
9
|
+
*
|
|
10
|
+
* 10 characters: a letter (A-M) indicating the decade or
|
|
11
|
+
* birth decade, 8 digits encoding year/month/day/serial,
|
|
12
|
+
* and a trailing check letter. The check digit algorithm
|
|
13
|
+
* is undocumented.
|
|
14
|
+
*
|
|
15
|
+
* @see https://www.tatime.gov.al/eng/c/4/103/business-lifecycle
|
|
16
|
+
*/
|
|
6
17
|
declare const compact: (value: string) => string;
|
|
7
18
|
declare const validate: (value: string) => ValidateResult;
|
|
8
19
|
declare const format: (value: string) => string;
|
|
9
20
|
/** Albanian NIPT (tax identification number). */
|
|
10
|
-
declare const nipt:
|
|
21
|
+
declare const nipt: CountryValidator<"AL">;
|
|
11
22
|
//#endregion
|
|
12
23
|
export { compact, nipt as default, format, generate, validate };
|
|
13
24
|
//# sourceMappingURL=nipt.d.ts.map
|
package/dist/al/nipt.js
CHANGED
|
@@ -2,17 +2,6 @@ import { clean } from "../_util/clean.js";
|
|
|
2
2
|
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
//#region src/al/nipt.ts
|
|
5
|
-
/**
|
|
6
|
-
* NIPT (Numri i Identifikimit për Personin e Tatueshëm,
|
|
7
|
-
* Albanian tax number).
|
|
8
|
-
*
|
|
9
|
-
* 10 characters: a letter (A-M) indicating the decade or
|
|
10
|
-
* birth decade, 8 digits encoding year/month/day/serial,
|
|
11
|
-
* and a trailing check letter. The check digit algorithm
|
|
12
|
-
* is undocumented.
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.tatime.gov.al/eng/c/4/103/business-lifecycle
|
|
15
|
-
*/
|
|
16
5
|
/** Generate a random valid Albanian NIPT. */
|
|
17
6
|
const generate = () => {
|
|
18
7
|
return `${String.fromCodePoint(65 + randomInt(0, 12))}${randomDigits(8)}${String.fromCodePoint(65 + randomInt(0, 25))}`;
|
|
@@ -41,6 +30,7 @@ const nipt = {
|
|
|
41
30
|
abbreviation: "NIPT",
|
|
42
31
|
aliases: ["NIPT", "NUIS"],
|
|
43
32
|
candidatePattern: "[A-Z]\\d{8}[A-Z]",
|
|
33
|
+
scope: "country",
|
|
44
34
|
country: "AL",
|
|
45
35
|
entityType: "any",
|
|
46
36
|
sourceUrl: "https://www.tatime.gov.al/",
|
package/dist/al/nipt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nipt.js","names":[],"sources":["../../src/al/nipt.ts"],"sourcesContent":["/** Generate a random valid Albanian NIPT. */\nconst generate = (): string => {\n const first = String.fromCodePoint(65 + randomInt(0, 12)); // A-M\n const digits = randomDigits(8);\n const last = String.fromCodePoint(65 + randomInt(0, 25)); // A-Z\n return `${first}${digits}${last}`;\n};\n\n/**\n * NIPT (Numri i Identifikimit për Personin e Tatueshëm,\n * Albanian tax number).\n *\n * 10 characters: a letter (A-M) indicating the decade or\n * birth decade, 8 digits encoding year/month/day/serial,\n * and a trailing check letter. The check digit algorithm\n * is undocumented.\n *\n * @see https://www.tatime.gov.al/eng/c/4/103/business-lifecycle\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\
|
|
1
|
+
{"version":3,"file":"nipt.js","names":[],"sources":["../../src/al/nipt.ts"],"sourcesContent":["/** Generate a random valid Albanian NIPT. */\nconst generate = (): string => {\n const first = String.fromCodePoint(65 + randomInt(0, 12)); // A-M\n const digits = randomDigits(8);\n const last = String.fromCodePoint(65 + randomInt(0, 25)); // A-Z\n return `${first}${digits}${last}`;\n};\n\n/**\n * NIPT (Numri i Identifikimit për Personin e Tatueshëm,\n * Albanian tax number).\n *\n * 10 characters: a letter (A-M) indicating the decade or\n * birth decade, 8 digits encoding year/month/day/serial,\n * and a trailing check letter. The check digit algorithm\n * is undocumented.\n *\n * @see https://www.tatime.gov.al/eng/c/4/103/business-lifecycle\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nconst NIPT_RE = /^[A-M]\\d{8}[A-Z]$/;\n\nconst compact = (value: string): string => {\n let v = clean(value, \" \").toUpperCase().trim();\n if (v.startsWith(\"(AL)\")) {\n v = v.slice(4);\n } else if (v.startsWith(\"AL\")) {\n v = v.slice(2);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Albanian NIPT must be 10 characters\",\n );\n }\n if (!NIPT_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Albanian NIPT must be letter + 8 digits + letter\" +\n \" (first letter A-M)\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Albanian NIPT (tax identification number). */\nconst nipt: CountryValidator<\"AL\"> = {\n name: \"Albanian Tax Number\",\n localName:\n \"Numri i Identifikimit për Personin e Tatueshëm\",\n abbreviation: \"NIPT\",\n aliases: [\"NIPT\", \"NUIS\"] as const,\n candidatePattern: \"[A-Z]\\\\d{8}[A-Z]\",\n scope: \"country\",\n country: \"AL\",\n entityType: \"any\",\n sourceUrl: \"https://www.tatime.gov.al/\",\n examples: [\"J91402501L\", \"K22218003V\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nipt;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AACA,MAAM,iBAAyB;CAI7B,OAAO,GAHO,OAAO,cAAc,KAAK,UAAU,GAAG,EAAE,CAGzC,IAFC,aAAa,CAEL,IADV,OAAO,cAAc,KAAK,UAAU,GAAG,EAAE,CACxB;AAChC;AAuBA,MAAM,UAAU;AAEhB,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,GAAG,EAAE,YAAY,EAAE,KAAK;CAC7C,IAAI,EAAE,WAAW,MAAM,GACrB,IAAI,EAAE,MAAM,CAAC;MACR,IAAI,EAAE,WAAW,IAAI,GAC1B,IAAI,EAAE,MAAM,CAAC;CAEf,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,qCACF;CAEF,IAAI,CAAC,QAAQ,KAAK,CAAC,GACjB,OAAO,IACL,kBACA,qEAEF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,OAA+B;CACnC,MAAM;CACN,WACE;CACF,cAAc;CACd,SAAS,CAAC,QAAQ,MAAM;CACxB,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,cAAc,YAAY;CACrC;CACA;CACA;CACA;AACF"}
|
package/dist/am/tin.d.ts
CHANGED
|
@@ -1,13 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/am/tin.d.ts
|
|
4
4
|
/** Generate a random valid Armenian TIN. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* TIN (Tax Identification Number, ՀԾՀ).
|
|
8
|
+
*
|
|
9
|
+
* Armenian taxpayer identification number issued by the
|
|
10
|
+
* State Revenue Committee (SRC). 8 digits; the 8th digit
|
|
11
|
+
* is a check digit calculated from the first 7. The
|
|
12
|
+
* checksum algorithm is not publicly documented, so only
|
|
13
|
+
* format validation is performed.
|
|
14
|
+
*
|
|
15
|
+
* Issued to both individuals and entities.
|
|
16
|
+
*
|
|
17
|
+
* @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Armenia-TIN.pdf
|
|
18
|
+
* @see https://www.src.am/en/taxpayerSearchSystemPage/112
|
|
19
|
+
*/
|
|
6
20
|
declare const compact: (value: string) => string;
|
|
7
21
|
declare const validate: (value: string) => ValidateResult;
|
|
8
22
|
declare const format: (value: string) => string;
|
|
9
23
|
/** Armenian Tax Identification Number. */
|
|
10
|
-
declare const tin:
|
|
24
|
+
declare const tin: CountryValidator<"AM">;
|
|
11
25
|
//#endregion
|
|
12
26
|
export { compact, tin as default, format, generate, validate };
|
|
13
27
|
//# sourceMappingURL=tin.d.ts.map
|
package/dist/am/tin.js
CHANGED
|
@@ -3,20 +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/am/tin.ts
|
|
6
|
-
/**
|
|
7
|
-
* TIN (Tax Identification Number, ՀԾՀ).
|
|
8
|
-
*
|
|
9
|
-
* Armenian taxpayer identification number issued by the
|
|
10
|
-
* State Revenue Committee (SRC). 8 digits; the 8th digit
|
|
11
|
-
* is a check digit calculated from the first 7. The
|
|
12
|
-
* checksum algorithm is not publicly documented, so only
|
|
13
|
-
* format validation is performed.
|
|
14
|
-
*
|
|
15
|
-
* Issued to both individuals and entities.
|
|
16
|
-
*
|
|
17
|
-
* @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Armenia-TIN.pdf
|
|
18
|
-
* @see https://www.src.am/en/taxpayerSearchSystemPage/112
|
|
19
|
-
*/
|
|
20
6
|
/** Generate a random valid Armenian TIN. */
|
|
21
7
|
const generate = () => randomDigits(8);
|
|
22
8
|
const compact = (value) => clean(value, " -").trim();
|
|
@@ -37,6 +23,7 @@ const tin = {
|
|
|
37
23
|
abbreviation: "TIN",
|
|
38
24
|
aliases: ["ՀՎՀՀ", "TIN"],
|
|
39
25
|
candidatePattern: "\\d{8}",
|
|
26
|
+
scope: "country",
|
|
40
27
|
country: "AM",
|
|
41
28
|
entityType: "any",
|
|
42
29
|
lengths: [8],
|
package/dist/am/tin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tin.js","names":[],"sources":["../../src/am/tin.ts"],"sourcesContent":["/** Generate a random valid Armenian TIN. */\nconst generate = (): string => randomDigits(8);\n\n/**\n * TIN (Tax Identification Number, ՀԾՀ).\n *\n * Armenian taxpayer identification number issued by the\n * State Revenue Committee (SRC). 8 digits; the 8th digit\n * is a check digit calculated from the first 7. The\n * checksum algorithm is not publicly documented, so only\n * format validation is performed.\n *\n * Issued to both individuals and entities.\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Armenia-TIN.pdf\n * @see https://www.src.am/en/taxpayerSearchSystemPage/112\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"tin.js","names":[],"sources":["../../src/am/tin.ts"],"sourcesContent":["/** Generate a random valid Armenian TIN. */\nconst generate = (): string => randomDigits(8);\n\n/**\n * TIN (Tax Identification Number, ՀԾՀ).\n *\n * Armenian taxpayer identification number issued by the\n * State Revenue Committee (SRC). 8 digits; the 8th digit\n * is a check digit calculated from the first 7. The\n * checksum algorithm is not publicly documented, so only\n * format validation is performed.\n *\n * Issued to both individuals and entities.\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Armenia-TIN.pdf\n * @see https://www.src.am/en/taxpayerSearchSystemPage/112\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\").trim();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"Armenian TIN must be 8 digits\",\n );\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Armenian TIN must contain only digits\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Armenian Tax Identification Number. */\nconst tin: CountryValidator<\"AM\"> = {\n name: \"Armenian Tax ID\",\n localName: \"Հարկ վճարողի հաշվառման համար\",\n abbreviation: \"TIN\",\n aliases: [\"ՀՎՀՀ\", \"TIN\"] as const,\n candidatePattern: \"\\\\d{8}\",\n scope: \"country\",\n country: \"AM\",\n entityType: \"any\",\n lengths: [8] as const,\n examples: [\"01234561\", \"10048376\"] as const,\n compact,\n format,\n validate,\n sourceUrl:\n \"https://www.oecd.org/tax/automatic-exchange/\" +\n \"crs-implementation-and-assistance/\" +\n \"tax-identification-numbers/Armenia-TIN.pdf\",\n generate,\n};\n\nexport default tin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AACA,MAAM,iBAAyB,aAAa,CAAC;AA2B7C,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,EAAE,KAAK;AAE1B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,+BACF;CAGF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,uCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,KAAK;CACvB,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,YAAY,UAAU;CACjC;CACA;CACA;CACA,WACE;CAGF;AACF"}
|
package/dist/ar/cbu.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ar/cbu.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 CBU. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Argentine Uniform Bank Key. */
|
|
10
|
-
declare const cbu:
|
|
10
|
+
declare const cbu: CountryValidator<"AR">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, cbu as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=cbu.d.ts.map
|