@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
package/dist/bg/egn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"egn.js","names":[],"sources":["../../src/bg/egn.ts"],"sourcesContent":["/**\n * EGN (Единен граждански номер).\n *\n * Bulgarian personal identification number.\n * 10 digits encoding date of birth, serial number,\n * and a check digit.\n *\n * Canonical source:\n * - GRAO regulation PDF describing the EGN structure.\n *\n * We treat this as authoritative over third-party\n * oracle libraries when the checksum or date rules\n * disagree.\n *\n * @see https://www.grao.bg/normact/NaredbaFunkcESGR.pdf\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"egn.js","names":[],"sources":["../../src/bg/egn.ts"],"sourcesContent":["/**\n * EGN (Единен граждански номер).\n *\n * Bulgarian personal identification number.\n * 10 digits encoding date of birth, serial number,\n * and a check digit.\n *\n * Canonical source:\n * - GRAO regulation PDF describing the EGN structure.\n *\n * We treat this as authoritative over third-party\n * oracle libraries when the checksum or date rules\n * disagree.\n *\n * @see https://www.grao.bg/normact/NaredbaFunkcESGR.pdf\n */\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [2, 4, 8, 5, 10, 9, 7, 3, 6] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"EGN must be exactly 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"EGN must contain only digits\",\n );\n }\n\n const yy = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const dd = Number(v.slice(4, 6));\n\n let year: number;\n let month: number;\n if (mm > 40) {\n year = 2000 + yy;\n month = mm - 40;\n } else if (mm > 20) {\n year = 1800 + yy;\n month = mm - 20;\n } else {\n year = 1900 + yy;\n month = mm;\n }\n\n if (!isValidDate(year, month, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"EGN contains an invalid date\",\n );\n }\n\n const sum = weightedSum(v.slice(0, 9), WEIGHTS, 11);\n const check = sum % 10;\n if (check !== Number(v[9])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"EGN check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/**\n * Extract birth date and gender from an EGN.\n * Returns null if the value is not valid.\n */\nconst parse = (value: string): ParsedPersonId | null => {\n const result = validate(value);\n if (!result.valid) return null;\n\n const v = result.compact;\n const yy = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const dd = Number(v.slice(4, 6));\n const serial = Number(v.slice(6, 9));\n\n let year: number;\n let month: number;\n if (mm > 40) {\n year = 2000 + yy;\n month = mm - 40;\n } else if (mm > 20) {\n year = 1800 + yy;\n month = mm - 20;\n } else {\n year = 1900 + yy;\n month = mm;\n }\n\n return {\n birthDate: new Date(year, month - 1, dd),\n gender: serial % 2 === 0 ? \"male\" : \"female\",\n };\n};\n\n/** Generate a random valid EGN. */\nconst generate = (): string => {\n for (;;) {\n const yy = String(randomInt(0, 99)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n const dd = String(randomInt(1, 28)).padStart(2, \"0\");\n const serial = String(randomInt(0, 999)).padStart(\n 3,\n \"0\",\n );\n const payload = yy + mm + dd + serial;\n const sum = weightedSum(payload, WEIGHTS, 11);\n const c = payload + String(sum % 10);\n if (validate(c).valid) return c;\n }\n};\n\n/** Bulgarian Personal Identification Number. */\nconst egn: CountryValidator<\"BG\", ParsedPersonId> = {\n name: \"Bulgarian Personal ID\",\n localName: \"Единен граждански номер\",\n abbreviation: \"ЕГН\",\n aliases: [\n \"ЕГН\",\n \"единен граждански номер\",\n \"EGN\",\n ] as const,\n candidatePattern: \"\\\\d{10}\",\n scope: \"country\",\n country: \"BG\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.grao.bg/normact/NaredbaFunkcESGR.pdf\",\n examples: [\"7523169263\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default egn;\nexport { compact, format, parse, validate, generate };\n"],"mappings":";;;;;;;AA8BA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;AAAC;AAE3C,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAGF,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAE/B,IAAI;CACJ,IAAI;CACJ,IAAI,KAAK,IAAI;EACX,OAAO,MAAO;EACd,QAAQ,KAAK;CACf,OAAO,IAAI,KAAK,IAAI;EAClB,OAAO,OAAO;EACd,QAAQ,KAAK;CACf,OAAO;EACL,OAAO,OAAO;EACd,QAAQ;CACV;CAEA,IAAI,CAAC,YAAY,MAAM,OAAO,EAAE,GAC9B,OAAO,IACL,qBACA,8BACF;CAKF,IAFY,YAAY,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,EAChC,IAAI,OACN,OAAO,EAAE,EAAE,GACvB,OAAO,IACL,oBACA,gCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;;;;AAMvD,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,KAAK;CAC7B,IAAI,CAAC,OAAO,OAAO,OAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAEnC,IAAI;CACJ,IAAI;CACJ,IAAI,KAAK,IAAI;EACX,OAAO,MAAO;EACd,QAAQ,KAAK;CACf,OAAO,IAAI,KAAK,IAAI;EAClB,OAAO,OAAO;EACd,QAAQ,KAAK;CACf,OAAO;EACL,OAAO,OAAO;EACd,QAAQ;CACV;CAEA,OAAO;EACL,WAAW,IAAI,KAAK,MAAM,QAAQ,GAAG,EAAE;EACvC,QAAQ,SAAS,MAAM,IAAI,SAAS;CACtC;AACF;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,SAAS,OAAO,UAAU,GAAG,GAAG,CAAC,EAAE,SACvC,GACA,GACF;EACA,MAAM,UAAU,KAAK,KAAK,KAAK;EAC/B,MAAM,MAAM,YAAY,SAAS,SAAS,EAAE;EAC5C,MAAM,IAAI,UAAU,OAAO,MAAM,EAAE;EACnC,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8C;CAClD,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;CACA;AACF"}
|
package/dist/bg/pnf.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/bg/pnf.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 PNF. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Bulgarian Personal Number of a Foreigner. */
|
|
10
|
-
declare const pnf:
|
|
10
|
+
declare const pnf: CountryValidator<"BG">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, pnf as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=pnf.d.ts.map
|
package/dist/bg/pnf.js
CHANGED
|
@@ -3,14 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/bg/pnf.ts
|
|
6
|
-
/**
|
|
7
|
-
* PNF (ЛНЧ, Личен номер на чужденец).
|
|
8
|
-
*
|
|
9
|
-
* Bulgarian personal number of a foreigner.
|
|
10
|
-
* 10 digits; the last digit is a weighted checksum.
|
|
11
|
-
*
|
|
12
|
-
* @see https://en.wikipedia.org/wiki/Unique_citizenship_number
|
|
13
|
-
*/
|
|
14
6
|
const WEIGHTS = [
|
|
15
7
|
21,
|
|
16
8
|
19,
|
|
@@ -55,6 +47,7 @@ const pnf = {
|
|
|
55
47
|
"PNF"
|
|
56
48
|
],
|
|
57
49
|
candidatePattern: "\\d{10}",
|
|
50
|
+
scope: "country",
|
|
58
51
|
country: "BG",
|
|
59
52
|
entityType: "person",
|
|
60
53
|
sourceUrl: "https://en.wikipedia.org/wiki/Unique_citizenship_number",
|
package/dist/bg/pnf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pnf.js","names":[],"sources":["../../src/bg/pnf.ts"],"sourcesContent":["/**\n * PNF (ЛНЧ, Личен номер на чужденец).\n *\n * Bulgarian personal number of a foreigner.\n * 10 digits; the last digit is a weighted checksum.\n *\n * @see https://en.wikipedia.org/wiki/Unique_citizenship_number\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"pnf.js","names":[],"sources":["../../src/bg/pnf.ts"],"sourcesContent":["/**\n * PNF (ЛНЧ, Личен номер на чужденец).\n *\n * Bulgarian personal number of a foreigner.\n * 10 digits; the last digit is a weighted checksum.\n *\n * @see https://en.wikipedia.org/wiki/Unique_citizenship_number\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [21, 19, 17, 13, 11, 9, 7, 3, 1] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -.\");\n\nconst calcCheckDigit = (number: string): string => {\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n // SAFETY: WEIGHTS has exactly 9 entries\n // eslint-disable-next-line no-non-null-assertion\n sum += WEIGHTS[i]! * Number(number[i]);\n }\n return String(sum % 10);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"PNF must be exactly 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"PNF must contain only digits\",\n );\n }\n if (calcCheckDigit(v.slice(0, 9)) !== v[9]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"PNF check digit does not match\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid PNF. */\nconst generate = (): string => {\n const payload = randomDigits(9);\n return payload + calcCheckDigit(payload);\n};\n\n/** Bulgarian Personal Number of a Foreigner. */\nconst pnf: CountryValidator<\"BG\"> = {\n name: \"Bulgarian Foreigner Number\",\n localName: \"Личен номер на чужденец\",\n abbreviation: \"ЛНЧ\",\n aliases: [\n \"ЛНЧ\",\n \"личен номер на чужденец\",\n \"PNF\",\n ] as const,\n candidatePattern: \"\\\\d{10}\",\n scope: \"country\",\n country: \"BG\",\n entityType: \"person\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Unique_citizenship_number\",\n examples: [\"7111042925\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default pnf;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAmBA,MAAM,UAAU;CAAC;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;AAAC;AAE/C,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,kBAAkB,WAA2B;CACjD,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAGrB,OAAO,QAAQ,KAAM,OAAO,OAAO,EAAE;CAEvC,OAAO,OAAO,MAAM,EAAE;AACxB;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,eAAe,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,IACtC,OAAO,IACL,oBACA,gCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,CAAC;CAC9B,OAAO,UAAU,eAAe,OAAO;AACzC;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;AACF"}
|
package/dist/bg/vat.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/bg/vat.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -7,7 +7,7 @@ declare const format: (value: string) => string;
|
|
|
7
7
|
/** Generate a random valid 9-digit Bulgarian VAT. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Bulgarian VAT Number. */
|
|
10
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"BG">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, vat as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/bg/vat.js
CHANGED
|
@@ -1,17 +1,9 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
5
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
6
|
//#region src/bg/vat.ts
|
|
7
|
-
/**
|
|
8
|
-
* ИН по ДДС (Bulgarian VAT number).
|
|
9
|
-
*
|
|
10
|
-
* 9 or 10 digits with weighted checksum.
|
|
11
|
-
*
|
|
12
|
-
* @see https://www.vatify.eu/bulgaria-vat-number.html
|
|
13
|
-
* @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/bulgaria-tin.pdf
|
|
14
|
-
*/
|
|
15
7
|
const compact = (value) => {
|
|
16
8
|
let v = clean(value, " -/.");
|
|
17
9
|
if (v.startsWith("BG") || v.startsWith("bg")) v = v.slice(2);
|
|
@@ -138,9 +130,11 @@ const vat = {
|
|
|
138
130
|
abbreviation: "ИН по ДДС",
|
|
139
131
|
aliases: ["ДДС", "идентификационен номер по ДДС"],
|
|
140
132
|
candidatePattern: "BG\\d{9,10}",
|
|
133
|
+
scope: "country",
|
|
141
134
|
country: "BG",
|
|
142
135
|
entityType: "any",
|
|
143
136
|
sourceUrl: "https://www.nra.bg/",
|
|
137
|
+
lengths: [9, 10],
|
|
144
138
|
examples: ["175074752"],
|
|
145
139
|
compact,
|
|
146
140
|
format,
|
package/dist/bg/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/bg/vat.ts"],"sourcesContent":["/**\n * ИН по ДДС (Bulgarian VAT number).\n *\n * 9 or 10 digits with weighted checksum.\n *\n * @see https://www.vatify.eu/bulgaria-vat-number.html\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/bulgaria-tin.pdf\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/bg/vat.ts"],"sourcesContent":["/**\n * ИН по ДДС (Bulgarian VAT number).\n *\n * 9 or 10 digits with weighted checksum.\n *\n * @see https://www.vatify.eu/bulgaria-vat-number.html\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/bulgaria-tin.pdf\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"BG\") || v.startsWith(\"bg\")) {\n v = v.slice(2);\n }\n return v;\n};\n\nconst d = (v: string, i: number): number => Number(v[i]);\n\nconst WEIGHTS_9_PASS1 = [1, 2, 3, 4, 5, 6, 7, 8];\nconst WEIGHTS_9_PASS2 = [3, 4, 5, 6, 7, 8, 9, 10];\nconst WEIGHTS_EGN = [2, 4, 8, 5, 10, 9, 7, 3, 6];\nconst WEIGHTS_PNF = [21, 19, 17, 13, 11, 9, 7, 3, 1];\nconst WEIGHTS_OTHER = [4, 3, 2, 7, 6, 5, 4, 3, 2];\n\nconst validate9 = (v: string): boolean => {\n let check = weightedSum(\n v.slice(0, 8),\n WEIGHTS_9_PASS1,\n 11,\n );\n if (check === 10) {\n check = weightedSum(v.slice(0, 8), WEIGHTS_9_PASS2, 11);\n }\n return check % 10 === d(v, 8);\n};\n\n/**\n * Validate a 10-digit EGN (personal code).\n * First 6 digits encode birth date (YYMMDD with month\n * offsets: +20 for 1800s, +40 for 2000s). Check digit\n * uses weights [2,4,8,5,10,9,7,3,6], sum % 11 % 10.\n */\nconst validateEgn = (v: string): boolean => {\n const year = d(v, 0) * 10 + d(v, 1);\n let month = d(v, 2) * 10 + d(v, 3);\n const day = d(v, 4) * 10 + d(v, 5);\n let fullYear = year + 1900;\n if (month > 40) {\n fullYear += 100;\n month -= 40;\n } else if (month > 20) {\n fullYear -= 100;\n month -= 20;\n }\n // Validate the birth date\n const date = new Date(fullYear, month - 1, day);\n if (\n date.getFullYear() !== fullYear ||\n date.getMonth() !== month - 1 ||\n date.getDate() !== day\n ) {\n return false;\n }\n const sum = weightedSum(v.slice(0, 9), WEIGHTS_EGN, 11);\n return sum % 10 === d(v, 9);\n};\n\n/**\n * Validate a 10-digit PNF (foreigner personal number).\n * Weights [21,19,17,13,11,9,7,3,1], sum % 10.\n */\nconst validatePnf = (v: string): boolean => {\n const sum = weightedSum(v.slice(0, 9), WEIGHTS_PNF, 10);\n return sum === d(v, 9);\n};\n\n/**\n * Validate a 10-digit \"other\" VAT number.\n * Weights [4,3,2,7,6,5,4,3,2], (11 - sum%11) % 11.\n */\nconst validateOther = (v: string): boolean => {\n const sum = weightedSum(v.slice(0, 9), WEIGHTS_OTHER, 11);\n return (11 - sum) % 11 === d(v, 9);\n};\n\nconst validate10 = (v: string): boolean =>\n validateEgn(v) || validatePnf(v) || validateOther(v);\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9 && v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Bulgarian VAT number must be 9 or 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Bulgarian VAT number must contain only digits\",\n );\n }\n const valid =\n v.length === 9 ? validate9(v) : validate10(v);\n if (!valid) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Bulgarian VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `BG${compact(value)}`;\n\n/** Generate a random valid 9-digit Bulgarian VAT. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Bulgarian VAT Number. */\nconst vat: CountryValidator<\"BG\"> = {\n name: \"Bulgarian VAT Number\",\n localName: \"ИН по ДДС\",\n abbreviation: \"ИН по ДДС\",\n aliases: [\n \"ДДС\",\n \"идентификационен номер по ДДС\",\n ] as const,\n candidatePattern: \"BG\\\\d{9,10}\",\n scope: \"country\",\n country: \"BG\",\n entityType: \"any\",\n sourceUrl: \"https://www.nra.bg/\",\n lengths: [9, 10] as const,\n examples: [\"175074752\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":"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"}
|
package/dist/bh/cpr.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/bh/cpr.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 structurally valid Bahrain CPR. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Bahrain Central Population Registration number. */
|
|
10
|
-
declare const cpr:
|
|
10
|
+
declare const cpr: CountryValidator<"BH">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, cpr as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=cpr.d.ts.map
|
package/dist/bh/cpr.js
CHANGED
|
@@ -3,23 +3,6 @@ import { randomDigits, randomInt } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/bh/cpr.ts
|
|
6
|
-
/**
|
|
7
|
-
* CPR (Central Population Registration number, Bahrain).
|
|
8
|
-
*
|
|
9
|
-
* 9-digit personal identification number:
|
|
10
|
-
* YYMM = year and month of birth
|
|
11
|
-
* NNNN = serial number
|
|
12
|
-
* C = check digit
|
|
13
|
-
*
|
|
14
|
-
* The check digit algorithm is not publicly
|
|
15
|
-
* documented; validation is structural only
|
|
16
|
-
* (length, digits, and valid birth month).
|
|
17
|
-
*
|
|
18
|
-
* Note: a minority of older CPR numbers do not
|
|
19
|
-
* follow the YYMMNNNNC format.
|
|
20
|
-
*
|
|
21
|
-
* @see https://www.bahrain.bh/wps/portal/IDInfo_en
|
|
22
|
-
*/
|
|
23
6
|
const compact = (value) => clean(value, " -");
|
|
24
7
|
const validate = (value) => {
|
|
25
8
|
const v = compact(value);
|
|
@@ -47,6 +30,7 @@ const cpr = {
|
|
|
47
30
|
abbreviation: "CPR",
|
|
48
31
|
aliases: ["CPR", "الرقم السكاني"],
|
|
49
32
|
candidatePattern: "\\d{9}",
|
|
33
|
+
scope: "country",
|
|
50
34
|
country: "BH",
|
|
51
35
|
entityType: "person",
|
|
52
36
|
lengths: [9],
|
package/dist/bh/cpr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpr.js","names":[],"sources":["../../src/bh/cpr.ts"],"sourcesContent":["/**\n * CPR (Central Population Registration number, Bahrain).\n *\n * 9-digit personal identification number:\n * YYMM = year and month of birth\n * NNNN = serial number\n * C = check digit\n *\n * The check digit algorithm is not publicly\n * documented; validation is structural only\n * (length, digits, and valid birth month).\n *\n * Note: a minority of older CPR numbers do not\n * follow the YYMMNNNNC format.\n *\n * @see https://www.bahrain.bh/wps/portal/IDInfo_en\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"cpr.js","names":[],"sources":["../../src/bh/cpr.ts"],"sourcesContent":["/**\n * CPR (Central Population Registration number, Bahrain).\n *\n * 9-digit personal identification number:\n * YYMM = year and month of birth\n * NNNN = serial number\n * C = check digit\n *\n * The check digit algorithm is not publicly\n * documented; validation is structural only\n * (length, digits, and valid birth month).\n *\n * Note: a minority of older CPR numbers do not\n * follow the YYMMNNNNC format.\n *\n * @see https://www.bahrain.bh/wps/portal/IDInfo_en\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Bahrain CPR must be 9 digits\",\n );\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Bahrain CPR must contain only digits\",\n );\n }\n\n // Validate birth month (digits 3-4) is 01-12\n const mm = Number(v.slice(2, 4));\n if (mm < 1 || mm > 12) {\n return err(\n \"INVALID_COMPONENT\",\n \"CPR birth month must be 01-12\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)}-${v.slice(2, 4)}-${v.slice(4)}`;\n};\n\n/** Generate a random structurally valid Bahrain CPR. */\nconst generate = (): string => {\n const yy = String(randomInt(0, 99)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n return `${yy}${mm}${randomDigits(5)}`;\n};\n\n/** Bahrain Central Population Registration number. */\nconst cpr: CountryValidator<\"BH\"> = {\n name: \"Central Population Registration Number\",\n localName: \"الرقم السكاني\",\n abbreviation: \"CPR\",\n aliases: [\"CPR\", \"الرقم السكاني\"] as const,\n candidatePattern: \"\\\\d{9}\",\n scope: \"country\",\n country: \"BH\",\n entityType: \"person\",\n lengths: [9] as const,\n examples: [\"890112345\", \"000612345\"] as const,\n description: \"9-digit personal identification number\",\n sourceUrl: \"https://www.bahrain.bh/wps/portal/IDInfo_en\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default cpr;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;AA4BA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,8BACF;CAGF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,sCACF;CAIF,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,IAAI,KAAK,KAAK,KAAK,IACjB,OAAO,IACL,qBACA,+BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;AACvD;;AAGA,MAAM,iBAAyB;CAG7B,OAAO,GAFI,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAErC,IADA,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAChC,IAAI,aAAa,CAAC;AACpC;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,eAAe;CAChC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,aAAa,WAAW;CACnC,aAAa;CACb,WAAW;CACX;CACA;CACA;CACA;AACF"}
|
package/dist/bic.d.ts
CHANGED
|
@@ -1,13 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GlobalValidator, ValidateResult } from "./types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/bic.d.ts
|
|
4
4
|
/** Generate a random valid BIC (8-character). */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* BIC (Business Identifier Code).
|
|
8
|
+
*
|
|
9
|
+
* ISO 9362. 8 or 11 character code identifying
|
|
10
|
+
* financial institutions. Format:
|
|
11
|
+
* [A-Z]{4} (institution) + [A-Z]{2} (country) +
|
|
12
|
+
* [0-9A-Z]{2} (location) + [0-9A-Z]{3} (branch,
|
|
13
|
+
* optional).
|
|
14
|
+
*
|
|
15
|
+
* @see https://www.swift.com/
|
|
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
|
/** Business Identifier Code (SWIFT/BIC). */
|
|
10
|
-
declare const bic:
|
|
21
|
+
declare const bic: GlobalValidator;
|
|
11
22
|
//#endregion
|
|
12
23
|
export { compact, bic as default, format, generate, validate };
|
|
13
24
|
//# sourceMappingURL=bic.d.ts.map
|
package/dist/bic.js
CHANGED
|
@@ -2,17 +2,6 @@ import { clean } from "./_util/clean.js";
|
|
|
2
2
|
import { randomChar, randomInt, randomPick } from "./_util/generate.js";
|
|
3
3
|
import { err } from "./_util/result.js";
|
|
4
4
|
//#region src/bic.ts
|
|
5
|
-
/**
|
|
6
|
-
* BIC (Business Identifier Code).
|
|
7
|
-
*
|
|
8
|
-
* ISO 9362. 8 or 11 character code identifying
|
|
9
|
-
* financial institutions. Format:
|
|
10
|
-
* [A-Z]{4} (institution) + [A-Z]{2} (country) +
|
|
11
|
-
* [0-9A-Z]{2} (location) + [0-9A-Z]{3} (branch,
|
|
12
|
-
* optional).
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.swift.com/
|
|
15
|
-
*/
|
|
16
5
|
const BIC_ALPHANUM = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
17
6
|
const BIC_COUNTRIES = [
|
|
18
7
|
"DE",
|
|
@@ -47,6 +36,7 @@ const format = (value) => {
|
|
|
47
36
|
};
|
|
48
37
|
/** Business Identifier Code (SWIFT/BIC). */
|
|
49
38
|
const bic = {
|
|
39
|
+
scope: "global",
|
|
50
40
|
name: "Business Identifier Code",
|
|
51
41
|
localName: "Business Identifier Code",
|
|
52
42
|
abbreviation: "BIC",
|
package/dist/bic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bic.js","names":[],"sources":["../src/bic.ts"],"sourcesContent":["const BIC_ALPHANUM = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\nconst BIC_COUNTRIES = [\n \"DE\",\n \"GB\",\n \"US\",\n \"FR\",\n \"CH\",\n \"NL\",\n \"AT\",\n] as const;\n\n/** Generate a random valid BIC (8-character). */\nconst generate = (): string => {\n const randomLetter = (): string =>\n String.fromCodePoint(65 + randomInt(0, 25));\n const country = randomPick(BIC_COUNTRIES);\n const bank =\n randomLetter() +\n randomLetter() +\n randomLetter() +\n randomLetter();\n const location =\n randomChar(BIC_ALPHANUM) + randomChar(BIC_ALPHANUM);\n return `${bank}${country}${location}`;\n};\n\n/**\n * BIC (Business Identifier Code).\n *\n * ISO 9362. 8 or 11 character code identifying\n * financial institutions. Format:\n * [A-Z]{4} (institution) + [A-Z]{2} (country) +\n * [0-9A-Z]{2} (location) + [0-9A-Z]{3} (branch,\n * optional).\n *\n * @see https://www.swift.com/\n */\n\nimport { clean } from \"#util/clean\";\nimport {\n randomChar,\n randomInt,\n randomPick,\n} from \"#util/generate\";\nimport { err } from \"#util/result\";\n\
|
|
1
|
+
{"version":3,"file":"bic.js","names":[],"sources":["../src/bic.ts"],"sourcesContent":["const BIC_ALPHANUM = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\nconst BIC_COUNTRIES = [\n \"DE\",\n \"GB\",\n \"US\",\n \"FR\",\n \"CH\",\n \"NL\",\n \"AT\",\n] as const;\n\n/** Generate a random valid BIC (8-character). */\nconst generate = (): string => {\n const randomLetter = (): string =>\n String.fromCodePoint(65 + randomInt(0, 25));\n const country = randomPick(BIC_COUNTRIES);\n const bank =\n randomLetter() +\n randomLetter() +\n randomLetter() +\n randomLetter();\n const location =\n randomChar(BIC_ALPHANUM) + randomChar(BIC_ALPHANUM);\n return `${bank}${country}${location}`;\n};\n\n/**\n * BIC (Business Identifier Code).\n *\n * ISO 9362. 8 or 11 character code identifying\n * financial institutions. Format:\n * [A-Z]{4} (institution) + [A-Z]{2} (country) +\n * [0-9A-Z]{2} (location) + [0-9A-Z]{3} (branch,\n * optional).\n *\n * @see https://www.swift.com/\n */\n\nimport type {\n ValidateResult,\n GlobalValidator,\n} from \"./types\";\n\nimport { clean } from \"#util/clean\";\nimport {\n randomChar,\n randomInt,\n randomPick,\n} from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nconst BIC_RE =\n /^[A-Z]{4}[A-Z]{2}[0-9A-Z]{2}([0-9A-Z]{3})?$/;\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8 && v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"BIC must be 8 or 11 characters\",\n );\n }\n if (!BIC_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"BIC must be 8 or 11 alphanumeric characters\",\n );\n }\n // Country code at positions 4-5 is already\n // validated as [A-Z]{2} by the regex above.\n // SWIFT accepts all ISO 3166-1 alpha-2 codes\n // plus XK (Kosovo); we don't restrict further.\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 11) {\n return `${v.slice(0, 4)} ${v.slice(4, 6)} ${v.slice(6, 8)} ${v.slice(8)}`;\n }\n return `${v.slice(0, 4)} ${v.slice(4, 6)} ${v.slice(6)}`;\n};\n\n/** Business Identifier Code (SWIFT/BIC). */\nconst bic: GlobalValidator = {\n scope: \"global\",\n name: \"Business Identifier Code\",\n localName: \"Business Identifier Code\",\n abbreviation: \"BIC\",\n aliases: [\"BIC\", \"SWIFT\", \"BIC/SWIFT\"] as const,\n candidatePattern: \"[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?\",\n entityType: \"company\",\n sourceUrl: \"https://www.swift.com/\",\n examples: [\"DEUTDEFF\", \"DEUTDEFF500\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default bic;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;AAAA,MAAM,eAAe;AACrB,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAM,iBAAyB;CAC7B,MAAM,qBACJ,OAAO,cAAc,KAAK,UAAU,GAAG,EAAE,CAAC;CAC5C,MAAM,UAAU,WAAW,aAAa;CAQxC,OAAO,GANL,aAAa,IACb,aAAa,IACb,aAAa,IACb,aAAa,IAGE,UADf,WAAW,YAAY,IAAI,WAAW,YAAY;AAEtD;AA2BA,MAAM,SACJ;AAEF,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,EAAE,YAAY;AAEjC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,KAAK,EAAE,WAAW,IACjC,OAAO,IACL,kBACA,gCACF;CAEF,IAAI,CAAC,OAAO,KAAK,CAAC,GAChB,OAAO,IACL,kBACA,6CACF;CAMF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;CAExE,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;AACvD;;AAGA,MAAM,MAAuB;CAC3B,OAAO;CACP,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EAAC;EAAO;EAAS;CAAW;CACrC,kBAAkB;CAClB,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY,aAAa;CACpC;CACA;CACA;CACA;AACF"}
|
package/dist/br/cnpj.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/br/cnpj.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -14,7 +14,7 @@ declare const generate: () => string;
|
|
|
14
14
|
* - Petrobras: 33.000.167/0001-01
|
|
15
15
|
* - Banco do Brasil: 00.000.000/0001-91
|
|
16
16
|
*/
|
|
17
|
-
declare const cnpj:
|
|
17
|
+
declare const cnpj: CountryValidator<"BR">;
|
|
18
18
|
//#endregion
|
|
19
19
|
export { compact, cnpj as default, format, generate, validate };
|
|
20
20
|
//# sourceMappingURL=cnpj.d.ts.map
|
package/dist/br/cnpj.js
CHANGED
|
@@ -2,26 +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/br/cnpj.ts
|
|
5
|
-
/**
|
|
6
|
-
* CNPJ (Cadastro Nacional da Pessoa Jurídica).
|
|
7
|
-
*
|
|
8
|
-
* Brazilian company tax identification number assigned by
|
|
9
|
-
* the Receita Federal (Federal Revenue Service). The
|
|
10
|
-
* number consists of 14 characters: 8 identifying the
|
|
11
|
-
* company, 4 identifying the establishment (0001 for
|
|
12
|
-
* headquarters), and 2 check digits computed using a
|
|
13
|
-
* weighted modulo 11 algorithm.
|
|
14
|
-
*
|
|
15
|
-
* As of July 2026 the Receita Federal will begin issuing
|
|
16
|
-
* alphanumeric CNPJs (letters A-Z in place of some
|
|
17
|
-
* digits). The check digit algorithm uses ordinal values
|
|
18
|
-
* (0-9 = 0-9, A-Z = 17-42) to support this.
|
|
19
|
-
*
|
|
20
|
-
* Format: NN.NNN.NNN/NNNN-DD (14 characters).
|
|
21
|
-
*
|
|
22
|
-
* @see https://www.gov.br/en/categories/finance-taxes-and-public-management/cpf-cnpj-and-other-records
|
|
23
|
-
* @see https://en.wikipedia.org/wiki/CNPJ
|
|
24
|
-
*/
|
|
25
5
|
const CNPJ_RE = /^[\dA-Z]+$/;
|
|
26
6
|
const compact = (value) => clean(value, " -./").trim().toUpperCase();
|
|
27
7
|
/**
|
|
@@ -117,6 +97,7 @@ const cnpj = {
|
|
|
117
97
|
abbreviation: "CNPJ",
|
|
118
98
|
aliases: ["CNPJ", "Cadastro Nacional da Pessoa Jurídica"],
|
|
119
99
|
candidatePattern: "\\d{2}\\.?\\d{3}\\.?\\d{3}/?\\d{4}-?\\d{2}",
|
|
100
|
+
scope: "country",
|
|
120
101
|
country: "BR",
|
|
121
102
|
entityType: "company",
|
|
122
103
|
sourceUrl: "https://www.gov.br/receitafederal/",
|
package/dist/br/cnpj.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cnpj.js","names":[],"sources":["../../src/br/cnpj.ts"],"sourcesContent":["/**\n * CNPJ (Cadastro Nacional da Pessoa Jurídica).\n *\n * Brazilian company tax identification number assigned by\n * the Receita Federal (Federal Revenue Service). The\n * number consists of 14 characters: 8 identifying the\n * company, 4 identifying the establishment (0001 for\n * headquarters), and 2 check digits computed using a\n * weighted modulo 11 algorithm.\n *\n * As of July 2026 the Receita Federal will begin issuing\n * alphanumeric CNPJs (letters A-Z in place of some\n * digits). The check digit algorithm uses ordinal values\n * (0-9 = 0-9, A-Z = 17-42) to support this.\n *\n * Format: NN.NNN.NNN/NNNN-DD (14 characters).\n *\n * @see https://www.gov.br/en/categories/finance-taxes-and-public-management/cpf-cnpj-and-other-records\n * @see https://en.wikipedia.org/wiki/CNPJ\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"cnpj.js","names":[],"sources":["../../src/br/cnpj.ts"],"sourcesContent":["/**\n * CNPJ (Cadastro Nacional da Pessoa Jurídica).\n *\n * Brazilian company tax identification number assigned by\n * the Receita Federal (Federal Revenue Service). The\n * number consists of 14 characters: 8 identifying the\n * company, 4 identifying the establishment (0001 for\n * headquarters), and 2 check digits computed using a\n * weighted modulo 11 algorithm.\n *\n * As of July 2026 the Receita Federal will begin issuing\n * alphanumeric CNPJs (letters A-Z in place of some\n * digits). The check digit algorithm uses ordinal values\n * (0-9 = 0-9, A-Z = 17-42) to support this.\n *\n * Format: NN.NNN.NNN/NNNN-DD (14 characters).\n *\n * @see https://www.gov.br/en/categories/finance-taxes-and-public-management/cpf-cnpj-and-other-records\n * @see https://en.wikipedia.org/wiki/CNPJ\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 CNPJ_RE = /^[\\dA-Z]+$/;\n\nconst compact = (value: string): string =>\n clean(value, \" -./\").trim().toUpperCase();\n\n/**\n * Convert a CNPJ character to its numeric value.\n * Digits 0-9 map to 0-9; letters A-Z map to their\n * char code minus 48 (matching python-stdnum's\n * `ord(n) - 48` convention: A=17, B=18, ..., Z=42).\n */\nconst charToValue = (ch: string): number =>\n ch.charCodeAt(0) - 48;\n\n/**\n * Calculate the two CNPJ check digits using the\n * Receita Federal modulo 11 algorithm.\n *\n * First check digit: weights [5,4,3,2,9,8,7,6,5,4,3,2]\n * applied to the first 12 characters.\n *\n * Second check digit: weights [6,5,4,3,2,9,8,7,6,5,4,3,2]\n * applied to the first 12 characters plus the first\n * check digit.\n */\nconst calcCheckDigits = (number: string): string => {\n const w1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n sum += (w1[i] ?? 0) * charToValue(number.charAt(i));\n }\n const d1 = ((11 - (sum % 11)) % 11) % 10;\n\n const w2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n sum = 0;\n for (let i = 0; i < 12; i++) {\n sum += (w2[i] ?? 0) * charToValue(number.charAt(i));\n }\n // Use the computed d1 (not the stored digit at\n // number[12]) so both check digits are derived\n // from the base alone.\n sum += (w2[12] ?? 0) * d1;\n const d2 = ((11 - (sum % 11)) % 11) % 10;\n\n return `${d1}${d2}`;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 14) {\n return err(\n \"INVALID_LENGTH\",\n \"CNPJ must be 14 characters\",\n );\n }\n if (!CNPJ_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"CNPJ must contain only digits and uppercase letters\",\n );\n }\n // Reject all-zero base (first 12 chars).\n // Unlike CPF, we do not reject all-same-digit CNPJs;\n // python-stdnum only blocks the all-zero base, and\n // there is no official Receita Federal list of\n // blocked same-digit CNPJ sequences.\n if (v.startsWith(\"000000000000\")) {\n return err(\n \"INVALID_FORMAT\",\n \"CNPJ base must not be all zeros\",\n );\n }\n if (calcCheckDigits(v) !== v.slice(12)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"CNPJ check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)}.${v.slice(2, 5)}.${v.slice(5, 8)}/${v.slice(8, 12)}-${v.slice(12)}`;\n};\n\n/** Generate a random valid CNPJ. */\nconst generate = (): string => {\n for (;;) {\n const base = randomDigits(12);\n if (base === \"000000000000\") continue;\n return base + calcCheckDigits(base);\n }\n};\n\n/**\n * Brazilian CNPJ (company tax ID).\n *\n * Examples sourced from publicly available Brazilian\n * corporate registries:\n * - Petrobras: 33.000.167/0001-01\n * - Banco do Brasil: 00.000.000/0001-91\n */\nconst cnpj: CountryValidator<\"BR\"> = {\n name: \"Brazilian CNPJ\",\n localName: \"Cadastro Nacional da Pessoa Jurídica\",\n abbreviation: \"CNPJ\",\n aliases: [\n \"CNPJ\",\n \"Cadastro Nacional da Pessoa Jurídica\",\n ] as const,\n candidatePattern:\n \"\\\\d{2}\\\\.?\\\\d{3}\\\\.?\\\\d{3}/?\\\\d{4}-?\\\\d{2}\",\n scope: \"country\",\n country: \"BR\",\n entityType: \"company\",\n sourceUrl: \"https://www.gov.br/receitafederal/\",\n examples: [\"33000167000101\", \"00000000000191\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default cnpj;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;AA8BA,MAAM,UAAU;AAEhB,MAAM,WAAW,UACf,MAAM,OAAO,MAAM,EAAE,KAAK,EAAE,YAAY;;;;;;;AAQ1C,MAAM,eAAe,OACnB,GAAG,WAAW,CAAC,IAAI;;;;;;;;;;;;AAarB,MAAM,mBAAmB,WAA2B;CAClD,MAAM,KAAK;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CAC9C,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,QAAQ,GAAG,MAAM,KAAK,YAAY,OAAO,OAAO,CAAC,CAAC;CAEpD,MAAM,MAAO,KAAM,MAAM,MAAO,KAAM;CAEtC,MAAM,KAAK;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CACjD,MAAM;CACN,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,QAAQ,GAAG,MAAM,KAAK,YAAY,OAAO,OAAO,CAAC,CAAC;CAKpD,QAAQ,GAAG,OAAO,KAAK;CAGvB,OAAO,GAAG,MAFG,KAAM,MAAM,MAAO,KAAM;AAGxC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,4BACF;CAEF,IAAI,CAAC,QAAQ,KAAK,CAAC,GACjB,OAAO,IACL,kBACA,qDACF;CAOF,IAAI,EAAE,WAAW,cAAc,GAC7B,OAAO,IACL,kBACA,iCACF;CAEF,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GACnC,OAAO,IACL,oBACA,2BACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;AAC3F;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,OAAO,aAAa,EAAE;EAC5B,IAAI,SAAS,gBAAgB;EAC7B,OAAO,OAAO,gBAAgB,IAAI;CACpC;AACF;;;;;;;;;AAUA,MAAM,OAA+B;CACnC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,QACA,sCACF;CACA,kBACE;CACF,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,kBAAkB,gBAAgB;CAC7C;CACA;CACA;CACA;AACF"}
|
package/dist/br/cpf.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/br/cpf.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 CPF. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Brazilian CPF (personal tax ID). */
|
|
10
|
-
declare const cpf:
|
|
10
|
+
declare const cpf: CountryValidator<"BR">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, cpf as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=cpf.d.ts.map
|
package/dist/br/cpf.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/br/cpf.ts
|
|
6
|
-
/**
|
|
7
|
-
* CPF (Cadastro de Pessoas Físicas).
|
|
8
|
-
*
|
|
9
|
-
* Brazilian personal tax identification number assigned
|
|
10
|
-
* by the Receita Federal (Federal Revenue Service) to
|
|
11
|
-
* individuals. The number consists of 11 digits: 9 base
|
|
12
|
-
* digits followed by 2 check digits computed using a
|
|
13
|
-
* weighted modulo 11 algorithm.
|
|
14
|
-
*
|
|
15
|
-
* Format: NNN.NNN.NNN-DD (11 digits, purely numeric).
|
|
16
|
-
*
|
|
17
|
-
* @see https://www.gov.br/en/categories/finance-taxes-and-public-management/cpf-cnpj-and-other-records
|
|
18
|
-
* @see https://en.wikipedia.org/wiki/CPF_number
|
|
19
|
-
*/
|
|
20
6
|
const compact = (value) => clean(value, " -.").trim();
|
|
21
7
|
/**
|
|
22
8
|
* Calculate the two CPF check digits using the
|
|
@@ -68,6 +54,7 @@ const cpf = {
|
|
|
68
54
|
abbreviation: "CPF",
|
|
69
55
|
aliases: ["CPF", "Cadastro de Pessoas Físicas"],
|
|
70
56
|
candidatePattern: "\\d{3}\\.?\\d{3}\\.?\\d{3}-?\\d{2}",
|
|
57
|
+
scope: "country",
|
|
71
58
|
country: "BR",
|
|
72
59
|
entityType: "person",
|
|
73
60
|
sourceUrl: "https://www.gov.br/receitafederal/",
|
package/dist/br/cpf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpf.js","names":[],"sources":["../../src/br/cpf.ts"],"sourcesContent":["/**\n * CPF (Cadastro de Pessoas Físicas).\n *\n * Brazilian personal tax identification number assigned\n * by the Receita Federal (Federal Revenue Service) to\n * individuals. The number consists of 11 digits: 9 base\n * digits followed by 2 check digits computed using a\n * weighted modulo 11 algorithm.\n *\n * Format: NNN.NNN.NNN-DD (11 digits, purely numeric).\n *\n * @see https://www.gov.br/en/categories/finance-taxes-and-public-management/cpf-cnpj-and-other-records\n * @see https://en.wikipedia.org/wiki/CPF_number\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"cpf.js","names":[],"sources":["../../src/br/cpf.ts"],"sourcesContent":["/**\n * CPF (Cadastro de Pessoas Físicas).\n *\n * Brazilian personal tax identification number assigned\n * by the Receita Federal (Federal Revenue Service) to\n * individuals. The number consists of 11 digits: 9 base\n * digits followed by 2 check digits computed using a\n * weighted modulo 11 algorithm.\n *\n * Format: NNN.NNN.NNN-DD (11 digits, purely numeric).\n *\n * @see https://www.gov.br/en/categories/finance-taxes-and-public-management/cpf-cnpj-and-other-records\n * @see https://en.wikipedia.org/wiki/CPF_number\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").trim();\n\n/**\n * Calculate the two CPF check digits using the\n * Receita Federal modulo 11 algorithm.\n *\n * First check digit: multiply digits 0..8 by weights\n * 10..2, sum, then (11 - sum % 11) % 11 % 10.\n *\n * Second check digit: multiply digits 0..8 by weights\n * 11..3, add 2 * first check digit, then\n * (11 - sum % 11) % 11 % 10.\n */\nconst calcCheckDigits = (number: string): string => {\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n sum += (10 - i) * Number(number[i]);\n }\n const d1 = ((11 - (sum % 11)) % 11) % 10;\n\n sum = 0;\n for (let i = 0; i < 9; i++) {\n sum += (11 - i) * Number(number[i]);\n }\n sum += 2 * d1;\n const d2 = ((11 - (sum % 11)) % 11) % 10;\n\n return `${d1}${d2}`;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\"INVALID_LENGTH\", \"CPF must be 11 digits\");\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"CPF must contain only digits\",\n );\n }\n // All-same-digit CPFs (e.g. 000.000.000-00) pass the\n // checksum but are not valid registrations.\n if (/^(\\d)\\1{10}$/.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"CPF must not be a repeated digit sequence\",\n );\n }\n if (calcCheckDigits(v) !== v.slice(9)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"CPF check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 3)}.${v.slice(3, 6)}.${v.slice(6, 9)}-${v.slice(9)}`;\n};\n\n/** Generate a random valid CPF. */\nconst generate = (): string => {\n for (;;) {\n const base = randomDigits(9);\n if (/^(\\d)\\1{8}$/.test(base)) continue;\n return base + calcCheckDigits(base);\n }\n};\n\n/** Brazilian CPF (personal tax ID). */\nconst cpf: CountryValidator<\"BR\"> = {\n name: \"Brazilian CPF\",\n localName: \"Cadastro de Pessoas Físicas\",\n abbreviation: \"CPF\",\n aliases: [\"CPF\", \"Cadastro de Pessoas Físicas\"] as const,\n candidatePattern: \"\\\\d{3}\\\\.?\\\\d{3}\\\\.?\\\\d{3}-?\\\\d{2}\",\n scope: \"country\",\n country: \"BR\",\n entityType: \"person\",\n sourceUrl: \"https://www.gov.br/receitafederal/\",\n examples: [\"39053344705\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default cpf;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAyBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,EAAE,KAAK;;;;;;;;;;;;AAa3B,MAAM,mBAAmB,WAA2B;CAClD,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,QAAQ,KAAK,KAAK,OAAO,OAAO,EAAE;CAEpC,MAAM,MAAO,KAAM,MAAM,MAAO,KAAM;CAEtC,MAAM;CACN,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,QAAQ,KAAK,KAAK,OAAO,OAAO,EAAE;CAEpC,OAAO,IAAI;CAGX,OAAO,GAAG,MAFG,KAAM,MAAM,MAAO,KAAM;AAGxC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IAAI,kBAAkB,uBAAuB;CAEtD,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAIF,IAAI,eAAe,KAAK,CAAC,GACvB,OAAO,IACL,kBACA,2CACF;CAEF,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,IACL,oBACA,0BACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;AACxE;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,OAAO,aAAa,CAAC;EAC3B,IAAI,cAAc,KAAK,IAAI,GAAG;EAC9B,OAAO,OAAO,gBAAgB,IAAI;CACpC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,6BAA6B;CAC9C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
|
package/dist/by/unp.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/by/unp.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 Belarus UNP. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Belarus UNP (Учётный номер плательщика). */
|
|
10
|
-
declare const unp:
|
|
10
|
+
declare const unp: CountryValidator<"BY">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, unp as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=unp.d.ts.map
|
package/dist/by/unp.js
CHANGED
|
@@ -3,18 +3,6 @@ import { randomDigits, randomInt } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/by/unp.ts
|
|
6
|
-
/**
|
|
7
|
-
* UNP (Учётный номер плательщика, Belarus tax number).
|
|
8
|
-
*
|
|
9
|
-
* 9 characters: the first two identify the region (numeric
|
|
10
|
-
* for organisations, letters from ABCEHKMOPT for
|
|
11
|
-
* individuals), followed by 7 digits. The last digit is a
|
|
12
|
-
* weighted check digit (mod 11; if remainder > 9 the
|
|
13
|
-
* number is invalid).
|
|
14
|
-
*
|
|
15
|
-
* @see https://be.wikipedia.org/wiki/Уліковы_нумар_плацельшчыка
|
|
16
|
-
* @see https://www.nalog.gov.by/
|
|
17
|
-
*/
|
|
18
6
|
/** Cyrillic to Latin mapping for the letter positions. */
|
|
19
7
|
const CYRILLIC_TO_LATIN = {
|
|
20
8
|
А: "A",
|
|
@@ -45,7 +33,7 @@ const compact = (value) => {
|
|
|
45
33
|
let v = clean(value, " ").toUpperCase().trim();
|
|
46
34
|
if (v.startsWith("УНП")) v = v.slice(3);
|
|
47
35
|
else if (v.startsWith("UNP")) v = v.slice(3);
|
|
48
|
-
return
|
|
36
|
+
return v.split("").map((ch) => CYRILLIC_TO_LATIN[ch] ?? ch).join("");
|
|
49
37
|
};
|
|
50
38
|
const calcCheckDigit = (number) => {
|
|
51
39
|
let work = number;
|
|
@@ -73,7 +61,7 @@ const validate = (value) => {
|
|
|
73
61
|
if (v.length !== 9) return err("INVALID_LENGTH", "Belarus UNP must be 9 characters");
|
|
74
62
|
if (!isdigits(v.slice(2))) return err("INVALID_FORMAT", "Belarus UNP positions 3-9 must be digits");
|
|
75
63
|
const first2 = v.slice(0, 2);
|
|
76
|
-
if (!isdigits(first2) && !
|
|
64
|
+
if (!isdigits(first2) && !first2.split("").every((ch) => ALPHA_SET.includes(ch))) return err("INVALID_FORMAT", "Belarus UNP first two characters must be digits or letters from ABCEHKMOPT");
|
|
77
65
|
if (!VALID_FIRST.includes(v[0])) return err("INVALID_COMPONENT", "Belarus UNP has an invalid region prefix");
|
|
78
66
|
const expected = calcCheckDigit(v);
|
|
79
67
|
if (expected === null) return err("INVALID_CHECKSUM", "Belarus UNP check digit is invalid (mod 11 remainder > 9)");
|
|
@@ -102,6 +90,7 @@ const unp = {
|
|
|
102
90
|
abbreviation: "УНП",
|
|
103
91
|
aliases: ["УНП", "UNP"],
|
|
104
92
|
candidatePattern: "\\d{9}",
|
|
93
|
+
scope: "country",
|
|
105
94
|
country: "BY",
|
|
106
95
|
entityType: "any",
|
|
107
96
|
sourceUrl: "https://www.nalog.gov.by/",
|
package/dist/by/unp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unp.js","names":[],"sources":["../../src/by/unp.ts"],"sourcesContent":["/**\n * UNP (Учётный номер плательщика, Belarus tax number).\n *\n * 9 characters: the first two identify the region (numeric\n * for organisations, letters from ABCEHKMOPT for\n * individuals), followed by 7 digits. The last digit is a\n * weighted check digit (mod 11; if remainder > 9 the\n * number is invalid).\n *\n * @see https://be.wikipedia.org/wiki/Уліковы_нумар_плацельшчыка\n * @see https://www.nalog.gov.by/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"unp.js","names":[],"sources":["../../src/by/unp.ts"],"sourcesContent":["/**\n * UNP (Учётный номер плательщика, Belarus tax number).\n *\n * 9 characters: the first two identify the region (numeric\n * for organisations, letters from ABCEHKMOPT for\n * individuals), followed by 7 digits. The last digit is a\n * weighted check digit (mod 11; if remainder > 9 the\n * number is invalid).\n *\n * @see https://be.wikipedia.org/wiki/Уліковы_нумар_плацельшчыка\n * @see https://www.nalog.gov.by/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\n/** Cyrillic to Latin mapping for the letter positions. */\nconst CYRILLIC_TO_LATIN: Record<string, string> = {\n А: \"A\",\n В: \"B\",\n Е: \"E\",\n К: \"K\",\n М: \"M\",\n Н: \"H\",\n О: \"O\",\n Р: \"P\",\n С: \"C\",\n Т: \"T\",\n};\n\nconst WEIGHTS = [29, 23, 19, 17, 13, 7, 5, 3] as const;\nconst ALPHA_SET = \"ABCEHKMOPT\";\nconst VALID_FIRST = \"1234567ABCEHKM\";\nconst ALPHABET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" \").toUpperCase().trim();\n if (v.startsWith(\"УНП\")) {\n v = v.slice(3);\n } else if (v.startsWith(\"UNP\")) {\n v = v.slice(3);\n }\n return v\n .split(\"\")\n .map((ch) => CYRILLIC_TO_LATIN[ch] ?? ch)\n .join(\"\");\n};\n\nconst calcCheckDigit = (number: string): number | null => {\n let work = number;\n if (!isdigits(number)) {\n const second = number[1];\n if (second === undefined) return null;\n const idx = ALPHA_SET.indexOf(second);\n if (idx === -1) return null;\n work = number[0] + String(idx) + number.slice(2);\n }\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n const ch = work[i];\n if (ch === undefined) return null;\n const val = ALPHABET.indexOf(ch);\n if (val === -1) return null;\n sum += weight * val;\n }\n const remainder = sum % 11;\n if (remainder > 9) return null;\n return remainder;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Belarus UNP must be 9 characters\",\n );\n }\n if (!isdigits(v.slice(2))) {\n return err(\n \"INVALID_FORMAT\",\n \"Belarus UNP positions 3-9 must be digits\",\n );\n }\n const first2 = v.slice(0, 2);\n if (\n !isdigits(first2) &&\n !first2.split(\"\").every((ch) => ALPHA_SET.includes(ch))\n ) {\n return err(\n \"INVALID_FORMAT\",\n \"Belarus UNP first two characters must be\" +\n \" digits or letters from ABCEHKMOPT\",\n );\n }\n // SAFETY: v.length === 9 guarantees v[0] exists.\n // eslint-disable-next-line no-non-null-assertion\n if (!VALID_FIRST.includes(v[0]!)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Belarus UNP has an invalid region prefix\",\n );\n }\n const expected = calcCheckDigit(v);\n if (expected === null) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Belarus UNP check digit is invalid\" +\n \" (mod 11 remainder > 9)\",\n );\n }\n if (v[8] !== String(expected)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Belarus UNP check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Belarus UNP. */\nconst generate = (): string => {\n for (let i = 0; i < 100; i++) {\n const prefix = String(randomInt(1, 7));\n const rest = randomDigits(7);\n const payload = prefix + rest;\n const check = calcCheckDigit(payload);\n if (check === null) continue;\n const c = payload.slice(0, 8) + String(check);\n if (validate(c).valid) return c;\n }\n throw new Error(\"Failed to generate valid UNP\");\n};\n\n/** Belarus UNP (Учётный номер плательщика). */\nconst unp: CountryValidator<\"BY\"> = {\n name: \"Belarus Tax Number\",\n localName: \"Учётный номер плательщика\",\n abbreviation: \"УНП\",\n aliases: [\"УНП\", \"UNP\"] as const,\n candidatePattern: \"\\\\d{9}\",\n scope: \"country\",\n country: \"BY\",\n entityType: \"any\",\n sourceUrl: \"https://www.nalog.gov.by/\",\n examples: [\"200988541\", \"MA1953684\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default unp;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAwBA,MAAM,oBAA4C;CAChD,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;AACL;AAEA,MAAM,UAAU;CAAC;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;AAAC;AAC5C,MAAM,YAAY;AAClB,MAAM,cAAc;AACpB,MAAM,WAAW;AAEjB,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,GAAG,EAAE,YAAY,EAAE,KAAK;CAC7C,IAAI,EAAE,WAAW,KAAK,GACpB,IAAI,EAAE,MAAM,CAAC;MACR,IAAI,EAAE,WAAW,KAAK,GAC3B,IAAI,EAAE,MAAM,CAAC;CAEf,OAAO,EACJ,MAAM,EAAE,EACR,KAAK,OAAO,kBAAkB,OAAO,EAAE,EACvC,KAAK,EAAE;AACZ;AAEA,MAAM,kBAAkB,WAAkC;CACxD,IAAI,OAAO;CACX,IAAI,CAAC,SAAS,MAAM,GAAG;EACrB,MAAM,SAAS,OAAO;EACtB,IAAI,WAAW,KAAA,GAAW,OAAO;EACjC,MAAM,MAAM,UAAU,QAAQ,MAAM;EACpC,IAAI,QAAQ,IAAI,OAAO;EACvB,OAAO,OAAO,KAAK,OAAO,GAAG,IAAI,OAAO,MAAM,CAAC;CACjD;CACA,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GAAG;EAC3C,MAAM,KAAK,KAAK;EAChB,IAAI,OAAO,KAAA,GAAW,OAAO;EAC7B,MAAM,MAAM,SAAS,QAAQ,EAAE;EAC/B,IAAI,QAAQ,IAAI,OAAO;EACvB,OAAO,SAAS;CAClB;CACA,MAAM,YAAY,MAAM;CACxB,IAAI,YAAY,GAAG,OAAO;CAC1B,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,kCACF;CAEF,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,GACtB,OAAO,IACL,kBACA,0CACF;CAEF,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC;CAC3B,IACE,CAAC,SAAS,MAAM,KAChB,CAAC,OAAO,MAAM,EAAE,EAAE,OAAO,OAAO,UAAU,SAAS,EAAE,CAAC,GAEtD,OAAO,IACL,kBACA,4EAEF;CAIF,IAAI,CAAC,YAAY,SAAS,EAAE,EAAG,GAC7B,OAAO,IACL,qBACA,0CACF;CAEF,MAAM,WAAW,eAAe,CAAC;CACjC,IAAI,aAAa,MACf,OAAO,IACL,oBACA,2DAEF;CAEF,IAAI,EAAE,OAAO,OAAO,QAAQ,GAC1B,OAAO,IACL,oBACA,kCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;EAG5B,MAAM,UAFS,OAAO,UAAU,GAAG,CAAC,CAEf,IADR,aAAa,CACE;EAC5B,MAAM,QAAQ,eAAe,OAAO;EACpC,IAAI,UAAU,MAAM;EACpB,MAAM,IAAI,QAAQ,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK;EAC5C,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;CACA,MAAM,IAAI,MAAM,8BAA8B;AAChD;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,KAAK;CACtB,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa,WAAW;CACnC;CACA;CACA;CACA;AACF"}
|