@stll/stdnum 1.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -4
- package/dist/_checksums/luhn.js.map +1 -1
- package/dist/_checksums/mod1110.js +1 -1
- package/dist/_checksums/mod1110.js.map +1 -1
- package/dist/_checksums/mod112.js.map +1 -1
- package/dist/_checksums/mod97.js.map +1 -1
- package/dist/_checksums/verhoeff.js.map +1 -1
- package/dist/_checksums/weighted-sum.js.map +1 -1
- package/dist/_util/arabic.js.map +1 -1
- package/dist/_util/clean.js.map +1 -1
- package/dist/_util/date.js.map +1 -1
- package/dist/_util/generate.js.map +1 -1
- package/dist/_util/result.js.map +1 -1
- package/dist/_util/strings.js.map +1 -1
- package/dist/ad/nrt.d.ts +16 -2
- package/dist/ad/nrt.js +1 -14
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +2 -2
- package/dist/ae/eid.js +2 -12
- package/dist/ae/eid.js.map +1 -1
- package/dist/ai/tin.d.ts +20 -2
- package/dist/ai/tin.js +1 -18
- package/dist/ai/tin.js.map +1 -1
- package/dist/al/nipt.d.ts +13 -2
- package/dist/al/nipt.js +1 -11
- package/dist/al/nipt.js.map +1 -1
- package/dist/am/tin.d.ts +16 -2
- package/dist/am/tin.js +1 -14
- package/dist/am/tin.js.map +1 -1
- package/dist/ar/cbu.d.ts +2 -2
- package/dist/ar/cbu.js +1 -9
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +2 -2
- package/dist/ar/cuit.js +1 -17
- package/dist/ar/cuit.js.map +1 -1
- package/dist/ar/dni.d.ts +11 -2
- package/dist/ar/dni.js +1 -9
- package/dist/ar/dni.js.map +1 -1
- package/dist/at/businessid.d.ts +10 -2
- package/dist/at/businessid.js +1 -8
- package/dist/at/businessid.js.map +1 -1
- package/dist/at/tin.d.ts +2 -2
- package/dist/at/tin.js +1 -11
- package/dist/at/tin.js.map +1 -1
- package/dist/at/uid.d.ts +2 -2
- package/dist/at/uid.js +2 -10
- package/dist/at/uid.js.map +1 -1
- package/dist/at/vnr.d.ts +2 -2
- package/dist/at/vnr.js +4 -14
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +2 -2
- package/dist/au/abn.js +1 -10
- package/dist/au/abn.js.map +1 -1
- package/dist/au/acn.d.ts +2 -2
- package/dist/au/acn.js +1 -10
- package/dist/au/acn.js.map +1 -1
- package/dist/au/tfn.d.ts +2 -2
- package/dist/au/tfn.js +1 -10
- package/dist/au/tfn.js.map +1 -1
- package/dist/az/voen.d.ts +2 -2
- package/dist/az/voen.js +1 -14
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +2 -2
- package/dist/ba/jmbg.js +3 -11
- package/dist/ba/jmbg.js.map +1 -1
- package/dist/bd/nid.d.ts +23 -2
- package/dist/bd/nid.js +1 -21
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +2 -2
- package/dist/be/bis.js +1 -11
- package/dist/be/bis.js.map +1 -1
- package/dist/be/nn.d.ts +2 -2
- package/dist/be/nn.js +1 -11
- package/dist/be/nn.js.map +1 -1
- package/dist/be/vat.d.ts +2 -2
- package/dist/be/vat.js +1 -9
- package/dist/be/vat.js.map +1 -1
- package/dist/bg/egn.d.ts +2 -2
- package/dist/bg/egn.js +3 -18
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/pnf.d.ts +2 -2
- package/dist/bg/pnf.js +1 -8
- package/dist/bg/pnf.js.map +1 -1
- package/dist/bg/vat.d.ts +2 -2
- package/dist/bg/vat.js +3 -9
- package/dist/bg/vat.js.map +1 -1
- package/dist/bh/cpr.d.ts +2 -2
- package/dist/bh/cpr.js +1 -17
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bic.d.ts +13 -2
- package/dist/bic.js +1 -11
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +2 -2
- package/dist/br/cnpj.js +1 -20
- package/dist/br/cnpj.js.map +1 -1
- package/dist/br/cpf.d.ts +2 -2
- package/dist/br/cpf.js +1 -14
- package/dist/br/cpf.js.map +1 -1
- package/dist/by/unp.d.ts +2 -2
- package/dist/by/unp.js +3 -14
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/tin.d.ts +2 -2
- package/dist/bz/tin.js +1 -26
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +2 -2
- package/dist/ca/bn.js +2 -10
- package/dist/ca/bn.js.map +1 -1
- package/dist/ca/sin.d.ts +2 -2
- package/dist/ca/sin.js +2 -10
- package/dist/ca/sin.js.map +1 -1
- package/dist/ch/ssn.d.ts +2 -2
- package/dist/ch/ssn.js +1 -9
- package/dist/ch/ssn.js.map +1 -1
- package/dist/ch/uid.d.ts +2 -2
- package/dist/ch/uid.js +1 -9
- package/dist/ch/uid.js.map +1 -1
- package/dist/ch/vat.d.ts +2 -2
- package/dist/ch/vat.js +1 -9
- package/dist/ch/vat.js.map +1 -1
- package/dist/cl/rut.d.ts +2 -2
- package/dist/cl/rut.js +1 -14
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/ric.d.ts +2 -2
- package/dist/cn/ric.js +3 -14
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +2 -2
- package/dist/cn/uscc.js +1 -10
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/nit.d.ts +2 -2
- package/dist/co/nit.js +2 -12
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.d.ts +18 -2
- package/dist/cr/cpf.js +1 -16
- package/dist/cr/cpf.js.map +1 -1
- package/dist/creditcard.d.ts +2 -2
- package/dist/creditcard.js +5 -14
- package/dist/creditcard.js.map +1 -1
- package/dist/cu/ni.d.ts +2 -2
- package/dist/cu/ni.js +2 -17
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/vat.d.ts +2 -2
- package/dist/cy/vat.js +1 -8
- package/dist/cy/vat.js.map +1 -1
- package/dist/cz/dic.d.ts +2 -2
- package/dist/cz/dic.js +7 -13
- package/dist/cz/dic.js.map +1 -1
- package/dist/cz/ico.d.ts +2 -2
- package/dist/cz/ico.js +2 -10
- package/dist/cz/ico.js.map +1 -1
- package/dist/cz/rc.d.ts +2 -2
- package/dist/cz/rc.js +2 -26
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.d.ts +19 -2
- package/dist/de/handelsreg.js +1 -17
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +2 -2
- package/dist/de/idnr.js +2 -12
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/stnr.d.ts +17 -2
- package/dist/de/stnr.js +1 -15
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +2 -2
- package/dist/de/svnr.js +2 -11
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +2 -2
- package/dist/de/vat.js +2 -11
- package/dist/de/vat.js.map +1 -1
- package/dist/dk/cpr.d.ts +2 -2
- package/dist/dk/cpr.js +2 -10
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +2 -2
- package/dist/dk/cvr.js +2 -15
- package/dist/dk/cvr.js.map +1 -1
- package/dist/dk/vat.d.ts +2 -2
- package/dist/dk/vat.js +3 -13
- package/dist/dk/vat.js.map +1 -1
- package/dist/do/rnc.d.ts +2 -2
- package/dist/do/rnc.js +2 -16
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/ruc.d.ts +2 -2
- package/dist/ec/ruc.js +1 -18
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +2 -2
- package/dist/ee/ik.js +3 -20
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/registrikood.d.ts +2 -2
- package/dist/ee/registrikood.js +1 -8
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +2 -2
- package/dist/ee/vat.js +2 -10
- package/dist/ee/vat.js.map +1 -1
- package/dist/eg/tn.d.ts +11 -2
- package/dist/eg/tn.js +1 -9
- package/dist/eg/tn.js.map +1 -1
- package/dist/es/cif.d.ts +2 -2
- package/dist/es/cif.js +1 -10
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +2 -2
- package/dist/es/dni.js +1 -9
- package/dist/es/dni.js.map +1 -1
- package/dist/es/nie.d.ts +2 -2
- package/dist/es/nie.js +1 -9
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +2 -2
- package/dist/es/nss.js +1 -16
- package/dist/es/nss.js.map +1 -1
- package/dist/es/vat.d.ts +2 -2
- package/dist/es/vat.js +5 -10
- package/dist/es/vat.js.map +1 -1
- package/dist/eu/vat.d.ts +2 -2
- package/dist/eu/vat.js +1 -0
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +2 -2
- package/dist/fi/hetu.js +2 -10
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/vat.d.ts +2 -2
- package/dist/fi/vat.js +3 -10
- package/dist/fi/vat.js.map +1 -1
- package/dist/fi/ytunnus.d.ts +2 -2
- package/dist/fi/ytunnus.js +2 -10
- package/dist/fi/ytunnus.js.map +1 -1
- package/dist/fr/nif.d.ts +2 -2
- package/dist/fr/nif.js +1 -9
- package/dist/fr/nif.js.map +1 -1
- package/dist/fr/nir.d.ts +2 -2
- package/dist/fr/nir.js +2 -14
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +2 -2
- package/dist/fr/siren.js +2 -10
- package/dist/fr/siren.js.map +1 -1
- package/dist/fr/siret.d.ts +2 -2
- package/dist/fr/siret.js +2 -11
- package/dist/fr/siret.js.map +1 -1
- package/dist/fr/tva.d.ts +2 -2
- package/dist/fr/tva.js +2 -12
- package/dist/fr/tva.js.map +1 -1
- package/dist/gb/nino.d.ts +12 -2
- package/dist/gb/nino.js +1 -10
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +2 -2
- package/dist/gb/sedol.js +1 -11
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +2 -2
- package/dist/gb/utr.js +2 -10
- package/dist/gb/utr.js.map +1 -1
- package/dist/gb/vat.d.ts +2 -2
- package/dist/gb/vat.js +2 -11
- package/dist/gb/vat.js.map +1 -1
- package/dist/ge/pin.d.ts +14 -2
- package/dist/ge/pin.js +1 -12
- package/dist/ge/pin.js.map +1 -1
- package/dist/gh/tin.d.ts +2 -2
- package/dist/gh/tin.js +1 -15
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +2 -2
- package/dist/gr/amka.js +3 -11
- package/dist/gr/amka.js.map +1 -1
- package/dist/gr/vat.d.ts +2 -2
- package/dist/gr/vat.js +1 -10
- package/dist/gr/vat.js.map +1 -1
- package/dist/gt/nit.d.ts +2 -2
- package/dist/gt/nit.js +1 -12
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +2 -2
- package/dist/hk/hkid.js +1 -10
- package/dist/hk/hkid.js.map +1 -1
- package/dist/hr/vat.d.ts +2 -2
- package/dist/hr/vat.js +2 -9
- package/dist/hr/vat.js.map +1 -1
- package/dist/hu/vat.d.ts +2 -2
- package/dist/hu/vat.js +3 -10
- package/dist/hu/vat.js.map +1 -1
- package/dist/iban.d.ts +2 -2
- package/dist/iban.js +2 -8
- package/dist/iban.js.map +1 -1
- package/dist/id/npwp.d.ts +2 -2
- package/dist/id/npwp.js +3 -13
- package/dist/id/npwp.js.map +1 -1
- package/dist/ie/pps.d.ts +2 -2
- package/dist/ie/pps.js +1 -10
- package/dist/ie/pps.js.map +1 -1
- package/dist/ie/vat.d.ts +2 -2
- package/dist/ie/vat.js +1 -9
- package/dist/ie/vat.js.map +1 -1
- package/dist/il/idnr.d.ts +2 -2
- package/dist/il/idnr.js +2 -9
- package/dist/il/idnr.js.map +1 -1
- package/dist/in/aadhaar.d.ts +2 -2
- package/dist/in/aadhaar.js +2 -12
- package/dist/in/aadhaar.js.map +1 -1
- package/dist/in/gstin.d.ts +2 -2
- package/dist/in/gstin.js +1 -10
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/pan.d.ts +15 -2
- package/dist/in/pan.js +1 -13
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/iq/nid.d.ts +16 -2
- package/dist/iq/nid.js +2 -15
- package/dist/iq/nid.js.map +1 -1
- package/dist/ir/nid.d.ts +2 -2
- package/dist/ir/nid.js +2 -24
- package/dist/ir/nid.js.map +1 -1
- package/dist/is/kennitala.d.ts +2 -2
- package/dist/is/kennitala.js +2 -13
- package/dist/is/kennitala.js.map +1 -1
- package/dist/is/vsk.d.ts +9 -2
- package/dist/is/vsk.js +1 -7
- package/dist/is/vsk.js.map +1 -1
- package/dist/isin.d.ts +2 -2
- package/dist/isin.js +2 -12
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +2 -2
- package/dist/it/codicefiscale.js +1 -21
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +2 -2
- package/dist/it/iva.js +2 -9
- package/dist/it/iva.js.map +1 -1
- package/dist/jp/cn.d.ts +2 -2
- package/dist/jp/cn.js +1 -9
- package/dist/jp/cn.js.map +1 -1
- package/dist/jp/mynumber.d.ts +2 -2
- package/dist/jp/mynumber.js +1 -10
- package/dist/jp/mynumber.js.map +1 -1
- package/dist/kr/brn.d.ts +11 -2
- package/dist/kr/brn.js +1 -9
- package/dist/kr/brn.js.map +1 -1
- package/dist/kr/rrn.d.ts +2 -2
- package/dist/kr/rrn.js +2 -11
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +2 -2
- package/dist/kw/civil.js +2 -14
- package/dist/kw/civil.js.map +1 -1
- package/dist/kz/iin.d.ts +2 -2
- package/dist/kz/iin.js +3 -18
- package/dist/kz/iin.js.map +1 -1
- package/dist/lei.d.ts +2 -2
- package/dist/lei.js +2 -11
- package/dist/lei.js.map +1 -1
- package/dist/li/peid.d.ts +11 -2
- package/dist/li/peid.js +1 -9
- package/dist/li/peid.js.map +1 -1
- package/dist/lk/nic.d.ts +2 -2
- package/dist/lk/nic.js +2 -14
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +2 -2
- package/dist/lt/asmens.js +2 -1
- package/dist/lt/asmens.js.map +1 -1
- package/dist/lt/vat.d.ts +2 -2
- package/dist/lt/vat.js +2 -10
- package/dist/lt/vat.js.map +1 -1
- package/dist/lu/vat.d.ts +2 -2
- package/dist/lu/vat.js +2 -8
- package/dist/lu/vat.js.map +1 -1
- package/dist/luhn.d.ts +2 -2
- package/dist/luhn.js +2 -9
- package/dist/luhn.js.map +1 -1
- package/dist/lv/vat.d.ts +2 -2
- package/dist/lv/vat.js +2 -28
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +2 -2
- package/dist/ma/ice.js +2 -11
- package/dist/ma/ice.js.map +1 -1
- package/dist/mc/tva.d.ts +2 -2
- package/dist/mc/tva.js +1 -0
- package/dist/mc/tva.js.map +1 -1
- package/dist/md/idno.d.ts +2 -2
- package/dist/md/idno.js +1 -10
- package/dist/md/idno.js.map +1 -1
- package/dist/me/pib.d.ts +2 -2
- package/dist/me/pib.js +2 -10
- package/dist/me/pib.js.map +1 -1
- package/dist/mk/edb.d.ts +2 -2
- package/dist/mk/edb.js +2 -11
- package/dist/mk/edb.js.map +1 -1
- package/dist/mt/vat.d.ts +2 -2
- package/dist/mt/vat.js +3 -10
- package/dist/mt/vat.js.map +1 -1
- package/dist/mu/brn.d.ts +23 -2
- package/dist/mu/brn.js +1 -21
- package/dist/mu/brn.js.map +1 -1
- package/dist/mx/clabe.d.ts +2 -2
- package/dist/mx/clabe.js +1 -14
- package/dist/mx/clabe.js.map +1 -1
- package/dist/mx/curp.d.ts +2 -2
- package/dist/mx/curp.js +3 -17
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/rfc.d.ts +2 -2
- package/dist/mx/rfc.js +3 -19
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/nric.d.ts +2 -2
- package/dist/my/nric.js +2 -14
- package/dist/my/nric.js.map +1 -1
- package/dist/ng/nin.d.ts +13 -2
- package/dist/ng/nin.js +1 -11
- package/dist/ng/nin.js.map +1 -1
- package/dist/ni/ruc.d.ts +2 -2
- package/dist/ni/ruc.js +1 -23
- package/dist/ni/ruc.js.map +1 -1
- package/dist/nl/bsn.d.ts +2 -2
- package/dist/nl/bsn.js +2 -10
- package/dist/nl/bsn.js.map +1 -1
- package/dist/nl/kvk.d.ts +9 -2
- package/dist/nl/kvk.js +1 -7
- package/dist/nl/kvk.js.map +1 -1
- package/dist/nl/vat.d.ts +2 -2
- package/dist/nl/vat.js +1 -13
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +2 -2
- package/dist/no/fodselsnummer.js +2 -10
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mva.d.ts +2 -2
- package/dist/no/mva.js +1 -8
- package/dist/no/mva.js.map +1 -1
- package/dist/no/orgnr.d.ts +2 -2
- package/dist/no/orgnr.js +2 -8
- package/dist/no/orgnr.js.map +1 -1
- package/dist/nz/ird.d.ts +2 -2
- package/dist/nz/ird.js +2 -11
- package/dist/nz/ird.js.map +1 -1
- package/dist/pa/ruc.d.ts +2 -2
- package/dist/pa/ruc.js +1 -18
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +8 -7
- package/dist/patterns.js +3 -5
- package/dist/patterns.js.map +1 -1
- package/dist/pe/ruc.d.ts +2 -2
- package/dist/pe/ruc.js +1 -15
- package/dist/pe/ruc.js.map +1 -1
- package/dist/ph/philid.d.ts +14 -2
- package/dist/ph/philid.js +1 -12
- package/dist/ph/philid.js.map +1 -1
- package/dist/pk/cnic.d.ts +14 -2
- package/dist/pk/cnic.js +1 -12
- package/dist/pk/cnic.js.map +1 -1
- package/dist/pl/nip.d.ts +2 -2
- package/dist/pl/nip.js +2 -10
- package/dist/pl/nip.js.map +1 -1
- package/dist/pl/pesel.d.ts +2 -2
- package/dist/pl/pesel.js +3 -13
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +2 -2
- package/dist/pl/regon.js +2 -11
- package/dist/pl/regon.js.map +1 -1
- package/dist/pt/cc.d.ts +2 -2
- package/dist/pt/cc.js +1 -9
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/vat.d.ts +2 -2
- package/dist/pt/vat.js +3 -11
- package/dist/pt/vat.js.map +1 -1
- package/dist/ro/cnp.d.ts +2 -2
- package/dist/ro/cnp.js +4 -14
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/vat.d.ts +2 -2
- package/dist/ro/vat.js +13 -11
- package/dist/ro/vat.js.map +1 -1
- package/dist/rs/pib.d.ts +2 -2
- package/dist/rs/pib.js +1 -9
- package/dist/rs/pib.js.map +1 -1
- package/dist/ru/inn.d.ts +2 -2
- package/dist/ru/inn.js +1 -11
- package/dist/ru/inn.js.map +1 -1
- package/dist/se/orgnr.d.ts +2 -2
- package/dist/se/orgnr.js +2 -9
- package/dist/se/orgnr.js.map +1 -1
- package/dist/se/personnummer.d.ts +2 -2
- package/dist/se/personnummer.js +7 -15
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +2 -2
- package/dist/se/vat.js +3 -10
- package/dist/se/vat.js.map +1 -1
- package/dist/sg/uen.d.ts +2 -2
- package/dist/sg/uen.js +1 -15
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +2 -2
- package/dist/si/emso.js +3 -18
- package/dist/si/emso.js.map +1 -1
- package/dist/si/vat.d.ts +2 -2
- package/dist/si/vat.js +3 -12
- package/dist/si/vat.js.map +1 -1
- package/dist/sk/dic.d.ts +2 -2
- package/dist/sk/dic.js +1 -0
- package/dist/sk/dic.js.map +1 -1
- package/dist/sk/ico.d.ts +2 -2
- package/dist/sk/ico.js +1 -0
- package/dist/sk/ico.js.map +1 -1
- package/dist/sk/rc.d.ts +2 -2
- package/dist/sk/rc.js +1 -0
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/tin.d.ts +2 -2
- package/dist/th/tin.js +1 -11
- package/dist/th/tin.js.map +1 -1
- package/dist/tr/tckimlik.d.ts +2 -2
- package/dist/tr/tckimlik.js +1 -20
- package/dist/tr/tckimlik.js.map +1 -1
- package/dist/tr/vkn.d.ts +2 -2
- package/dist/tr/vkn.js +1 -20
- package/dist/tr/vkn.js.map +1 -1
- package/dist/tw/ubn.d.ts +2 -2
- package/dist/tw/ubn.js +1 -11
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +26 -4
- package/dist/ua/edrpou.d.ts +2 -2
- package/dist/ua/edrpou.js +1 -11
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/us/ein.d.ts +12 -2
- package/dist/us/ein.js +1 -10
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.d.ts +13 -2
- package/dist/us/itin.js +1 -11
- package/dist/us/itin.js.map +1 -1
- package/dist/us/rtn.d.ts +2 -2
- package/dist/us/rtn.js +3 -18
- package/dist/us/rtn.js.map +1 -1
- package/dist/us/ssn.d.ts +13 -2
- package/dist/us/ssn.js +1 -11
- package/dist/us/ssn.js.map +1 -1
- package/dist/uy/rut.d.ts +2 -2
- package/dist/uy/rut.js +1 -14
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/rif.d.ts +2 -2
- package/dist/ve/rif.js +2 -15
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mst.d.ts +2 -2
- package/dist/vn/mst.js +1 -12
- package/dist/vn/mst.js.map +1 -1
- package/dist/za/idnr.d.ts +2 -2
- package/dist/za/idnr.js +3 -16
- package/dist/za/idnr.js.map +1 -1
- package/package.json +22 -12
- package/src/_checksums/mod1110.ts +1 -1
- package/src/ad/nrt.ts +7 -3
- package/src/ae/eid.ts +7 -3
- package/src/ai/tin.ts +7 -3
- package/src/al/nipt.ts +7 -3
- package/src/am/tin.ts +7 -3
- package/src/ar/cbu.ts +7 -3
- package/src/ar/cuit.ts +7 -3
- package/src/ar/dni.ts +7 -3
- package/src/at/businessid.ts +7 -3
- package/src/at/tin.ts +7 -3
- package/src/at/uid.ts +7 -3
- package/src/at/vnr.ts +37 -9
- package/src/au/abn.ts +7 -3
- package/src/au/acn.ts +7 -3
- package/src/au/tfn.ts +7 -3
- package/src/az/voen.ts +7 -3
- package/src/ba/jmbg.ts +8 -7
- package/src/bd/nid.ts +7 -3
- package/src/be/bis.ts +8 -4
- package/src/be/nn.ts +7 -3
- package/src/be/vat.ts +7 -3
- package/src/bg/egn.ts +8 -7
- package/src/bg/pnf.ts +7 -3
- package/src/bg/vat.ts +8 -3
- package/src/bh/cpr.ts +7 -3
- package/src/bic.ts +7 -3
- package/src/br/cnpj.ts +7 -3
- package/src/br/cpf.ts +7 -3
- package/src/by/unp.ts +10 -5
- package/src/bz/tin.ts +7 -3
- package/src/ca/bn.ts +7 -3
- package/src/ca/sin.ts +7 -3
- package/src/ch/ssn.ts +7 -3
- package/src/ch/uid.ts +7 -3
- package/src/ch/vat.ts +9 -5
- package/src/cl/rut.ts +7 -3
- package/src/cn/ric.ts +8 -7
- package/src/cn/uscc.ts +7 -3
- package/src/co/nit.ts +8 -4
- package/src/cr/cpf.ts +7 -3
- package/src/creditcard.ts +10 -6
- package/src/cu/ni.ts +8 -7
- package/src/cy/vat.ts +7 -3
- package/src/cz/dic.ts +9 -4
- package/src/cz/ico.ts +7 -3
- package/src/cz/rc.ts +8 -7
- package/src/de/handelsreg.ts +7 -3
- package/src/de/idnr.ts +7 -3
- package/src/de/stnr.ts +7 -3
- package/src/de/svnr.ts +7 -3
- package/src/de/vat.ts +7 -3
- package/src/dk/cpr.ts +8 -7
- package/src/dk/cvr.ts +7 -3
- package/src/dk/vat.ts +8 -3
- package/src/do/rnc.ts +7 -3
- package/src/ec/ruc.ts +7 -3
- package/src/ee/ik.ts +8 -7
- package/src/ee/registrikood.ts +8 -4
- package/src/ee/vat.ts +7 -3
- package/src/eg/tn.ts +7 -3
- package/src/es/cif.ts +8 -4
- package/src/es/dni.ts +7 -3
- package/src/es/nie.ts +8 -4
- package/src/es/nss.ts +7 -3
- package/src/es/vat.ts +13 -5
- package/src/eu/vat.ts +10 -6
- package/src/fi/hetu.ts +8 -7
- package/src/fi/vat.ts +8 -3
- package/src/fi/ytunnus.ts +7 -3
- package/src/fr/nif.ts +7 -3
- package/src/fr/nir.ts +8 -7
- package/src/fr/siren.ts +7 -3
- package/src/fr/siret.ts +7 -3
- package/src/fr/tva.ts +7 -3
- package/src/gb/nino.ts +7 -3
- package/src/gb/sedol.ts +7 -3
- package/src/gb/utr.ts +7 -3
- package/src/gb/vat.ts +7 -3
- package/src/ge/pin.ts +7 -3
- package/src/gh/tin.ts +7 -3
- package/src/gr/amka.ts +7 -3
- package/src/gr/vat.ts +7 -3
- package/src/gt/nit.ts +7 -3
- package/src/hk/hkid.ts +7 -3
- package/src/hr/vat.ts +7 -3
- package/src/hu/vat.ts +8 -3
- package/src/iban.ts +7 -3
- package/src/id/npwp.ts +7 -3
- package/src/ie/pps.ts +7 -3
- package/src/ie/vat.ts +7 -3
- package/src/il/idnr.ts +7 -3
- package/src/in/aadhaar.ts +7 -3
- package/src/in/gstin.ts +7 -3
- package/src/in/pan.ts +7 -3
- package/src/index.ts +3 -0
- package/src/iq/nid.ts +7 -3
- package/src/ir/nid.ts +7 -3
- package/src/is/kennitala.ts +7 -3
- package/src/is/vsk.ts +7 -3
- package/src/isin.ts +7 -3
- package/src/it/codicefiscale.ts +11 -7
- package/src/it/iva.ts +7 -3
- package/src/jp/cn.ts +7 -3
- package/src/jp/mynumber.ts +7 -3
- package/src/kr/brn.ts +7 -3
- package/src/kr/rrn.ts +8 -7
- package/src/kw/civil.ts +8 -7
- package/src/kz/iin.ts +8 -8
- package/src/lei.ts +7 -3
- package/src/li/peid.ts +7 -3
- package/src/lk/nic.ts +8 -7
- package/src/lt/asmens.ts +8 -4
- package/src/lt/vat.ts +8 -3
- package/src/lu/vat.ts +8 -3
- package/src/luhn.ts +7 -3
- package/src/lv/vat.ts +7 -3
- package/src/ma/ice.ts +7 -3
- package/src/mc/tva.ts +9 -5
- package/src/md/idno.ts +7 -3
- package/src/me/pib.ts +7 -3
- package/src/mk/edb.ts +7 -3
- package/src/mt/vat.ts +8 -3
- package/src/mu/brn.ts +7 -3
- package/src/mx/clabe.ts +7 -3
- package/src/mx/curp.ts +9 -8
- package/src/mx/rfc.ts +8 -4
- package/src/my/nric.ts +8 -7
- package/src/ng/nin.ts +7 -3
- package/src/ni/ruc.ts +7 -3
- package/src/nl/bsn.ts +7 -3
- package/src/nl/kvk.ts +7 -3
- package/src/nl/vat.ts +7 -3
- package/src/no/fodselsnummer.ts +11 -7
- package/src/no/mva.ts +9 -5
- package/src/no/orgnr.ts +7 -3
- package/src/nz/ird.ts +8 -4
- package/src/pa/ruc.ts +7 -3
- package/src/patterns.ts +49 -18
- package/src/pe/ruc.ts +7 -3
- package/src/ph/philid.ts +7 -3
- package/src/pk/cnic.ts +7 -3
- package/src/pl/nip.ts +7 -3
- package/src/pl/pesel.ts +8 -7
- package/src/pl/regon.ts +7 -3
- package/src/pt/cc.ts +7 -3
- package/src/pt/vat.ts +8 -3
- package/src/ro/cnp.ts +15 -8
- package/src/ro/vat.ts +8 -3
- package/src/rs/pib.ts +7 -3
- package/src/ru/inn.ts +7 -3
- package/src/se/orgnr.ts +7 -3
- package/src/se/personnummer.ts +35 -33
- package/src/se/vat.ts +8 -3
- package/src/sg/uen.ts +7 -3
- package/src/si/emso.ts +8 -7
- package/src/si/vat.ts +8 -3
- package/src/sk/dic.ts +8 -4
- package/src/sk/ico.ts +3 -2
- package/src/sk/rc.ts +6 -2
- package/src/th/tin.ts +7 -3
- package/src/tr/tckimlik.ts +7 -3
- package/src/tr/vkn.ts +7 -3
- package/src/tw/ubn.ts +7 -3
- package/src/types.ts +34 -3
- package/src/ua/edrpou.ts +7 -3
- package/src/us/ein.ts +7 -3
- package/src/us/itin.ts +7 -3
- package/src/us/rtn.ts +16 -8
- package/src/us/ssn.ts +7 -3
- package/src/uy/rut.ts +7 -3
- package/src/ve/rif.ts +8 -6
- package/src/vn/mst.ts +7 -3
- package/src/za/idnr.ts +8 -7
package/dist/ee/vat.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ee/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 Estonian VAT number. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Estonian VAT Number. */
|
|
10
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"EE">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, vat as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/ee/vat.js
CHANGED
|
@@ -1,18 +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/ee/vat.ts
|
|
7
|
-
/**
|
|
8
|
-
* KMKR (Estonian VAT number).
|
|
9
|
-
*
|
|
10
|
-
* 9 digits. Weights [3,7,1,3,7,1,3,7,1],
|
|
11
|
-
* sum % 10 === 0.
|
|
12
|
-
*
|
|
13
|
-
* @see https://www.vatify.eu/estonia-vat-number.html
|
|
14
|
-
* @see https://www.emta.ee/en
|
|
15
|
-
*/
|
|
16
7
|
const WEIGHTS = [
|
|
17
8
|
3,
|
|
18
9
|
7,
|
|
@@ -54,6 +45,7 @@ const vat = {
|
|
|
54
45
|
abbreviation: "KMKR",
|
|
55
46
|
aliases: ["käibemaksukohustuslase number", "KMKR"],
|
|
56
47
|
candidatePattern: "EE\\d{9}",
|
|
48
|
+
scope: "country",
|
|
57
49
|
country: "EE",
|
|
58
50
|
entityType: "company",
|
|
59
51
|
sourceUrl: "https://www.emta.ee/en",
|
package/dist/ee/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/ee/vat.ts"],"sourcesContent":["/**\n * KMKR (Estonian VAT number).\n *\n * 9 digits. Weights [3,7,1,3,7,1,3,7,1],\n * sum % 10 === 0.\n *\n * @see https://www.vatify.eu/estonia-vat-number.html\n * @see https://www.emta.ee/en\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/ee/vat.ts"],"sourcesContent":["/**\n * KMKR (Estonian VAT number).\n *\n * 9 digits. Weights [3,7,1,3,7,1,3,7,1],\n * sum % 10 === 0.\n *\n * @see https://www.vatify.eu/estonia-vat-number.html\n * @see https://www.emta.ee/en\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 WEIGHTS = [3, 7, 1, 3, 7, 1, 3, 7, 1];\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"EE\") || v.startsWith(\"ee\")) {\n v = v.slice(2);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Estonian VAT number must be 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Estonian VAT number must contain only digits\",\n );\n }\n const sum = weightedSum(v, WEIGHTS, 10);\n if (sum !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Estonian VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `EE${compact(value)}`;\n\n/** Generate a random valid Estonian VAT number. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Estonian VAT Number. */\nconst vat: CountryValidator<\"EE\"> = {\n name: \"Estonian VAT Number\",\n localName: \"Käibemaksukohustuslase number\",\n abbreviation: \"KMKR\",\n aliases: [\n \"käibemaksukohustuslase number\",\n \"KMKR\",\n ] as const,\n candidatePattern: \"EE\\\\d{9}\",\n scope: \"country\",\n country: \"EE\",\n entityType: \"company\",\n sourceUrl: \"https://www.emta.ee/en\",\n examples: [\"100931558\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAqBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAE1C,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,MAAM;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,IAAI,EAAE,MAAM,CAAC;CAEf,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,sCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8CACF;CAGF,IADY,YAAY,GAAG,SAAS,EAC9B,MAAM,GACV,OAAO,IACL,oBACA,0CACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,CAAC;EACxB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,iCACA,MACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/eg/tn.d.ts
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/eg/tn.d.ts
|
|
4
4
|
/** Generate a random valid Egyptian TN. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* TN (Tax Registration Number, الرقم الضريبي).
|
|
8
|
+
*
|
|
9
|
+
* Egyptian tax number. 9 digits, no checksum.
|
|
10
|
+
* Displayed as XXX-XXX-XXX. Accepts both
|
|
11
|
+
* Arabic-Indic and Extended Arabic-Indic digits.
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.eta.gov.eg/
|
|
14
|
+
*/
|
|
6
15
|
declare const compact: (value: string) => string;
|
|
7
16
|
declare const validate: (value: string) => ValidateResult;
|
|
8
17
|
declare const format: (value: string) => string;
|
|
9
18
|
/** Egyptian Tax Registration Number. */
|
|
10
|
-
declare const tn:
|
|
19
|
+
declare const tn: CountryValidator<"EG">;
|
|
11
20
|
//#endregion
|
|
12
21
|
export { compact, tn as default, format, generate, validate };
|
|
13
22
|
//# sourceMappingURL=tn.d.ts.map
|
package/dist/eg/tn.js
CHANGED
|
@@ -3,15 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/eg/tn.ts
|
|
6
|
-
/**
|
|
7
|
-
* TN (Tax Registration Number, الرقم الضريبي).
|
|
8
|
-
*
|
|
9
|
-
* Egyptian tax number. 9 digits, no checksum.
|
|
10
|
-
* Displayed as XXX-XXX-XXX. Accepts both
|
|
11
|
-
* Arabic-Indic and Extended Arabic-Indic digits.
|
|
12
|
-
*
|
|
13
|
-
* @see https://www.eta.gov.eg/
|
|
14
|
-
*/
|
|
15
6
|
/** Generate a random valid Egyptian TN. */
|
|
16
7
|
const generate = () => randomDigits(9);
|
|
17
8
|
/**
|
|
@@ -64,6 +55,7 @@ const tn = {
|
|
|
64
55
|
abbreviation: "TN",
|
|
65
56
|
aliases: ["الرقم الضريبي", "tax number"],
|
|
66
57
|
candidatePattern: "\\d{9}",
|
|
58
|
+
scope: "country",
|
|
67
59
|
country: "EG",
|
|
68
60
|
entityType: "any",
|
|
69
61
|
compact,
|
package/dist/eg/tn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tn.js","names":[],"sources":["../../src/eg/tn.ts"],"sourcesContent":["/** Generate a random valid Egyptian TN. */\nconst generate = (): string => randomDigits(9);\n\n/**\n * TN (Tax Registration Number, الرقم الضريبي).\n *\n * Egyptian tax number. 9 digits, no checksum.\n * Displayed as XXX-XXX-XXX. Accepts both\n * Arabic-Indic and Extended Arabic-Indic digits.\n *\n * @see https://www.eta.gov.eg/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"tn.js","names":[],"sources":["../../src/eg/tn.ts"],"sourcesContent":["/** Generate a random valid Egyptian TN. */\nconst generate = (): string => randomDigits(9);\n\n/**\n * TN (Tax Registration Number, الرقم الضريبي).\n *\n * Egyptian tax number. 9 digits, no checksum.\n * Displayed as XXX-XXX-XXX. Accepts both\n * Arabic-Indic and Extended Arabic-Indic digits.\n *\n * @see https://www.eta.gov.eg/\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\n/**\n * Arabic-Indic and Extended Arabic-Indic digit map.\n * Converts Arabic numeral characters to ASCII digits.\n */\nconst ARABIC_DIGITS: Record<string, string> = {\n \"\\u0660\": \"0\", // ٠\n \"\\u0661\": \"1\", // ١\n \"\\u0662\": \"2\", // ٢\n \"\\u0663\": \"3\", // ٣\n \"\\u0664\": \"4\", // ٤\n \"\\u0665\": \"5\", // ٥\n \"\\u0666\": \"6\", // ٦\n \"\\u0667\": \"7\", // ٧\n \"\\u0668\": \"8\", // ٨\n \"\\u0669\": \"9\", // ٩\n \"\\u06F0\": \"0\", // ۰\n \"\\u06F1\": \"1\", // ۱\n \"\\u06F2\": \"2\", // ۲\n \"\\u06F3\": \"3\", // ۳\n \"\\u06F4\": \"4\", // ۴\n \"\\u06F5\": \"5\", // ۵\n \"\\u06F6\": \"6\", // ۶\n \"\\u06F7\": \"7\", // ۷\n \"\\u06F8\": \"8\", // ۸\n \"\\u06F9\": \"9\", // ۹\n};\n\nconst ARABIC_REGEX = new RegExp(\n `[${Object.keys(ARABIC_DIGITS).join(\"\")}]`,\n \"g\",\n);\n\nconst compact = (value: string): string => {\n const cleaned = clean(value, \" -/\");\n return cleaned.replace(\n ARABIC_REGEX,\n (ch) => ARABIC_DIGITS[ch] ?? ch,\n );\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Egyptian TN must be exactly 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Egyptian TN must contain only digits\",\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)}`;\n};\n\n/** Egyptian Tax Registration Number. */\nconst tn: CountryValidator<\"EG\"> = {\n name: \"Egyptian Tax Registration Number\",\n localName: \"الرقم الضريبي\",\n abbreviation: \"TN\",\n aliases: [\"الرقم الضريبي\", \"tax number\"] as const,\n candidatePattern: \"\\\\d{9}\",\n scope: \"country\",\n country: \"EG\",\n entityType: \"any\",\n compact,\n format,\n validate,\n description: \"Egyptian tax identification number\",\n sourceUrl: \"https://www.eta.gov.eg/\",\n lengths: [9] as const,\n examples: [\"100531385\", \"331105268\"] as const,\n generate,\n};\n\nexport default tn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AACA,MAAM,iBAAyB,aAAa,CAAC;;;;;AA0B7C,MAAM,gBAAwC;CAC5C,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;AACZ;AAEA,MAAM,eAAe,IAAI,OACvB,IAAI,OAAO,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,IACxC,GACF;AAEA,MAAM,WAAW,UAA0B;CAEzC,OADgB,MAAM,OAAO,KAChB,EAAE,QACb,eACC,OAAO,cAAc,OAAO,EAC/B;AACF;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,sCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,sCACF;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,CAAC;AACvD;;AAGA,MAAM,KAA6B;CACjC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,iBAAiB,YAAY;CACvC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ;CACA;CACA;CACA,aAAa;CACb,WAAW;CACX,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,aAAa,WAAW;CACnC;AACF"}
|
package/dist/es/cif.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/es/cif.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 Spanish CIF. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Spanish Company Tax ID (CIF). */
|
|
10
|
-
declare const cif:
|
|
10
|
+
declare const cif: CountryValidator<"ES">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, cif as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=cif.d.ts.map
|
package/dist/es/cif.js
CHANGED
|
@@ -4,16 +4,6 @@ import { err } from "../_util/result.js";
|
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
import { cifChecksum } from "./vat.js";
|
|
6
6
|
//#region src/es/cif.ts
|
|
7
|
-
/**
|
|
8
|
-
* CIF (Código de Identificación Fiscal).
|
|
9
|
-
*
|
|
10
|
-
* Spanish company tax identification number.
|
|
11
|
-
* Letter prefix (ABCDEFGHJNPQRSUVW) + 7 digits +
|
|
12
|
-
* check digit or letter. Delegates to the CIF
|
|
13
|
-
* branch of es/vat validation.
|
|
14
|
-
*
|
|
15
|
-
* @see https://www.agenciatributaria.es/
|
|
16
|
-
*/
|
|
17
7
|
const CIF_PREFIXES = "ABCDEFGHJNPQRSUVW";
|
|
18
8
|
const CIF_LETTERS = "JABCDEFGHI";
|
|
19
9
|
const compact = (value) => {
|
|
@@ -51,6 +41,7 @@ const cif = {
|
|
|
51
41
|
abbreviation: "CIF",
|
|
52
42
|
aliases: ["CIF", "código de identificación fiscal"],
|
|
53
43
|
candidatePattern: "[A-HJNP-SUVW]\\d{7}[\\dA-J]",
|
|
44
|
+
scope: "country",
|
|
54
45
|
country: "ES",
|
|
55
46
|
entityType: "company",
|
|
56
47
|
sourceUrl: "https://www.agenciatributaria.es/",
|
package/dist/es/cif.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cif.js","names":[],"sources":["../../src/es/cif.ts"],"sourcesContent":["/**\n * CIF (Código de Identificación Fiscal).\n *\n * Spanish company tax identification number.\n * Letter prefix (ABCDEFGHJNPQRSUVW) + 7 digits +\n * check digit or letter. Delegates to the CIF\n * branch of es/vat validation.\n *\n * @see https://www.agenciatributaria.es/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"cif.js","names":[],"sources":["../../src/es/cif.ts"],"sourcesContent":["/**\n * CIF (Código de Identificación Fiscal).\n *\n * Spanish company tax identification number.\n * Letter prefix (ABCDEFGHJNPQRSUVW) + 7 digits +\n * check digit or letter. Delegates to the CIF\n * branch of es/vat validation.\n *\n * @see https://www.agenciatributaria.es/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\nimport { cifChecksum } from \"./vat\";\n\nimport { clean } from \"#util/clean\";\nimport { randomChar, randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst CIF_PREFIXES = \"ABCDEFGHJNPQRSUVW\";\nconst CIF_LETTERS = \"JABCDEFGHI\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"ES\") || v.startsWith(\"es\")) {\n v = v.slice(2);\n }\n return v.toUpperCase();\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Spanish CIF must be 9 characters\",\n );\n }\n\n const first = v.charAt(0);\n if (!CIF_PREFIXES.includes(first)) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish CIF must start with a valid prefix letter\",\n );\n }\n\n if (!isdigits(v.slice(1, 8))) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish CIF must have 7 digits after prefix\",\n );\n }\n\n const last = v.charAt(8);\n const check = cifChecksum(v.slice(1, 8));\n\n if (\n last !== String(check) &&\n last !== CIF_LETTERS.charAt(check)\n ) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish CIF check digit/letter 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 Spanish CIF. */\nconst generate = (): string => {\n const letter = randomChar(CIF_PREFIXES);\n const payload = randomDigits(7);\n const check = cifChecksum(payload);\n if (\"KPQS\".includes(letter))\n return letter + payload + CIF_LETTERS.charAt(check);\n return letter + payload + String(check);\n};\n\n/** Spanish Company Tax ID (CIF). */\nconst cif: CountryValidator<\"ES\"> = {\n name: \"Spanish Company Tax ID\",\n localName: \"Código de Identificación Fiscal\",\n abbreviation: \"CIF\",\n aliases: [\n \"CIF\",\n \"código de identificación fiscal\",\n ] as const,\n candidatePattern: \"[A-HJNP-SUVW]\\\\d{7}[\\\\dA-J]\",\n scope: \"country\",\n country: \"ES\",\n entityType: \"company\",\n sourceUrl: \"https://www.agenciatributaria.es/\",\n examples: [\"A13585625\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default cif;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAsBA,MAAM,eAAe;AACrB,MAAM,cAAc;AAEpB,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,MAAM;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,IAAI,EAAE,MAAM,CAAC;CAEf,OAAO,EAAE,YAAY;AACvB;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,kCACF;CAGF,MAAM,QAAQ,EAAE,OAAO,CAAC;CACxB,IAAI,CAAC,aAAa,SAAS,KAAK,GAC9B,OAAO,IACL,kBACA,mDACF;CAGF,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,GACzB,OAAO,IACL,kBACA,6CACF;CAGF,MAAM,OAAO,EAAE,OAAO,CAAC;CACvB,MAAM,QAAQ,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC;CAEvC,IACE,SAAS,OAAO,KAAK,KACrB,SAAS,YAAY,OAAO,KAAK,GAEjC,OAAO,IACL,oBACA,yCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,MAAM,SAAS,WAAW,YAAY;CACtC,MAAM,UAAU,aAAa,CAAC;CAC9B,MAAM,QAAQ,YAAY,OAAO;CACjC,IAAI,OAAO,SAAS,MAAM,GACxB,OAAO,SAAS,UAAU,YAAY,OAAO,KAAK;CACpD,OAAO,SAAS,UAAU,OAAO,KAAK;AACxC;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,OACA,iCACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/es/dni.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/es/dni.d.ts
|
|
4
4
|
declare const CHECK_LETTERS = "TRWAGMYFPDXBNJZSQVHLCKE";
|
|
@@ -8,7 +8,7 @@ declare const format: (value: string) => string;
|
|
|
8
8
|
/** Generate a random valid Spanish DNI. */
|
|
9
9
|
declare const generate: () => string;
|
|
10
10
|
/** Spanish National Identity Document. */
|
|
11
|
-
declare const dni:
|
|
11
|
+
declare const dni: CountryValidator<"ES">;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { CHECK_LETTERS, compact, dni as default, format, generate, validate };
|
|
14
14
|
//# sourceMappingURL=dni.d.ts.map
|
package/dist/es/dni.js
CHANGED
|
@@ -3,15 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/es/dni.ts
|
|
6
|
-
/**
|
|
7
|
-
* DNI (Documento Nacional de Identidad).
|
|
8
|
-
*
|
|
9
|
-
* Spanish national identity document number.
|
|
10
|
-
* 8 digits followed by a check letter determined
|
|
11
|
-
* by the remainder of dividing the number by 23.
|
|
12
|
-
*
|
|
13
|
-
* @see https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/dni/
|
|
14
|
-
*/
|
|
15
6
|
const CHECK_LETTERS = "TRWAGMYFPDXBNJZSQVHLCKE";
|
|
16
7
|
const compact = (value) => clean(value, " -").toUpperCase();
|
|
17
8
|
const validate = (value) => {
|
|
@@ -43,6 +34,7 @@ const dni = {
|
|
|
43
34
|
"documento nacional de identidad"
|
|
44
35
|
],
|
|
45
36
|
candidatePattern: "\\d{1,2}\\.?\\d{3}\\.?\\d{3}-?[A-Z]",
|
|
37
|
+
scope: "country",
|
|
46
38
|
country: "ES",
|
|
47
39
|
entityType: "person",
|
|
48
40
|
sourceUrl: "https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/dni/",
|
package/dist/es/dni.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dni.js","names":[],"sources":["../../src/es/dni.ts"],"sourcesContent":["/**\n * DNI (Documento Nacional de Identidad).\n *\n * Spanish national identity document number.\n * 8 digits followed by a check letter determined\n * by the remainder of dividing the number by 23.\n *\n * @see https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/dni/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"dni.js","names":[],"sources":["../../src/es/dni.ts"],"sourcesContent":["/**\n * DNI (Documento Nacional de Identidad).\n *\n * Spanish national identity document number.\n * 8 digits followed by a check letter determined\n * by the remainder of dividing the number by 23.\n *\n * @see https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/dni/\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 CHECK_LETTERS = \"TRWAGMYFPDXBNJZSQVHLCKE\";\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 !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"DNI must be 8 digits and 1 letter\",\n );\n }\n\n const digits = v.slice(0, 8);\n const letter = v[8];\n\n if (!isdigits(digits)) {\n return err(\n \"INVALID_FORMAT\",\n \"DNI must start with 8 digits\",\n );\n }\n\n const expected = CHECK_LETTERS[Number(digits) % 23];\n if (letter !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"DNI check letter does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Spanish DNI. */\nconst generate = (): string => {\n const num = randomDigits(8);\n return num + CHECK_LETTERS[Number(num) % 23];\n};\n\n/** Spanish National Identity Document. */\nconst dni: CountryValidator<\"ES\"> = {\n name: \"Spanish National ID\",\n localName: \"Documento Nacional de Identidad\",\n abbreviation: \"DNI\",\n aliases: [\n \"D.N.I.\",\n \"DNI\",\n \"documento nacional de identidad\",\n ] as const,\n candidatePattern: \"\\\\d{1,2}\\\\.?\\\\d{3}\\\\.?\\\\d{3}-?[A-Z]\",\n scope: \"country\",\n country: \"ES\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/dni/\",\n examples: [\"54362315K\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default dni;\nexport {\n CHECK_LETTERS,\n compact,\n format,\n validate,\n generate,\n};\n"],"mappings":";;;;;AAoBA,MAAM,gBAAgB;AAEtB,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,EAAE,YAAY;AAEjC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,mCACF;CAGF,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC;CAC3B,MAAM,SAAS,EAAE;CAEjB,IAAI,CAAC,SAAS,MAAM,GAClB,OAAO,IACL,kBACA,8BACF;CAIF,IAAI,WAAA,0BAD2B,OAAO,MAAM,IAAI,KAE9C,OAAO,IACL,oBACA,iCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,MAAM,MAAM,aAAa,CAAC;CAC1B,OAAO,MAAM,cAAc,OAAO,GAAG,IAAI;AAC3C;;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/es/nie.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/es/nie.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 Spanish NIE. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Spanish Foreigner Identification Number. */
|
|
10
|
-
declare const nie:
|
|
10
|
+
declare const nie: CountryValidator<"ES">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, nie as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=nie.d.ts.map
|
package/dist/es/nie.js
CHANGED
|
@@ -4,15 +4,6 @@ import { err } from "../_util/result.js";
|
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
import { CHECK_LETTERS } from "./dni.js";
|
|
6
6
|
//#region src/es/nie.ts
|
|
7
|
-
/**
|
|
8
|
-
* NIE (Número de Identidad de Extranjero).
|
|
9
|
-
*
|
|
10
|
-
* Spanish foreigner identification number. Starts
|
|
11
|
-
* with X, Y, or Z, followed by 7 digits and a check
|
|
12
|
-
* letter computed using the DNI algorithm.
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/nie/
|
|
15
|
-
*/
|
|
16
7
|
const PREFIX_MAP = {
|
|
17
8
|
X: "0",
|
|
18
9
|
Y: "1",
|
|
@@ -63,6 +54,7 @@ const nie = {
|
|
|
63
54
|
"número de identidad de extranjero"
|
|
64
55
|
],
|
|
65
56
|
candidatePattern: "[XYZ]-?\\d{7}-?[A-Z]",
|
|
57
|
+
scope: "country",
|
|
66
58
|
country: "ES",
|
|
67
59
|
entityType: "person",
|
|
68
60
|
sourceUrl: "https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/nie/",
|
package/dist/es/nie.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nie.js","names":[],"sources":["../../src/es/nie.ts"],"sourcesContent":["/**\n * NIE (Número de Identidad de Extranjero).\n *\n * Spanish foreigner identification number. Starts\n * with X, Y, or Z, followed by 7 digits and a check\n * letter computed using the DNI algorithm.\n *\n * @see https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/nie/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"nie.js","names":[],"sources":["../../src/es/nie.ts"],"sourcesContent":["/**\n * NIE (Número de Identidad de Extranjero).\n *\n * Spanish foreigner identification number. Starts\n * with X, Y, or Z, followed by 7 digits and a check\n * letter computed using the DNI algorithm.\n *\n * @see https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/nie/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\nimport { CHECK_LETTERS } from \"./dni\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst PREFIX_MAP: Record<string, string> = {\n X: \"0\",\n Y: \"1\",\n Z: \"2\",\n};\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 !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"NIE must be 9 characters\",\n );\n }\n\n const prefix = v.charAt(0);\n const replacement = PREFIX_MAP[prefix];\n if (replacement === undefined) {\n return err(\n \"INVALID_FORMAT\",\n \"NIE must start with X, Y, or Z\",\n );\n }\n\n const digits = v.slice(1, 8);\n if (!isdigits(digits)) {\n return err(\n \"INVALID_FORMAT\",\n \"NIE must have 7 digits after prefix\",\n );\n }\n\n const letter = v.charAt(8);\n const num = Number(replacement + digits);\n const expected = CHECK_LETTERS.charAt(num % 23);\n if (letter !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"NIE check letter does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\nconst NIE_PREFIXES = [\"X\", \"Y\", \"Z\"] as const;\nconst NIE_PREFIX_VALUES: Record<\n (typeof NIE_PREFIXES)[number],\n number\n> = { X: 0, Y: 1, Z: 2 };\n\n/** Generate a random valid Spanish NIE. */\nconst generate = (): string => {\n const prefix = randomPick(NIE_PREFIXES);\n const digits = randomDigits(7);\n const num =\n NIE_PREFIX_VALUES[prefix] * 10000000 + Number(digits);\n return prefix + digits + CHECK_LETTERS.charAt(num % 23);\n};\n\n/** Spanish Foreigner Identification Number. */\nconst nie: CountryValidator<\"ES\"> = {\n name: \"Spanish Foreigner ID\",\n localName: \"Número de Identidad de Extranjero\",\n abbreviation: \"NIE\",\n aliases: [\n \"N.I.E.\",\n \"NIE\",\n \"número de identidad de extranjero\",\n ] as const,\n candidatePattern: \"[XYZ]-?\\\\d{7}-?[A-Z]\",\n scope: \"country\",\n country: \"ES\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/nie/\",\n examples: [\"X5253868R\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nie;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAqBA,MAAM,aAAqC;CACzC,GAAG;CACH,GAAG;CACH,GAAG;AACL;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,EAAE,YAAY;AAEjC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,0BACF;CAIF,MAAM,cAAc,WADL,EAAE,OAAO,CACY;CACpC,IAAI,gBAAgB,KAAA,GAClB,OAAO,IACL,kBACA,gCACF;CAGF,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC;CAC3B,IAAI,CAAC,SAAS,MAAM,GAClB,OAAO,IACL,kBACA,qCACF;CAGF,MAAM,SAAS,EAAE,OAAO,CAAC;CACzB,MAAM,MAAM,OAAO,cAAc,MAAM;CAEvC,IAAI,WAAA,0BAD2B,OAAO,MAAM,EACtB,GACpB,OAAO,IACL,oBACA,iCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;AAEvD,MAAM,eAAe;CAAC;CAAK;CAAK;AAAG;AACnC,MAAM,oBAGF;CAAE,GAAG;CAAG,GAAG;CAAG,GAAG;AAAE;;AAGvB,MAAM,iBAAyB;CAC7B,MAAM,SAAS,WAAW,YAAY;CACtC,MAAM,SAAS,aAAa,CAAC;CAC7B,MAAM,MACJ,kBAAkB,UAAU,MAAW,OAAO,MAAM;CACtD,OAAO,SAAS,SAAS,cAAc,OAAO,MAAM,EAAE;AACxD;;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/es/nss.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/es/nss.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 Spanish NSS. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Spanish Social Security Number. */
|
|
10
|
-
declare const nss:
|
|
10
|
+
declare const nss: CountryValidator<"ES">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, nss as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=nss.d.ts.map
|
package/dist/es/nss.js
CHANGED
|
@@ -3,22 +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/es/nss.ts
|
|
6
|
-
/**
|
|
7
|
-
* NSS (Número de la Seguridad Social).
|
|
8
|
-
*
|
|
9
|
-
* Spanish Social Security Number. 12 digits:
|
|
10
|
-
* 2-digit province code (01–52) + 8-digit affiliate
|
|
11
|
-
* number + 2-digit check digits.
|
|
12
|
-
*
|
|
13
|
-
* Check digits are computed as:
|
|
14
|
-
* if affiliate < 10_000_000:
|
|
15
|
-
* (affiliate + province × 10_000_000) mod 97
|
|
16
|
-
* else:
|
|
17
|
-
* parseInt(province + affiliate) mod 97
|
|
18
|
-
*
|
|
19
|
-
* @see https://www.seg-social.es/
|
|
20
|
-
* @see https://intervia.com/doc/validar-numeros-de-la-seguridad-social/
|
|
21
|
-
*/
|
|
22
6
|
const compact = (value) => clean(value, " -/.");
|
|
23
7
|
const validate = (value) => {
|
|
24
8
|
const v = compact(value);
|
|
@@ -55,6 +39,7 @@ const nss = {
|
|
|
55
39
|
abbreviation: "NSS",
|
|
56
40
|
aliases: ["NSS", "número de seguridad social"],
|
|
57
41
|
candidatePattern: "\\d{12}",
|
|
42
|
+
scope: "country",
|
|
58
43
|
country: "ES",
|
|
59
44
|
entityType: "person",
|
|
60
45
|
description: "Spanish Social Security affiliation number with mod-97 check digits",
|
package/dist/es/nss.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nss.js","names":[],"sources":["../../src/es/nss.ts"],"sourcesContent":["/**\n * NSS (Número de la Seguridad Social).\n *\n * Spanish Social Security Number. 12 digits:\n * 2-digit province code (01–52) + 8-digit affiliate\n * number + 2-digit check digits.\n *\n * Check digits are computed as:\n * if affiliate < 10_000_000:\n * (affiliate + province × 10_000_000) mod 97\n * else:\n * parseInt(province + affiliate) mod 97\n *\n * @see https://www.seg-social.es/\n * @see https://intervia.com/doc/validar-numeros-de-la-seguridad-social/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"nss.js","names":[],"sources":["../../src/es/nss.ts"],"sourcesContent":["/**\n * NSS (Número de la Seguridad Social).\n *\n * Spanish Social Security Number. 12 digits:\n * 2-digit province code (01–52) + 8-digit affiliate\n * number + 2-digit check digits.\n *\n * Check digits are computed as:\n * if affiliate < 10_000_000:\n * (affiliate + province × 10_000_000) mod 97\n * else:\n * parseInt(province + affiliate) mod 97\n *\n * @see https://www.seg-social.es/\n * @see https://intervia.com/doc/validar-numeros-de-la-seguridad-social/\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\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"Spanish NSS must be 12 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish NSS must contain only digits\",\n );\n }\n\n const province = Number(v.slice(0, 2));\n if (province < 1 || province > 52) {\n return err(\n \"INVALID_COMPONENT\",\n \"Spanish NSS province code must be 01–52\",\n );\n }\n\n const affiliate = Number(v.slice(2, 10));\n const check = Number(v.slice(10, 12));\n\n let base: number;\n if (affiliate < 10_000_000) {\n base = affiliate + province * 10_000_000;\n } else {\n // Concatenate province and affiliate as a number\n base = Number(`${province}${v.slice(2, 10)}`);\n }\n\n const expected = base % 97;\n\n if (expected !== check) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish NSS check digits do not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)}/${v.slice(2, 10)}/${v.slice(10)}`;\n};\n\n/** Generate a random valid Spanish NSS. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(12);\n if (validate(c).valid) return c;\n }\n};\n\n/** Spanish Social Security Number. */\nconst nss: CountryValidator<\"ES\"> = {\n name: \"Spanish Social Security Number\",\n localName: \"Número de la Seguridad Social\",\n abbreviation: \"NSS\",\n aliases: [\"NSS\", \"número de seguridad social\"] as const,\n candidatePattern: \"\\\\d{12}\",\n scope: \"country\",\n country: \"ES\",\n entityType: \"person\",\n description:\n \"Spanish Social Security affiliation number \" +\n \"with mod-97 check digits\",\n sourceUrl: \"https://www.seg-social.es/\",\n lengths: [12] as const,\n examples: [\"281234567840\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nss;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AA2BA,MAAM,WAAW,UACf,MAAM,OAAO,MAAM;AAErB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,sCACF;CAGF,MAAM,WAAW,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CACrC,IAAI,WAAW,KAAK,WAAW,IAC7B,OAAO,IACL,qBACA,yCACF;CAGF,MAAM,YAAY,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CACvC,MAAM,QAAQ,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;CAEpC,IAAI;CACJ,IAAI,YAAY,KACd,OAAO,YAAY,WAAW;MAG9B,OAAO,OAAO,GAAG,WAAW,EAAE,MAAM,GAAG,EAAE,GAAG;CAK9C,IAFiB,OAAO,OAEP,OACf,OAAO,IACL,oBACA,uCACF;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,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;AACzD;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,EAAE;EACzB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,4BAA4B;CAC7C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CAEF,WAAW;CACX,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,cAAc;CACzB;CACA;CACA;CACA;AACF"}
|
package/dist/es/vat.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/es/vat.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 Spanish VAT (DNI form). */
|
|
9
9
|
declare const generate: () => string;
|
|
10
10
|
/** Spanish VAT Number. */
|
|
11
|
-
declare const vat:
|
|
11
|
+
declare const vat: CountryValidator<"ES">;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { cifChecksum, compact, vat as default, format, generate, validate };
|
|
14
14
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/es/vat.js
CHANGED
|
@@ -3,15 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/es/vat.ts
|
|
6
|
-
/**
|
|
7
|
-
* NIF/CIF (Spanish VAT number).
|
|
8
|
-
*
|
|
9
|
-
* 9 characters with 4 subtypes: DNI, NIE, CIF,
|
|
10
|
-
* and K/L/M personal numbers.
|
|
11
|
-
*
|
|
12
|
-
* @see https://www.vatify.eu/spain-vat-number.html
|
|
13
|
-
* @see https://www.agenciatributaria.es/
|
|
14
|
-
*/
|
|
15
6
|
const DNI_LETTERS = "TRWAGMYFPDXBNJZSQVHLCKE";
|
|
16
7
|
const CIF_LETTERS = "JABCDEFGHI";
|
|
17
8
|
const compact = (value) => {
|
|
@@ -44,7 +35,10 @@ const validate = (value) => {
|
|
|
44
35
|
};
|
|
45
36
|
}
|
|
46
37
|
if (first === "X" || first === "Y" || first === "Z") {
|
|
47
|
-
|
|
38
|
+
let prefix = "2";
|
|
39
|
+
if (first === "X") prefix = "0";
|
|
40
|
+
else if (first === "Y") prefix = "1";
|
|
41
|
+
const digits = prefix + v.slice(1, 8);
|
|
48
42
|
if (!isdigits(digits) || !isdigits(v.slice(1, 8))) return err("INVALID_FORMAT", "Spanish NIE must have 7 digits after prefix");
|
|
49
43
|
if (last !== DNI_LETTERS.charAt(Number.parseInt(digits, 10) % 23)) return err("INVALID_CHECKSUM", "Spanish NIE check letter mismatch");
|
|
50
44
|
return {
|
|
@@ -89,6 +83,7 @@ const vat = {
|
|
|
89
83
|
"número de identificación fiscal"
|
|
90
84
|
],
|
|
91
85
|
candidatePattern: "ES[A-Z]\\d{7}[A-Z\\d]",
|
|
86
|
+
scope: "country",
|
|
92
87
|
country: "ES",
|
|
93
88
|
entityType: "any",
|
|
94
89
|
sourceUrl: "https://www.agenciatributaria.es/",
|
package/dist/es/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/es/vat.ts"],"sourcesContent":["/**\n * NIF/CIF (Spanish VAT number).\n *\n * 9 characters with 4 subtypes: DNI, NIE, CIF,\n * and K/L/M personal numbers.\n *\n * @see https://www.vatify.eu/spain-vat-number.html\n * @see https://www.agenciatributaria.es/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/es/vat.ts"],"sourcesContent":["/**\n * NIF/CIF (Spanish VAT number).\n *\n * 9 characters with 4 subtypes: DNI, NIE, CIF,\n * and K/L/M personal numbers.\n *\n * @see https://www.vatify.eu/spain-vat-number.html\n * @see https://www.agenciatributaria.es/\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 DNI_LETTERS = \"TRWAGMYFPDXBNJZSQVHLCKE\";\nconst CIF_LETTERS = \"JABCDEFGHI\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"ES\") || v.startsWith(\"es\")) {\n v = v.slice(2);\n }\n return v.toUpperCase();\n};\n\nconst cifChecksum = (digits: string): number => {\n let even = 0;\n let odd = 0;\n for (let i = 0; i < 7; i++) {\n const d = Number(digits.charAt(i));\n if (i % 2 === 0) {\n // Odd positions (1-indexed): double and sum digits\n const doubled = d * 2;\n odd += Math.floor(doubled / 10) + (doubled % 10);\n } else {\n even += d;\n }\n }\n return (10 - ((even + odd) % 10)) % 10;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Spanish VAT number must be 9 characters\",\n );\n }\n\n const first = v.charAt(0);\n const last = v.charAt(8);\n\n // DNI: 8 digits + letter\n if (isdigits(v.slice(0, 8))) {\n const expected = DNI_LETTERS.charAt(\n Number.parseInt(v.slice(0, 8), 10) % 23,\n );\n if (last !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish DNI check letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // NIE: X/Y/Z + 7 digits + letter\n if (first === \"X\" || first === \"Y\" || first === \"Z\") {\n let prefix = \"2\";\n if (first === \"X\") {\n prefix = \"0\";\n } else if (first === \"Y\") {\n prefix = \"1\";\n }\n const digits = prefix + v.slice(1, 8);\n if (!isdigits(digits) || !isdigits(v.slice(1, 8))) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish NIE must have 7 digits after prefix\",\n );\n }\n const expected = DNI_LETTERS.charAt(\n Number.parseInt(digits, 10) % 23,\n );\n if (last !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish NIE check letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // K, L, M: personal number, letter + 7 digits +\n // check letter\n if (first === \"K\" || first === \"L\" || first === \"M\") {\n if (!isdigits(v.slice(1, 8))) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish K/L/M number must have 7 digits\",\n );\n }\n const expected = DNI_LETTERS.charAt(\n Number.parseInt(v.slice(1, 8), 10) % 23,\n );\n if (last !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish K/L/M check letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // CIF: letter + 7 digits + check digit/letter\n const CIF_PREFIXES = \"ABCDEFGHJNPQRSUVW\";\n if (CIF_PREFIXES.includes(first)) {\n if (!isdigits(v.slice(1, 8))) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish CIF must have 7 digits after prefix\",\n );\n }\n const check = cifChecksum(v.slice(1, 8));\n // Accept either numeric or alphabetic check digit\n // for all CIF prefixes (sources conflict on which\n // prefixes require which type)\n if (\n last !== String(check) &&\n last !== CIF_LETTERS.charAt(check)\n ) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish CIF check digit/letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n return err(\n \"INVALID_FORMAT\",\n \"Spanish VAT number has invalid format\",\n );\n};\n\nconst format = (value: string): string =>\n `ES${compact(value)}`;\n\n/** Generate a random valid Spanish VAT (DNI form). */\nconst generate = (): string => {\n const letters = \"TRWAGMYFPDXBNJZSQVHLCKE\";\n const num = randomDigits(8);\n return num + letters.charAt(Number(num) % 23);\n};\n\n/** Spanish VAT Number. */\nconst vat: CountryValidator<\"ES\"> = {\n name: \"Spanish VAT Number\",\n localName: \"Número de Identificación Fiscal\",\n abbreviation: \"NIF\",\n aliases: [\n \"NIF\",\n \"CIF\",\n \"número de identificación fiscal\",\n ] as const,\n candidatePattern: \"ES[A-Z]\\\\d{7}[A-Z\\\\d]\",\n scope: \"country\",\n country: \"ES\",\n entityType: \"any\",\n sourceUrl: \"https://www.agenciatributaria.es/\",\n examples: [\"12345678Z\", \"A78304516\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { cifChecksum, compact, format, validate, generate };\n"],"mappings":"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"}
|
package/dist/eu/vat.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GlobalValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/eu/vat.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -15,7 +15,7 @@ declare const format: (value: string) => string;
|
|
|
15
15
|
/** Generate a random EU VAT number from a member validator. */
|
|
16
16
|
declare const generate: () => string;
|
|
17
17
|
/** European Union VAT Number. */
|
|
18
|
-
declare const euVat:
|
|
18
|
+
declare const euVat: GlobalValidator;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { compact, euVat as default, format, generate, validate };
|
|
21
21
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/eu/vat.js
CHANGED
package/dist/eu/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":["atUid","beVat","bgVat","cyVat","czDic","deVat","dkVat","eeVat","grVat","esVat","fiVat","frTva","hrVat","huVat","ieVat","itIva","ltVat","luVat","lvVat","mtVat","nlVat","plNip","ptVat","roVat","seVat","siVat","skDic","gbVat"],"sources":["../../src/eu/vat.ts"],"sourcesContent":["/**\n * EU VAT (European Union VAT Number).\n *\n * Dispatcher that routes to per-country VAT\n * validators. Extracts the 2-letter country prefix\n * and delegates to the matching country module.\n *\n * Special cases:\n * - EL → Greece (gr.vat)\n * - XI → Northern Ireland (gb.vat)\n *\n * @see https://ec.europa.eu/taxation_customs/vies/\n */\n\nimport
|
|
1
|
+
{"version":3,"file":"vat.js","names":["atUid","beVat","bgVat","cyVat","czDic","deVat","dkVat","eeVat","grVat","esVat","fiVat","frTva","hrVat","huVat","ieVat","itIva","ltVat","luVat","lvVat","mtVat","nlVat","plNip","ptVat","roVat","seVat","siVat","skDic","gbVat"],"sources":["../../src/eu/vat.ts"],"sourcesContent":["/**\n * EU VAT (European Union VAT Number).\n *\n * Dispatcher that routes to per-country VAT\n * validators. Extracts the 2-letter country prefix\n * and delegates to the matching country module.\n *\n * Special cases:\n * - EL → Greece (gr.vat)\n * - XI → Northern Ireland (gb.vat)\n *\n * @see https://ec.europa.eu/taxation_customs/vies/\n */\n\nimport atUid from \"../at/uid\";\nimport beVat from \"../be/vat\";\nimport bgVat from \"../bg/vat\";\nimport cyVat from \"../cy/vat\";\nimport czDic from \"../cz/dic\";\nimport deVat from \"../de/vat\";\nimport dkVat from \"../dk/vat\";\nimport eeVat from \"../ee/vat\";\nimport esVat from \"../es/vat\";\nimport fiVat from \"../fi/vat\";\nimport frTva from \"../fr/tva\";\nimport gbVat from \"../gb/vat\";\nimport grVat from \"../gr/vat\";\nimport hrVat from \"../hr/vat\";\nimport huVat from \"../hu/vat\";\nimport ieVat from \"../ie/vat\";\nimport itIva from \"../it/iva\";\nimport ltVat from \"../lt/vat\";\nimport luVat from \"../lu/vat\";\nimport lvVat from \"../lv/vat\";\nimport mtVat from \"../mt/vat\";\nimport nlVat from \"../nl/vat\";\nimport plNip from \"../pl/nip\";\nimport ptVat from \"../pt/vat\";\nimport roVat from \"../ro/vat\";\nimport seVat from \"../se/vat\";\nimport siVat from \"../si/vat\";\nimport skDic from \"../sk/dic\";\nimport type {\n GlobalValidator,\n ValidateResult,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\ntype CountryValidator = {\n compact: (value: string) => string;\n validate: (value: string) => ValidateResult;\n format: (value: string) => string;\n};\n\n/**\n * Map of EU VAT country prefixes to their\n * country-specific validators.\n */\nconst VALIDATORS: Record<string, CountryValidator> = {\n AT: atUid,\n BE: beVat,\n BG: bgVat,\n CY: cyVat,\n CZ: czDic,\n DE: deVat,\n DK: dkVat,\n EE: eeVat,\n EL: grVat, // Greece uses EL prefix in EU VAT\n ES: esVat,\n FI: fiVat,\n FR: frTva,\n GR: grVat,\n HR: hrVat,\n HU: huVat,\n IE: ieVat,\n IT: itIva,\n LT: ltVat,\n LU: luVat,\n LV: lvVat,\n MT: mtVat,\n NL: nlVat,\n PL: plNip,\n PT: ptVat,\n RO: roVat,\n SE: seVat,\n SI: siVat,\n SK: skDic,\n XI: gbVat, // Northern Ireland\n};\n\n/**\n * Extract the 2-letter country prefix and the\n * remaining number from an EU VAT string.\n */\nconst splitPrefix = (\n value: string,\n): { cc: string; rest: string } | undefined => {\n const v = clean(value, \" -\").toUpperCase();\n if (v.length < 3) return undefined;\n const cc = v.slice(0, 2);\n if (!/^[A-Z]{2}$/.test(cc)) return undefined;\n return { cc, rest: v.slice(2) };\n};\n\nconst compact = (value: string): string => {\n const parts = splitPrefix(value);\n if (parts === undefined) {\n return clean(value, \" -\").toUpperCase();\n }\n const validator = VALIDATORS[parts.cc];\n if (validator === undefined) {\n return clean(value, \" -\").toUpperCase();\n }\n return `${parts.cc}${validator.compact(parts.rest)}`;\n};\n\nconst validate = (value: string): ValidateResult => {\n const parts = splitPrefix(value);\n if (parts === undefined) {\n return err(\n \"INVALID_FORMAT\",\n \"EU VAT must start with a 2-letter country code\",\n );\n }\n const validator = VALIDATORS[parts.cc];\n if (validator === undefined) {\n return err(\n \"INVALID_COMPONENT\",\n `Unsupported EU VAT country: ${parts.cc}`,\n );\n }\n const result = validator.validate(parts.rest);\n if (!result.valid) return result;\n return {\n valid: true,\n compact: `${parts.cc}${result.compact}`,\n };\n};\n\n/**\n * Format returns the compact EU VAT form:\n * `CC` + country-compacted number. Equivalent to\n * compact() because country format() methods\n * prepend their own prefix (e.g., AT UID format\n * returns \"ATU...\"), which would cause double-\n * prefixing if used here.\n */\nconst format = (value: string): string => {\n const parts = splitPrefix(value);\n if (parts === undefined) return value;\n const validator = VALIDATORS[parts.cc];\n if (validator === undefined) return value;\n return `${parts.cc}${validator.compact(parts.rest)}`;\n};\n\nconst GENERATORS = [\n [\"AT\", atUid],\n [\"BE\", beVat],\n [\"BG\", bgVat],\n [\"CY\", cyVat],\n [\"CZ\", czDic],\n [\"DE\", deVat],\n [\"DK\", dkVat],\n [\"EE\", eeVat],\n [\"ES\", esVat],\n [\"FI\", fiVat],\n [\"FR\", frTva],\n [\"GR\", grVat],\n [\"HR\", hrVat],\n [\"HU\", huVat],\n [\"IE\", ieVat],\n [\"IT\", itIva],\n [\"LT\", ltVat],\n [\"LU\", luVat],\n [\"LV\", lvVat],\n [\"MT\", mtVat],\n [\"NL\", nlVat],\n [\"PL\", plNip],\n [\"PT\", ptVat],\n [\"RO\", roVat],\n [\"SE\", seVat],\n [\"SI\", siVat],\n [\"SK\", skDic],\n] as const;\n\n/** Generate a random EU VAT number from a member validator. */\nconst generate = (): string => {\n for (;;) {\n const candidate =\n GENERATORS[randomInt(0, GENERATORS.length - 1)];\n if (!candidate) continue;\n\n const [prefix, validator] = candidate;\n if (validator.generate === undefined) continue;\n return `${prefix}${validator.generate()}`;\n }\n};\n\n/** European Union VAT Number. */\nconst euVat: GlobalValidator = {\n scope: \"global\",\n name: \"EU VAT Number\",\n localName: \"EU VAT Number\",\n abbreviation: \"EU VAT\",\n aliases: [\"EU VAT\", \"VAT identification number\"] as const,\n candidatePattern: \"[A-Z]{2}\\\\d{8,12}\",\n entityType: \"company\",\n sourceUrl: \"https://ec.europa.eu/taxation_customs/vies/\",\n examples: [\"ATU13585627\", \"DE136695976\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default euVat;\nexport { compact, format, generate, validate };\n"],"mappings":"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"}
|
package/dist/fi/hetu.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/fi/hetu.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -12,7 +12,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
12
12
|
/** Generate a random valid HETU. */
|
|
13
13
|
declare const generate: () => string;
|
|
14
14
|
/** Finnish Personal Identity Code. */
|
|
15
|
-
declare const hetu:
|
|
15
|
+
declare const hetu: CountryValidator<"FI", ParsedPersonId>;
|
|
16
16
|
//#endregion
|
|
17
17
|
export { compact, hetu as default, format, generate, parse, validate };
|
|
18
18
|
//# sourceMappingURL=hetu.d.ts.map
|