@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/th/tin.js
CHANGED
|
@@ -3,17 +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/th/tin.ts
|
|
6
|
-
/**
|
|
7
|
-
* TIN (Thai Tax Identification Number,
|
|
8
|
-
* เลขประจำตัวผู้เสียภาษี).
|
|
9
|
-
*
|
|
10
|
-
* 13 digits. Individual TINs have first digit 1-8;
|
|
11
|
-
* company TINs (MOA) start with 0. Both use a
|
|
12
|
-
* weighted mod-11 check digit.
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.rd.go.th/
|
|
15
|
-
* @see https://en.wikipedia.org/wiki/Thai_identity_card
|
|
16
|
-
*/
|
|
17
6
|
const compact = (value) => clean(value, " -");
|
|
18
7
|
const validate = (value) => {
|
|
19
8
|
const v = compact(value);
|
|
@@ -46,6 +35,7 @@ const tin = {
|
|
|
46
35
|
abbreviation: "TIN",
|
|
47
36
|
aliases: ["เลขประจำตัวผู้เสียภาษี", "TIN"],
|
|
48
37
|
candidatePattern: "\\d{13}",
|
|
38
|
+
scope: "country",
|
|
49
39
|
country: "TH",
|
|
50
40
|
entityType: "any",
|
|
51
41
|
description: "13-digit tax identifier for individuals and companies",
|
package/dist/th/tin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tin.js","names":[],"sources":["../../src/th/tin.ts"],"sourcesContent":["/**\n * TIN (Thai Tax Identification Number,\n * เลขประจำตัวผู้เสียภาษี).\n *\n * 13 digits. Individual TINs have first digit 1-8;\n * company TINs (MOA) start with 0. Both use a\n * weighted mod-11 check digit.\n *\n * @see https://www.rd.go.th/\n * @see https://en.wikipedia.org/wiki/Thai_identity_card\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":"tin.js","names":[],"sources":["../../src/th/tin.ts"],"sourcesContent":["/**\n * TIN (Thai Tax Identification Number,\n * เลขประจำตัวผู้เสียภาษี).\n *\n * 13 digits. Individual TINs have first digit 1-8;\n * company TINs (MOA) start with 0. Both use a\n * weighted mod-11 check digit.\n *\n * @see https://www.rd.go.th/\n * @see https://en.wikipedia.org/wiki/Thai_identity_card\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 if (v.length !== 13) {\n return err(\n \"INVALID_LENGTH\",\n \"TIN must be exactly 13 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"TIN must contain only digits\",\n );\n }\n\n // First digit: 1-8 for individuals, 0 for companies\n const first = Number(v[0]);\n if (first > 8) {\n return err(\n \"INVALID_COMPONENT\",\n \"TIN first digit must be 0-8\",\n );\n }\n\n // Mod-11 check digit (position 13)\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n sum += Number(v[i]) * (13 - i);\n }\n const check = (11 - (sum % 11)) % 10;\n if (check !== Number(v[12])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"TIN check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return (\n `${v[0]} ${v.slice(1, 5)} ` +\n `${v.slice(5, 10)} ${v.slice(10, 12)} ${v[12]}`\n );\n};\n\n/** Generate a random valid Thai TIN. */\nconst generate = (): string => {\n const first = String(randomInt(1, 8));\n const payload = first + randomDigits(11);\n let sum = 0;\n for (let i = 0; i < 12; i++)\n sum += (13 - i) * Number(payload[i]);\n return payload + String((11 - (sum % 11)) % 10);\n};\n\n/** Thai Tax Identification Number. */\nconst tin: CountryValidator<\"TH\"> = {\n name: \"Thai Tax Identification Number\",\n localName: \"เลขประจำตัวผู้เสียภาษี\",\n abbreviation: \"TIN\",\n aliases: [\"เลขประจำตัวผู้เสียภาษี\", \"TIN\"] as const,\n candidatePattern: \"\\\\d{13}\",\n scope: \"country\",\n country: \"TH\",\n entityType: \"any\",\n description:\n \"13-digit tax identifier for individuals and companies\",\n sourceUrl: \"https://www.rd.go.th/\",\n lengths: [13] as const,\n examples: [\"1101700230708\", \"3100600445015\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default tin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAsBA,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;CAKF,IADc,OAAO,EAAE,EACf,IAAI,GACV,OAAO,IACL,qBACA,6BACF;CAIF,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,OAAO,OAAO,EAAE,EAAE,KAAK,KAAK;CAG9B,KADe,KAAM,MAAM,MAAO,OACpB,OAAO,EAAE,GAAG,GACxB,OAAO,IACL,oBACA,gCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OACE,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GACtB,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE;AAE9C;;AAGA,MAAM,iBAAyB;CAE7B,MAAM,UADQ,OAAO,UAAU,GAAG,CAAC,CACf,IAAI,aAAa,EAAE;CACvC,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,QAAQ,KAAK,KAAK,OAAO,QAAQ,EAAE;CACrC,OAAO,UAAU,QAAQ,KAAM,MAAM,MAAO,EAAE;AAChD;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,0BAA0B,KAAK;CACzC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CACF,WAAW;CACX,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,iBAAiB,eAAe;CAC3C;CACA;CACA;CACA;AACF"}
|
package/dist/tr/tckimlik.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/tr/tckimlik.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -8,7 +8,7 @@ declare const format: (value: string) => string;
|
|
|
8
8
|
/** Generate a random valid Turkish T.C. Kimlik No. */
|
|
9
9
|
declare const generate: () => string;
|
|
10
10
|
/** Turkish Personal Identification Number. */
|
|
11
|
-
declare const tckimlik:
|
|
11
|
+
declare const tckimlik: CountryValidator<"TR">;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { compact, tckimlik as default, format, generate, validate };
|
|
14
14
|
//# sourceMappingURL=tckimlik.d.ts.map
|
package/dist/tr/tckimlik.js
CHANGED
|
@@ -3,26 +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/tr/tckimlik.ts
|
|
6
|
-
/**
|
|
7
|
-
* T.C. Kimlik No.
|
|
8
|
-
* (Türkiye Cumhuriyeti Kimlik Numarası,
|
|
9
|
-
* Turkish personal identification number).
|
|
10
|
-
*
|
|
11
|
-
* 11-digit unique personal ID assigned to every
|
|
12
|
-
* Turkish citizen by MERNİS (Merkezi Nüfus İdaresi
|
|
13
|
-
* Sistemi). The first digit is never zero. The last
|
|
14
|
-
* two digits are check digits.
|
|
15
|
-
*
|
|
16
|
-
* Check digit algorithm:
|
|
17
|
-
* Let A = sum of digits at odd positions (1,3,5,7,9)
|
|
18
|
-
* Let B = sum of digits at even positions (2,4,6,8)
|
|
19
|
-
* d10 = (7 * A - B) mod 10
|
|
20
|
-
* d11 = (d1 + d2 + ... + d10) mod 10
|
|
21
|
-
*
|
|
22
|
-
* @see https://tckimlik.nvi.gov.tr/
|
|
23
|
-
* @see https://en.wikipedia.org/wiki/Turkish_Identification_Number
|
|
24
|
-
* @see https://www.turkiye.gov.tr/nvi-tckn-dogrulama
|
|
25
|
-
*/
|
|
26
6
|
const compact = (value) => clean(value, " -./");
|
|
27
7
|
/**
|
|
28
8
|
* Calculate the two check digits from the first
|
|
@@ -64,6 +44,7 @@ const tckimlik = {
|
|
|
64
44
|
abbreviation: "T.C. Kimlik",
|
|
65
45
|
aliases: ["TC Kimlik No", "T.C. Kimlik Numarası"],
|
|
66
46
|
candidatePattern: "[1-9]\\d{10}",
|
|
47
|
+
scope: "country",
|
|
67
48
|
country: "TR",
|
|
68
49
|
entityType: "person",
|
|
69
50
|
sourceUrl: "https://www.nvi.gov.tr/",
|
package/dist/tr/tckimlik.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tckimlik.js","names":[],"sources":["../../src/tr/tckimlik.ts"],"sourcesContent":["/**\n * T.C. Kimlik No.\n * (Türkiye Cumhuriyeti Kimlik Numarası,\n * Turkish personal identification number).\n *\n * 11-digit unique personal ID assigned to every\n * Turkish citizen by MERNİS (Merkezi Nüfus İdaresi\n * Sistemi). The first digit is never zero. The last\n * two digits are check digits.\n *\n * Check digit algorithm:\n * Let A = sum of digits at odd positions (1,3,5,7,9)\n * Let B = sum of digits at even positions (2,4,6,8)\n * d10 = (7 * A - B) mod 10\n * d11 = (d1 + d2 + ... + d10) mod 10\n *\n * @see https://tckimlik.nvi.gov.tr/\n * @see https://en.wikipedia.org/wiki/Turkish_Identification_Number\n * @see https://www.turkiye.gov.tr/nvi-tckn-dogrulama\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":"tckimlik.js","names":[],"sources":["../../src/tr/tckimlik.ts"],"sourcesContent":["/**\n * T.C. Kimlik No.\n * (Türkiye Cumhuriyeti Kimlik Numarası,\n * Turkish personal identification number).\n *\n * 11-digit unique personal ID assigned to every\n * Turkish citizen by MERNİS (Merkezi Nüfus İdaresi\n * Sistemi). The first digit is never zero. The last\n * two digits are check digits.\n *\n * Check digit algorithm:\n * Let A = sum of digits at odd positions (1,3,5,7,9)\n * Let B = sum of digits at even positions (2,4,6,8)\n * d10 = (7 * A - B) mod 10\n * d11 = (d1 + d2 + ... + d10) mod 10\n *\n * @see https://tckimlik.nvi.gov.tr/\n * @see https://en.wikipedia.org/wiki/Turkish_Identification_Number\n * @see https://www.turkiye.gov.tr/nvi-tckn-dogrulama\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\n/**\n * Calculate the two check digits from the first\n * nine digits of a T.C. Kimlik number.\n */\nconst calcCheckDigits = (number: string): string => {\n let oddSum = 0;\n let evenSum = 0;\n for (let i = 0; i < 9; i++) {\n const d = Number(number[i]);\n if (i % 2 === 0) {\n oddSum += d;\n } else {\n evenSum += d;\n }\n }\n const d10 = (((7 * oddSum - evenSum) % 10) + 10) % 10;\n const d11 = (oddSum + evenSum + d10) % 10;\n return `${d10}${d11}`;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"T.C. Kimlik number must be 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"T.C. Kimlik number must contain only digits\",\n );\n }\n if (v[0] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"T.C. Kimlik number cannot start with 0\",\n );\n }\n if (calcCheckDigits(v) !== v.slice(9)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"T.C. Kimlik number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\n/** TR IDs are displayed without separators. */\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Turkish T.C. Kimlik No. */\nconst generate = (): string => {\n const payload = String(randomInt(1, 9)) + randomDigits(8);\n return payload + calcCheckDigits(payload);\n};\n\n/** Turkish Personal Identification Number. */\nconst tckimlik: CountryValidator<\"TR\"> = {\n name: \"Turkish Personal ID\",\n localName: \"T.C. Kimlik Numarası\",\n abbreviation: \"T.C. Kimlik\",\n aliases: [\n \"TC Kimlik No\",\n \"T.C. Kimlik Numarası\",\n ] as const,\n candidatePattern: \"[1-9]\\\\d{10}\",\n scope: \"country\",\n country: \"TR\",\n entityType: \"person\",\n sourceUrl: \"https://www.nvi.gov.tr/\",\n examples: [\"17291716060\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default tckimlik;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AA+BA,MAAM,WAAW,UACf,MAAM,OAAO,MAAM;;;;;AAMrB,MAAM,mBAAmB,WAA2B;CAClD,IAAI,SAAS;CACb,IAAI,UAAU;CACd,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,IAAI,OAAO,OAAO,EAAE;EAC1B,IAAI,IAAI,MAAM,GACZ,UAAU;OAEV,WAAW;CAEf;CACA,MAAM,QAAS,IAAI,SAAS,WAAW,KAAM,MAAM;CAEnD,OAAO,GAAG,OADG,SAAS,UAAU,OAAO;AAEzC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,sCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,6CACF;CAEF,IAAI,EAAE,OAAO,KACX,OAAO,IACL,qBACA,wCACF;CAEF,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,IACL,oBACA,yCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;;AAGA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,MAAM,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC;CACxD,OAAO,UAAU,gBAAgB,OAAO;AAC1C;;AAGA,MAAM,WAAmC;CACvC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,gBACA,sBACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
|
package/dist/tr/vkn.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/tr/vkn.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -8,7 +8,7 @@ declare const format: (value: string) => string;
|
|
|
8
8
|
/** Generate a random valid Turkish VKN. */
|
|
9
9
|
declare const generate: () => string;
|
|
10
10
|
/** Turkish Tax Identification Number. */
|
|
11
|
-
declare const vkn:
|
|
11
|
+
declare const vkn: CountryValidator<"TR">;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { compact, vkn as default, format, generate, validate };
|
|
14
14
|
//# sourceMappingURL=vkn.d.ts.map
|
package/dist/tr/vkn.js
CHANGED
|
@@ -3,26 +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/tr/vkn.ts
|
|
6
|
-
/**
|
|
7
|
-
* VKN (Vergi Kimlik Numarası, Turkish tax
|
|
8
|
-
* identification number).
|
|
9
|
-
*
|
|
10
|
-
* 10-digit tax ID used for businesses in Turkey.
|
|
11
|
-
* The last digit is a check digit.
|
|
12
|
-
*
|
|
13
|
-
* Check digit algorithm:
|
|
14
|
-
* For each of the first 9 digits (right to left,
|
|
15
|
-
* position i = 1..9):
|
|
16
|
-
* c1 = (digit + i) mod 10
|
|
17
|
-
* c2 = if c1 != 0: (c1 * 2^i) mod 9, or 9 if
|
|
18
|
-
* that result is 0
|
|
19
|
-
* sum += c2
|
|
20
|
-
* check = (10 - sum) mod 10
|
|
21
|
-
*
|
|
22
|
-
* @see https://www.turkiye.gov.tr/gib-intvrg-vergi-kimlik-numarasi-dogrulama
|
|
23
|
-
* @see https://arthurdejong.org/python-stdnum/doc/1.17/stdnum.tr.vkn
|
|
24
|
-
* @see https://www.gib.gov.tr/
|
|
25
|
-
*/
|
|
26
6
|
const compact = (value) => clean(value, " -./");
|
|
27
7
|
/**
|
|
28
8
|
* Calculate the check digit for the first 9 digits
|
|
@@ -64,6 +44,7 @@ const vkn = {
|
|
|
64
44
|
abbreviation: "VKN",
|
|
65
45
|
aliases: ["VKN", "Vergi Kimlik Numarası"],
|
|
66
46
|
candidatePattern: "\\d{10}",
|
|
47
|
+
scope: "country",
|
|
67
48
|
country: "TR",
|
|
68
49
|
entityType: "company",
|
|
69
50
|
sourceUrl: "https://www.gib.gov.tr/",
|
package/dist/tr/vkn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vkn.js","names":[],"sources":["../../src/tr/vkn.ts"],"sourcesContent":["/**\n * VKN (Vergi Kimlik Numarası, Turkish tax\n * identification number).\n *\n * 10-digit tax ID used for businesses in Turkey.\n * The last digit is a check digit.\n *\n * Check digit algorithm:\n * For each of the first 9 digits (right to left,\n * position i = 1..9):\n * c1 = (digit + i) mod 10\n * c2 = if c1 != 0: (c1 * 2^i) mod 9, or 9 if\n * that result is 0\n * sum += c2\n * check = (10 - sum) mod 10\n *\n * @see https://www.turkiye.gov.tr/gib-intvrg-vergi-kimlik-numarasi-dogrulama\n * @see https://arthurdejong.org/python-stdnum/doc/1.17/stdnum.tr.vkn\n * @see https://www.gib.gov.tr/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"vkn.js","names":[],"sources":["../../src/tr/vkn.ts"],"sourcesContent":["/**\n * VKN (Vergi Kimlik Numarası, Turkish tax\n * identification number).\n *\n * 10-digit tax ID used for businesses in Turkey.\n * The last digit is a check digit.\n *\n * Check digit algorithm:\n * For each of the first 9 digits (right to left,\n * position i = 1..9):\n * c1 = (digit + i) mod 10\n * c2 = if c1 != 0: (c1 * 2^i) mod 9, or 9 if\n * that result is 0\n * sum += c2\n * check = (10 - sum) mod 10\n *\n * @see https://www.turkiye.gov.tr/gib-intvrg-vergi-kimlik-numarasi-dogrulama\n * @see https://arthurdejong.org/python-stdnum/doc/1.17/stdnum.tr.vkn\n * @see https://www.gib.gov.tr/\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, \" -./\");\n\n/**\n * Calculate the check digit for the first 9 digits\n * of a VKN.\n */\nconst calcCheckDigit = (number: string): string => {\n let s = 0;\n for (let i = 0; i < 9; i++) {\n const pos = 9 - i; // position 1..9 from right\n const c1 = (Number(number[i]) + pos) % 10;\n if (c1 !== 0) {\n const pow = 2 ** pos;\n const c2 = (c1 * pow) % 9 || 9;\n s += c2;\n }\n }\n return String((10 - (s % 10)) % 10);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\"INVALID_LENGTH\", \"VKN must be 10 digits\");\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"VKN must contain only digits\",\n );\n }\n if (calcCheckDigit(v) !== v[9]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"VKN check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\n/** TR IDs are displayed without separators. */\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Turkish VKN. */\nconst generate = (): string => {\n const payload = randomDigits(9);\n return payload + calcCheckDigit(payload);\n};\n\n/** Turkish Tax Identification Number. */\nconst vkn: CountryValidator<\"TR\"> = {\n name: \"Turkish Tax ID\",\n localName: \"Vergi Kimlik Numarası\",\n abbreviation: \"VKN\",\n aliases: [\"VKN\", \"Vergi Kimlik Numarası\"] as const,\n candidatePattern: \"\\\\d{10}\",\n scope: \"country\",\n country: \"TR\",\n entityType: \"company\",\n sourceUrl: \"https://www.gib.gov.tr/\",\n examples: [\"4540536920\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vkn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AA+BA,MAAM,WAAW,UACf,MAAM,OAAO,MAAM;;;;;AAMrB,MAAM,kBAAkB,WAA2B;CACjD,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,MAAM,IAAI;EAChB,MAAM,MAAM,OAAO,OAAO,EAAE,IAAI,OAAO;EACvC,IAAI,OAAO,GAAG;GAEZ,MAAM,KAAM,KADA,KAAK,MACO,KAAK;GAC7B,KAAK;EACP;CACF;CACA,OAAO,QAAQ,KAAM,IAAI,MAAO,EAAE;AACpC;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;CAEF,IAAI,eAAe,CAAC,MAAM,EAAE,IAC1B,OAAO,IACL,oBACA,0BACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;;AAGA,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,CAAC,OAAO,uBAAuB;CACxC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;AACF"}
|
package/dist/tw/ubn.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/tw/ubn.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 UBN. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Taiwanese Unified Business Number. */
|
|
10
|
-
declare const ubn:
|
|
10
|
+
declare const ubn: CountryValidator<"TW">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, ubn as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=ubn.d.ts.map
|
package/dist/tw/ubn.js
CHANGED
|
@@ -3,17 +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/tw/ubn.ts
|
|
6
|
-
/**
|
|
7
|
-
* UBN (Unified Business Number, 統一編號).
|
|
8
|
-
*
|
|
9
|
-
* Taiwanese company identifier. 8 digits with a
|
|
10
|
-
* weighted checksum. Weights [1,2,1,2,1,2,4,1];
|
|
11
|
-
* sum the individual digits of each product, total
|
|
12
|
-
* mod 10 must be 0. Special case: when the 7th digit
|
|
13
|
-
* is 7, checksum 9 is also accepted.
|
|
14
|
-
*
|
|
15
|
-
* @see https://zh.wikipedia.org/wiki/統一編號
|
|
16
|
-
*/
|
|
17
6
|
const WEIGHTS = [
|
|
18
7
|
1,
|
|
19
8
|
2,
|
|
@@ -69,6 +58,7 @@ const ubn = {
|
|
|
69
58
|
abbreviation: "UBN",
|
|
70
59
|
aliases: ["統一編號", "UBN"],
|
|
71
60
|
candidatePattern: "\\d{8}",
|
|
61
|
+
scope: "country",
|
|
72
62
|
country: "TW",
|
|
73
63
|
entityType: "company",
|
|
74
64
|
description: "8-digit company identifier issued by the Ministry of Economic Affairs",
|
package/dist/tw/ubn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ubn.js","names":[],"sources":["../../src/tw/ubn.ts"],"sourcesContent":["/**\n * UBN (Unified Business Number, 統一編號).\n *\n * Taiwanese company identifier. 8 digits with a\n * weighted checksum. Weights [1,2,1,2,1,2,4,1];\n * sum the individual digits of each product, total\n * mod 10 must be 0. Special case: when the 7th digit\n * is 7, checksum 9 is also accepted.\n *\n * @see https://zh.wikipedia.org/wiki/統一編號\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"ubn.js","names":[],"sources":["../../src/tw/ubn.ts"],"sourcesContent":["/**\n * UBN (Unified Business Number, 統一編號).\n *\n * Taiwanese company identifier. 8 digits with a\n * weighted checksum. Weights [1,2,1,2,1,2,4,1];\n * sum the individual digits of each product, total\n * mod 10 must be 0. Special case: when the 7th digit\n * is 7, checksum 9 is also accepted.\n *\n * @see https://zh.wikipedia.org/wiki/統一編號\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [1, 2, 1, 2, 1, 2, 4, 1] as const;\n\n/** Sum the individual digits of a number. */\nconst digitSum = (n: number): number => {\n let sum = 0;\n while (n > 0) {\n sum += n % 10;\n n = Math.floor(n / 10);\n }\n return sum;\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"UBN must be exactly 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"UBN must contain only digits\",\n );\n }\n\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += digitSum(Number(v[i]) * weight);\n }\n\n const checksum = sum % 10;\n if (checksum === 0) {\n return { valid: true, compact: v };\n }\n\n // Special case: when the 7th digit is 7 (product\n // 4*7=28), the checksum may be 9 instead of 0.\n if (checksum === 9 && v[6] === \"7\") {\n return { valid: true, compact: v };\n }\n\n return err(\n \"INVALID_CHECKSUM\",\n \"UBN checksum does not match\",\n );\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid UBN. */\nconst generate = (): string => {\n for (;;) {\n const prefix = randomDigits(7);\n for (let d = 0; d < 10; d++) {\n const candidate = `${prefix}${d}`;\n const r = validate(candidate);\n if (r.valid) return candidate;\n }\n }\n};\n\n/** Taiwanese Unified Business Number. */\nconst ubn: CountryValidator<\"TW\"> = {\n name: \"Unified Business Number\",\n localName: \"統一編號\",\n abbreviation: \"UBN\",\n aliases: [\"統一編號\", \"UBN\"] as const,\n candidatePattern: \"\\\\d{8}\",\n scope: \"country\",\n country: \"TW\",\n entityType: \"company\",\n description:\n \"8-digit company identifier issued by the Ministry of Economic Affairs\",\n sourceUrl:\n \"https://zh.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E7%B7%A8%E8%99%9F\",\n lengths: [8] as const,\n examples: [\"00501503\", \"04595257\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ubn;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;AAsBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;;AAGvC,MAAM,YAAY,MAAsB;CACtC,IAAI,MAAM;CACV,OAAO,IAAI,GAAG;EACZ,OAAO,IAAI;EACX,IAAI,KAAK,MAAM,IAAI,EAAE;CACvB;CACA,OAAO;AACT;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAGF,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GACxC,OAAO,SAAS,OAAO,EAAE,EAAE,IAAI,MAAM;CAGvC,MAAM,WAAW,MAAM;CACvB,IAAI,aAAa,GACf,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;CAKnC,IAAI,aAAa,KAAK,EAAE,OAAO,KAC7B,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;CAGnC,OAAO,IACL,oBACA,6BACF;AACF;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,SAAS,aAAa,CAAC;EAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;GAC3B,MAAM,YAAY,GAAG,SAAS;GAE9B,IADU,SAAS,SACf,EAAE,OAAO,OAAO;EACtB;CACF;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,KAAK;CACvB,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CACF,WACE;CACF,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,YAAY,UAAU;CACjC;CACA;CACA;CACA;AACF"}
|
package/dist/types.d.ts
CHANGED
|
@@ -31,11 +31,25 @@ type ParsedPersonId = ParsedBirthDate & {
|
|
|
31
31
|
gender: "male" | "female";
|
|
32
32
|
};
|
|
33
33
|
type ParsedIdentifier = ParsedBirthDate | ParsedPersonId;
|
|
34
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Whether an identifier is scoped to a single
|
|
36
|
+
* country (e.g. Czech IČO) or is cross-border by
|
|
37
|
+
* design (e.g. IBAN, ISIN, BIC, LEI, EU VAT).
|
|
38
|
+
*
|
|
39
|
+
* Modeled as a discriminated union so consumers
|
|
40
|
+
* can group, filter, and exhaustively switch
|
|
41
|
+
* without null-checking `country`.
|
|
42
|
+
*/
|
|
43
|
+
type ValidatorScope = {
|
|
44
|
+
scope: "country";
|
|
45
|
+
country: CountryCode;
|
|
46
|
+
} | {
|
|
47
|
+
scope: "global";
|
|
48
|
+
};
|
|
49
|
+
type ValidatorBase<TParsed extends ParsedIdentifier | undefined = undefined> = {
|
|
35
50
|
/** English name. */name: string; /** Name in the local language. */
|
|
36
51
|
localName: string; /** Common abbreviation (e.g. "IČO"). */
|
|
37
|
-
abbreviation: string; /**
|
|
38
|
-
country?: CountryCode; /** What kind of entity this identifies. */
|
|
52
|
+
abbreviation: string; /** What kind of entity this identifies. */
|
|
39
53
|
entityType: "person" | "company" | "any";
|
|
40
54
|
/**
|
|
41
55
|
* Strip separators and normalize to a
|
|
@@ -102,7 +116,15 @@ type Validator<TParsed extends ParsedIdentifier | undefined = undefined> = {
|
|
|
102
116
|
} & ([TParsed] extends [undefined] ? unknown : {
|
|
103
117
|
parse: (value: string) => TParsed | null;
|
|
104
118
|
});
|
|
119
|
+
type CountryValidator<TCountry extends CountryCode = CountryCode, TParsed extends ParsedIdentifier | undefined = undefined> = ValidatorBase<TParsed> & {
|
|
120
|
+
scope: "country";
|
|
121
|
+
country: TCountry;
|
|
122
|
+
};
|
|
123
|
+
type GlobalValidator<TParsed extends ParsedIdentifier | undefined = undefined> = ValidatorBase<TParsed> & {
|
|
124
|
+
scope: "global";
|
|
125
|
+
};
|
|
126
|
+
type Validator<TParsed extends ParsedIdentifier | undefined = undefined> = CountryValidator<CountryCode, TParsed> | GlobalValidator<TParsed>;
|
|
105
127
|
type ParsableValidator<TParsed extends ParsedIdentifier = ParsedIdentifier> = Validator<TParsed>;
|
|
106
128
|
//#endregion
|
|
107
|
-
export { CountryCode, ErrorCode, ParsableValidator, ParsedBirthDate, ParsedIdentifier, ParsedPersonId, StdnumError, ValidateResult, Validator };
|
|
129
|
+
export { CountryCode, CountryValidator, ErrorCode, GlobalValidator, ParsableValidator, ParsedBirthDate, ParsedIdentifier, ParsedPersonId, StdnumError, ValidateResult, Validator, ValidatorScope };
|
|
108
130
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/ua/edrpou.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ua/edrpou.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 Ukrainian EDRPOU. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Ukrainian Company Register Number. */
|
|
10
|
-
declare const edrpou:
|
|
10
|
+
declare const edrpou: CountryValidator<"UA">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, edrpou as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=edrpou.d.ts.map
|
package/dist/ua/edrpou.js
CHANGED
|
@@ -3,17 +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/ua/edrpou.ts
|
|
6
|
-
/**
|
|
7
|
-
* EDRPOU (ЄДРПОУ, Unified State Register of
|
|
8
|
-
* Enterprises and Organizations of Ukraine).
|
|
9
|
-
*
|
|
10
|
-
* 8-digit company identification number with a
|
|
11
|
-
* weighted checksum. Two sets of weights are used
|
|
12
|
-
* depending on whether the first digit is 0-2/6-9 or 3-5.
|
|
13
|
-
*
|
|
14
|
-
* @see https://en.wikipedia.org/wiki/EDRPOU
|
|
15
|
-
* @see https://usr.minjust.gov.ua/
|
|
16
|
-
*/
|
|
17
6
|
const WEIGHTS_A = [
|
|
18
7
|
1,
|
|
19
8
|
2,
|
|
@@ -90,6 +79,7 @@ const edrpou = {
|
|
|
90
79
|
abbreviation: "ЄДРПОУ",
|
|
91
80
|
aliases: ["ЄДРПОУ", "EDRPOU"],
|
|
92
81
|
candidatePattern: "\\d{8}",
|
|
82
|
+
scope: "country",
|
|
93
83
|
country: "UA",
|
|
94
84
|
entityType: "company",
|
|
95
85
|
lengths: [8],
|
package/dist/ua/edrpou.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edrpou.js","names":[],"sources":["../../src/ua/edrpou.ts"],"sourcesContent":["/**\n * EDRPOU (ЄДРПОУ, Unified State Register of\n * Enterprises and Organizations of Ukraine).\n *\n * 8-digit company identification number with a\n * weighted checksum. Two sets of weights are used\n * depending on whether the first digit is 0-2/6-9 or 3-5.\n *\n * @see https://en.wikipedia.org/wiki/EDRPOU\n * @see https://usr.minjust.gov.ua/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"edrpou.js","names":[],"sources":["../../src/ua/edrpou.ts"],"sourcesContent":["/**\n * EDRPOU (ЄДРПОУ, Unified State Register of\n * Enterprises and Organizations of Ukraine).\n *\n * 8-digit company identification number with a\n * weighted checksum. Two sets of weights are used\n * depending on whether the first digit is 0-2/6-9 or 3-5.\n *\n * @see https://en.wikipedia.org/wiki/EDRPOU\n * @see https://usr.minjust.gov.ua/\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_A = [1, 2, 3, 4, 5, 6, 7] as const;\nconst WEIGHTS_B = [7, 1, 2, 3, 4, 5, 6] as const;\nconst WEIGHTS_A2 = [3, 4, 5, 6, 7, 8, 9] as const;\nconst WEIGHTS_B2 = [9, 3, 4, 5, 6, 7, 8] as const;\n\nconst calcCheck = (\n value: string,\n weights: readonly number[],\n): number => {\n let sum = 0;\n for (const [i, weight] of weights.entries()) {\n if (i >= 7) break;\n sum += Number(value[i]) * weight;\n }\n return sum % 11;\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"EDRPOU must be exactly 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"EDRPOU must contain only digits\",\n );\n }\n\n const firstDigit = Number(v[0]);\n const useA = firstDigit < 3 || firstDigit >= 6;\n const weightsFirst = useA ? WEIGHTS_A : WEIGHTS_B;\n const weightsSecond = useA ? WEIGHTS_A2 : WEIGHTS_B2;\n\n let check = calcCheck(v, weightsFirst);\n if (check >= 10) {\n check = calcCheck(v, weightsSecond) % 10;\n }\n\n if (check !== Number(v[7])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"EDRPOU check digit mismatch\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Ukrainian EDRPOU. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(8);\n if (validate(c).valid) return c;\n }\n};\n\n/** Ukrainian Company Register Number. */\nconst edrpou: CountryValidator<\"UA\"> = {\n name: \"Ukrainian Company Register Number\",\n localName: \"ЄДРПОУ\",\n abbreviation: \"ЄДРПОУ\",\n aliases: [\"ЄДРПОУ\", \"EDRPOU\"] as const,\n candidatePattern: \"\\\\d{8}\",\n scope: \"country\",\n country: \"UA\",\n entityType: \"company\",\n lengths: [8] as const,\n sourceUrl: \"https://usr.minjust.gov.ua/\",\n examples: [\"14360570\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default edrpou;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAsBA,MAAM,YAAY;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AACtC,MAAM,YAAY;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AACtC,MAAM,aAAa;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AACvC,MAAM,aAAa;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEvC,MAAM,aACJ,OACA,YACW;CACX,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GAAG;EAC3C,IAAI,KAAK,GAAG;EACZ,OAAO,OAAO,MAAM,EAAE,IAAI;CAC5B;CACA,OAAO,MAAM;AACf;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,iCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,iCACF;CAGF,MAAM,aAAa,OAAO,EAAE,EAAE;CAC9B,MAAM,OAAO,aAAa,KAAK,cAAc;CAC7C,MAAM,eAAe,OAAO,YAAY;CACxC,MAAM,gBAAgB,OAAO,aAAa;CAE1C,IAAI,QAAQ,UAAU,GAAG,YAAY;CACrC,IAAI,SAAS,IACX,QAAQ,UAAU,GAAG,aAAa,IAAI;CAGxC,IAAI,UAAU,OAAO,EAAE,EAAE,GACvB,OAAO,IACL,oBACA,6BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,CAAC;EACxB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,SAAiC;CACrC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,UAAU,QAAQ;CAC5B,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,CAAC;CACX,WAAW;CACX,UAAU,CAAC,UAAU;CACrB;CACA;CACA;CACA;AACF"}
|
package/dist/us/ein.d.ts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/us/ein.d.ts
|
|
4
4
|
/** Generate a random valid U.S. EIN. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* EIN (U.S. Employer Identification Number).
|
|
8
|
+
*
|
|
9
|
+
* 9-digit identifier: 2-digit campus prefix +
|
|
10
|
+
* 7-digit group. No checksum. The first 2 digits
|
|
11
|
+
* must be a valid IRS campus code.
|
|
12
|
+
*
|
|
13
|
+
* @see https://en.wikipedia.org/wiki/Employer_Identification_Number
|
|
14
|
+
* @see https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes
|
|
15
|
+
*/
|
|
6
16
|
declare const compact: (value: string) => string;
|
|
7
17
|
declare const validate: (value: string) => ValidateResult;
|
|
8
18
|
declare const format: (value: string) => string;
|
|
9
19
|
/** U.S. Employer Identification Number. */
|
|
10
|
-
declare const ein:
|
|
20
|
+
declare const ein: CountryValidator<"US">;
|
|
11
21
|
//#endregion
|
|
12
22
|
export { compact, ein as default, format, generate, validate };
|
|
13
23
|
//# sourceMappingURL=ein.d.ts.map
|
package/dist/us/ein.js
CHANGED
|
@@ -3,16 +3,6 @@ import { randomDigits, randomPick } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/us/ein.ts
|
|
6
|
-
/**
|
|
7
|
-
* EIN (U.S. Employer Identification Number).
|
|
8
|
-
*
|
|
9
|
-
* 9-digit identifier: 2-digit campus prefix +
|
|
10
|
-
* 7-digit group. No checksum. The first 2 digits
|
|
11
|
-
* must be a valid IRS campus code.
|
|
12
|
-
*
|
|
13
|
-
* @see https://en.wikipedia.org/wiki/Employer_Identification_Number
|
|
14
|
-
* @see https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes
|
|
15
|
-
*/
|
|
16
6
|
const EIN_PREFIXES = [
|
|
17
7
|
"01",
|
|
18
8
|
"02",
|
|
@@ -219,6 +209,7 @@ const ein = {
|
|
|
219
209
|
"Federal Tax ID"
|
|
220
210
|
],
|
|
221
211
|
candidatePattern: "\\d{2}-?\\d{7}",
|
|
212
|
+
scope: "country",
|
|
222
213
|
country: "US",
|
|
223
214
|
entityType: "company",
|
|
224
215
|
sourceUrl: "https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes",
|
package/dist/us/ein.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ein.js","names":[],"sources":["../../src/us/ein.ts"],"sourcesContent":["const EIN_PREFIXES = [\n \"01\",\n \"02\",\n \"03\",\n \"04\",\n \"05\",\n \"06\",\n \"10\",\n \"11\",\n \"12\",\n \"13\",\n \"14\",\n \"15\",\n \"16\",\n \"20\",\n \"21\",\n \"22\",\n \"23\",\n \"24\",\n \"25\",\n \"26\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"35\",\n \"36\",\n \"37\",\n \"38\",\n \"39\",\n \"40\",\n \"41\",\n \"42\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"50\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"59\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"67\",\n \"68\",\n \"71\",\n \"72\",\n \"73\",\n \"74\",\n \"75\",\n \"76\",\n \"77\",\n \"80\",\n \"81\",\n \"82\",\n \"83\",\n \"84\",\n \"85\",\n \"86\",\n \"87\",\n \"88\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n \"99\",\n] as const;\n\n/** Generate a random valid U.S. EIN. */\nconst generate = (): string => {\n const prefix = randomPick(EIN_PREFIXES);\n return prefix + randomDigits(7);\n};\n\n/**\n * EIN (U.S. Employer Identification Number).\n *\n * 9-digit identifier: 2-digit campus prefix +\n * 7-digit group. No checksum. The first 2 digits\n * must be a valid IRS campus code.\n *\n * @see https://en.wikipedia.org/wiki/Employer_Identification_Number\n * @see https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"ein.js","names":[],"sources":["../../src/us/ein.ts"],"sourcesContent":["const EIN_PREFIXES = [\n \"01\",\n \"02\",\n \"03\",\n \"04\",\n \"05\",\n \"06\",\n \"10\",\n \"11\",\n \"12\",\n \"13\",\n \"14\",\n \"15\",\n \"16\",\n \"20\",\n \"21\",\n \"22\",\n \"23\",\n \"24\",\n \"25\",\n \"26\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"35\",\n \"36\",\n \"37\",\n \"38\",\n \"39\",\n \"40\",\n \"41\",\n \"42\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"50\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"59\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"67\",\n \"68\",\n \"71\",\n \"72\",\n \"73\",\n \"74\",\n \"75\",\n \"76\",\n \"77\",\n \"80\",\n \"81\",\n \"82\",\n \"83\",\n \"84\",\n \"85\",\n \"86\",\n \"87\",\n \"88\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n \"99\",\n] as const;\n\n/** Generate a random valid U.S. EIN. */\nconst generate = (): string => {\n const prefix = randomPick(EIN_PREFIXES);\n return prefix + randomDigits(7);\n};\n\n/**\n * EIN (U.S. Employer Identification Number).\n *\n * 9-digit identifier: 2-digit campus prefix +\n * 7-digit group. No checksum. The first 2 digits\n * must be a valid IRS campus code.\n *\n * @see https://en.wikipedia.org/wiki/Employer_Identification_Number\n * @see https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\n/**\n * Valid EIN campus prefixes. Sourced from IRS\n * documentation and python-stdnum's numdb.\n */\nconst VALID_PREFIXES = new Set([\n \"01\",\n \"02\",\n \"03\",\n \"04\",\n \"05\",\n \"06\",\n \"10\",\n \"11\",\n \"12\",\n \"13\",\n \"14\",\n \"15\",\n \"16\",\n \"20\",\n \"21\",\n \"22\",\n \"23\",\n \"24\",\n \"25\",\n \"26\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"35\",\n \"36\",\n \"37\",\n \"38\",\n \"39\",\n \"40\",\n \"41\",\n \"42\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"50\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"59\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"67\",\n \"68\",\n \"71\",\n \"72\",\n \"73\",\n \"74\",\n \"75\",\n \"76\",\n \"77\",\n \"80\",\n \"81\",\n \"82\",\n \"83\",\n \"84\",\n \"85\",\n \"86\",\n \"87\",\n \"88\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n \"99\",\n]);\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"EIN must contain only digits\",\n );\n }\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"EIN must be 9 digits\");\n }\n const prefix = v.slice(0, 2);\n if (!VALID_PREFIXES.has(prefix)) {\n return err(\n \"INVALID_COMPONENT\",\n \"EIN campus prefix is invalid\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 9) {\n return `${v.slice(0, 2)}-${v.slice(2)}`;\n }\n return v;\n};\n\n/** U.S. Employer Identification Number. */\nconst ein: CountryValidator<\"US\"> = {\n name: \"Employer Identification Number\",\n localName: \"Employer Identification Number\",\n abbreviation: \"EIN\",\n aliases: [\n \"EIN\",\n \"Employer Identification Number\",\n \"Federal Tax ID\",\n ] as const,\n candidatePattern: \"\\\\d{2}-?\\\\d{7}\",\n scope: \"country\",\n country: \"US\",\n entityType: \"company\",\n sourceUrl:\n \"https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes\",\n examples: [\"042103594\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ein;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAAA,MAAM,eAAe;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAM,iBAAyB;CAE7B,OADe,WAAW,YACd,IAAI,aAAa,CAAC;AAChC;;;;;AA2BA,MAAM,iBAAiB,IAAI,IAAI;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,EAAE,WAAW,GACf,OAAO,IAAI,kBAAkB,sBAAsB;CAErD,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC;CAC3B,IAAI,CAAC,eAAe,IAAI,MAAM,GAC5B,OAAO,IACL,qBACA,8BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;CAEtC,OAAO;AACT;;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,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/us/itin.d.ts
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/us/itin.d.ts
|
|
4
4
|
/** Generate a random valid U.S. ITIN. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* ITIN (U.S. Individual Taxpayer Identification
|
|
8
|
+
* Number).
|
|
9
|
+
*
|
|
10
|
+
* 9-digit number issued by the IRS to individuals
|
|
11
|
+
* who need a taxpayer ID but are not eligible for
|
|
12
|
+
* an SSN. Starts with 9; digits 4-5 (the "group")
|
|
13
|
+
* must be in the range 70-99 excluding 89 and 93.
|
|
14
|
+
*
|
|
15
|
+
* @see https://www.irs.gov/individuals/individual-taxpayer-identification-number
|
|
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
|
/**
|
|
10
21
|
* U.S. Individual Taxpayer Identification Number.
|
|
11
22
|
*/
|
|
12
|
-
declare const itin:
|
|
23
|
+
declare const itin: CountryValidator<"US">;
|
|
13
24
|
//#endregion
|
|
14
25
|
export { compact, itin as default, format, generate, validate };
|
|
15
26
|
//# sourceMappingURL=itin.d.ts.map
|
package/dist/us/itin.js
CHANGED
|
@@ -3,17 +3,6 @@ import { randomDigits, randomPick } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/us/itin.ts
|
|
6
|
-
/**
|
|
7
|
-
* ITIN (U.S. Individual Taxpayer Identification
|
|
8
|
-
* Number).
|
|
9
|
-
*
|
|
10
|
-
* 9-digit number issued by the IRS to individuals
|
|
11
|
-
* who need a taxpayer ID but are not eligible for
|
|
12
|
-
* an SSN. Starts with 9; digits 4-5 (the "group")
|
|
13
|
-
* must be in the range 70-99 excluding 89 and 93.
|
|
14
|
-
*
|
|
15
|
-
* @see https://www.irs.gov/individuals/individual-taxpayer-identification-number
|
|
16
|
-
*/
|
|
17
6
|
const ITIN_ALLOWED_GROUPS = Array.from({ length: 30 }, (_, i) => i + 70).filter((g) => g !== 89 && g !== 93);
|
|
18
7
|
/** Generate a random valid U.S. ITIN. */
|
|
19
8
|
const generate = () => {
|
|
@@ -52,6 +41,7 @@ const itin = {
|
|
|
52
41
|
abbreviation: "ITIN",
|
|
53
42
|
aliases: ["ITIN", "Individual Taxpayer Identification Number"],
|
|
54
43
|
candidatePattern: "9\\d{2}[\\s-]?\\d{2}[\\s-]?\\d{4}",
|
|
44
|
+
scope: "country",
|
|
55
45
|
country: "US",
|
|
56
46
|
entityType: "person",
|
|
57
47
|
sourceUrl: "https://www.irs.gov/individuals/individual-taxpayer-identification-number",
|
package/dist/us/itin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itin.js","names":[],"sources":["../../src/us/itin.ts"],"sourcesContent":["const ITIN_ALLOWED_GROUPS = Array.from(\n { length: 30 },\n (_, i) => i + 70,\n).filter((g) => g !== 89 && g !== 93);\n\n/** Generate a random valid U.S. ITIN. */\nconst generate = (): string => {\n const area = \"9\" + randomDigits(2);\n const group = String(randomPick(ITIN_ALLOWED_GROUPS));\n const serial = randomDigits(4);\n return `${area}${group}${serial}`;\n};\n\n/**\n * ITIN (U.S. Individual Taxpayer Identification\n * Number).\n *\n * 9-digit number issued by the IRS to individuals\n * who need a taxpayer ID but are not eligible for\n * an SSN. Starts with 9; digits 4-5 (the \"group\")\n * must be in the range 70-99 excluding 89 and 93.\n *\n * @see https://www.irs.gov/individuals/individual-taxpayer-identification-number\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"itin.js","names":[],"sources":["../../src/us/itin.ts"],"sourcesContent":["const ITIN_ALLOWED_GROUPS = Array.from(\n { length: 30 },\n (_, i) => i + 70,\n).filter((g) => g !== 89 && g !== 93);\n\n/** Generate a random valid U.S. ITIN. */\nconst generate = (): string => {\n const area = \"9\" + randomDigits(2);\n const group = String(randomPick(ITIN_ALLOWED_GROUPS));\n const serial = randomDigits(4);\n return `${area}${group}${serial}`;\n};\n\n/**\n * ITIN (U.S. Individual Taxpayer Identification\n * Number).\n *\n * 9-digit number issued by the IRS to individuals\n * who need a taxpayer ID but are not eligible for\n * an SSN. Starts with 9; digits 4-5 (the \"group\")\n * must be in the range 70-99 excluding 89 and 93.\n *\n * @see https://www.irs.gov/individuals/individual-taxpayer-identification-number\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst ITIN_RE = /^(?<area>\\d{3})-?(?<group>\\d{2})-?\\d{4}$/;\n\n/** Groups 70-99 excluding 89 and 93. */\nconst ALLOWED_GROUPS = new Set(\n Array.from({ length: 30 }, (_, i) => i + 70)\n .filter((g) => g !== 89 && g !== 93)\n .map(String),\n);\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"ITIN must contain only digits\",\n );\n }\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"ITIN must be 9 digits\");\n }\n\n const match = ITIN_RE.exec(v);\n if (!match?.groups) {\n return err(\n \"INVALID_FORMAT\",\n \"ITIN must be 9 digits, optionally \" +\n \"formatted as NNN-NN-NNNN\",\n );\n }\n\n const { area, group } = match.groups;\n if (!area || !group) {\n return err(\"INVALID_FORMAT\", \"ITIN must be 9 digits\");\n }\n\n if (area[0] !== \"9\") {\n return err(\n \"INVALID_COMPONENT\",\n \"ITIN area must start with 9\",\n );\n }\n\n if (!ALLOWED_GROUPS.has(group)) {\n return err(\n \"INVALID_COMPONENT\",\n \"ITIN group digits are not in the \" +\n \"allowed range (70-99 excl. 89, 93)\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 9) {\n return (\n `${v.slice(0, 3)}-${v.slice(3, 5)}` + `-${v.slice(5)}`\n );\n }\n return v;\n};\n\n/**\n * U.S. Individual Taxpayer Identification Number.\n */\nconst itin: CountryValidator<\"US\"> = {\n name: \"Individual Taxpayer Identification Number\",\n localName: \"Individual Taxpayer Identification Number\",\n abbreviation: \"ITIN\",\n aliases: [\n \"ITIN\",\n \"Individual Taxpayer Identification Number\",\n ] as const,\n candidatePattern: \"9\\\\d{2}[\\\\s-]?\\\\d{2}[\\\\s-]?\\\\d{4}\",\n scope: \"country\",\n country: \"US\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.irs.gov/individuals/\" +\n \"individual-taxpayer-identification-number\",\n lengths: [9] as const,\n examples: [\"912-90-3456\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default itin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAAA,MAAM,sBAAsB,MAAM,KAChC,EAAE,QAAQ,GAAG,IACZ,GAAG,MAAM,IAAI,EAChB,EAAE,QAAQ,MAAM,MAAM,MAAM,MAAM,EAAE;;AAGpC,MAAM,iBAAyB;CAI7B,OAAO,GAHM,MAAM,aAAa,CAAC,IACnB,OAAO,WAAW,mBAAmB,CAE9B,IADN,aAAa,CACE;AAChC;AAwBA,MAAM,UAAU;;AAGhB,MAAM,iBAAiB,IAAI,IACzB,MAAM,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,IAAI,EAAE,EACxC,QAAQ,MAAM,MAAM,MAAM,MAAM,EAAE,EAClC,IAAI,MAAM,CACf;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,EAAE,WAAW,GACf,OAAO,IAAI,kBAAkB,uBAAuB;CAGtD,MAAM,QAAQ,QAAQ,KAAK,CAAC;CAC5B,IAAI,CAAC,OAAO,QACV,OAAO,IACL,kBACA,4DAEF;CAGF,MAAM,EAAE,MAAM,UAAU,MAAM;CAC9B,IAAI,CAAC,QAAQ,CAAC,OACZ,OAAO,IAAI,kBAAkB,uBAAuB;CAGtD,IAAI,KAAK,OAAO,KACd,OAAO,IACL,qBACA,6BACF;CAGF,IAAI,CAAC,eAAe,IAAI,KAAK,GAC3B,OAAO,IACL,qBACA,qEAEF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OACE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAA,GAAU,EAAE,MAAM,CAAC;CAGvD,OAAO;AACT;;;;AAKA,MAAM,OAA+B;CACnC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,QACA,2CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CAEF,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
|
package/dist/us/rtn.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/us/rtn.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 U.S. RTN. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** U.S. Routing Transit Number. */
|
|
10
|
-
declare const rtn:
|
|
10
|
+
declare const rtn: CountryValidator<"US">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, rtn as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=rtn.d.ts.map
|