@stll/stdnum 0.0.1 → 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/LICENSE +1 -5
- package/README.md +28 -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 +5 -5
- 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.d.ts +13 -1
- package/dist/_util/generate.js +23 -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/mod.d.ts +3 -2
- package/dist/ad/nrt.d.ts +16 -2
- package/dist/ad/nrt.js +4 -16
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +2 -3
- package/dist/ae/eid.js +2 -12
- package/dist/ae/eid.js.map +1 -1
- package/dist/ae/mod.d.ts +3 -2
- package/dist/ai/mod.d.ts +3 -2
- 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/mod.d.ts +3 -2
- 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/mod.d.ts +3 -2
- 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 -3
- package/dist/ar/cbu.js +2 -10
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +2 -3
- package/dist/ar/cuit.js +13 -29
- 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/ar/mod.d.ts +3 -2
- 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/mod.d.ts +3 -2
- package/dist/at/tin.d.ts +2 -3
- package/dist/at/tin.js +1 -11
- package/dist/at/tin.js.map +1 -1
- package/dist/at/uid.d.ts +2 -3
- package/dist/at/uid.js +2 -10
- package/dist/at/uid.js.map +1 -1
- package/dist/at/vnr.d.ts +5 -4
- package/dist/at/vnr.js +23 -16
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +2 -3
- package/dist/au/abn.js +1 -10
- package/dist/au/abn.js.map +1 -1
- package/dist/au/acn.d.ts +2 -3
- package/dist/au/acn.js +1 -10
- package/dist/au/acn.js.map +1 -1
- package/dist/au/mod.d.ts +3 -2
- package/dist/au/tfn.d.ts +2 -3
- package/dist/au/tfn.js +1 -10
- package/dist/au/tfn.js.map +1 -1
- package/dist/az/mod.d.ts +3 -2
- package/dist/az/voen.d.ts +2 -3
- package/dist/az/voen.js +1 -14
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +2 -3
- package/dist/ba/jmbg.js +4 -11
- package/dist/ba/jmbg.js.map +1 -1
- package/dist/ba/mod.d.ts +3 -2
- package/dist/bd/mod.d.ts +3 -2
- package/dist/bd/nid.d.ts +23 -2
- package/dist/bd/nid.js +11 -32
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +2 -3
- package/dist/be/bis.js +1 -11
- package/dist/be/bis.js.map +1 -1
- package/dist/be/mod.d.ts +3 -2
- package/dist/be/nn.d.ts +2 -3
- package/dist/be/nn.js +1 -11
- package/dist/be/nn.js.map +1 -1
- package/dist/be/vat.d.ts +2 -3
- package/dist/be/vat.js +1 -9
- package/dist/be/vat.js.map +1 -1
- package/dist/bg/egn.d.ts +2 -3
- package/dist/bg/egn.js +5 -13
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/mod.d.ts +3 -2
- package/dist/bg/pnf.d.ts +2 -3
- package/dist/bg/pnf.js +1 -8
- package/dist/bg/pnf.js.map +1 -1
- package/dist/bg/vat.d.ts +2 -3
- package/dist/bg/vat.js +3 -9
- package/dist/bg/vat.js.map +1 -1
- package/dist/bh/cpr.d.ts +5 -4
- package/dist/bh/cpr.js +9 -19
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bh/mod.d.ts +3 -2
- package/dist/bic.d.ts +13 -2
- package/dist/bic.js +14 -26
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +2 -3
- package/dist/br/cnpj.js +1 -20
- package/dist/br/cnpj.js.map +1 -1
- package/dist/br/cpf.d.ts +2 -3
- package/dist/br/cpf.js +1 -14
- package/dist/br/cpf.js.map +1 -1
- package/dist/br/mod.d.ts +3 -2
- package/dist/by/mod.d.ts +3 -2
- package/dist/by/unp.d.ts +2 -3
- package/dist/by/unp.js +9 -17
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/mod.d.ts +3 -2
- package/dist/bz/tin.d.ts +5 -4
- package/dist/bz/tin.js +10 -27
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +2 -3
- package/dist/ca/bn.js +2 -10
- package/dist/ca/bn.js.map +1 -1
- package/dist/ca/mod.d.ts +3 -2
- package/dist/ca/sin.d.ts +2 -3
- package/dist/ca/sin.js +2 -10
- package/dist/ca/sin.js.map +1 -1
- package/dist/ch/mod.d.ts +3 -2
- package/dist/ch/ssn.d.ts +2 -3
- package/dist/ch/ssn.js +1 -9
- package/dist/ch/ssn.js.map +1 -1
- package/dist/ch/uid.d.ts +2 -3
- package/dist/ch/uid.js +1 -9
- package/dist/ch/uid.js.map +1 -1
- package/dist/ch/vat.d.ts +2 -3
- package/dist/ch/vat.js +1 -9
- package/dist/ch/vat.js.map +1 -1
- package/dist/cl/mod.d.ts +3 -2
- package/dist/cl/rut.d.ts +2 -3
- package/dist/cl/rut.js +2 -15
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/mod.d.ts +3 -2
- package/dist/cn/ric.d.ts +2 -3
- package/dist/cn/ric.js +4 -14
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +2 -3
- package/dist/cn/uscc.js +8 -16
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/mod.d.ts +3 -2
- package/dist/co/nit.d.ts +2 -3
- package/dist/co/nit.js +6 -13
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.d.ts +18 -2
- package/dist/cr/cpf.js +5 -19
- package/dist/cr/cpf.js.map +1 -1
- package/dist/cr/mod.d.ts +3 -2
- package/dist/creditcard.d.ts +2 -3
- package/dist/creditcard.js +5 -14
- package/dist/creditcard.js.map +1 -1
- package/dist/cu/mod.d.ts +3 -2
- package/dist/cu/ni.d.ts +5 -4
- package/dist/cu/ni.js +13 -18
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/mod.d.ts +3 -2
- package/dist/cy/vat.d.ts +2 -3
- package/dist/cy/vat.js +1 -8
- package/dist/cy/vat.js.map +1 -1
- package/dist/cz/dic.d.ts +2 -3
- package/dist/cz/dic.js +7 -13
- package/dist/cz/dic.js.map +1 -1
- package/dist/cz/ico.d.ts +2 -3
- package/dist/cz/ico.js +2 -10
- package/dist/cz/ico.js.map +1 -1
- package/dist/cz/mod.d.ts +3 -2
- package/dist/cz/rc.d.ts +2 -3
- package/dist/cz/rc.js +22 -21
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.d.ts +19 -2
- package/dist/de/handelsreg.js +10 -26
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +2 -3
- package/dist/de/idnr.js +2 -12
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/mod.d.ts +3 -2
- package/dist/de/stnr.d.ts +17 -3
- package/dist/de/stnr.js +1 -15
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +2 -3
- package/dist/de/svnr.js +4 -13
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +2 -3
- package/dist/de/vat.js +2 -11
- package/dist/de/vat.js.map +1 -1
- package/dist/dk/cpr.d.ts +5 -4
- package/dist/dk/cpr.js +14 -12
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +2 -3
- package/dist/dk/cvr.js +2 -15
- package/dist/dk/cvr.js.map +1 -1
- package/dist/dk/mod.d.ts +3 -2
- package/dist/dk/vat.d.ts +2 -3
- package/dist/dk/vat.js +3 -13
- package/dist/dk/vat.js.map +1 -1
- package/dist/do/mod.d.ts +3 -2
- package/dist/do/rnc.d.ts +2 -3
- package/dist/do/rnc.js +3 -17
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/mod.d.ts +3 -2
- package/dist/ec/ruc.d.ts +2 -3
- package/dist/ec/ruc.js +2 -19
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +2 -3
- package/dist/ee/ik.js +6 -15
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/mod.d.ts +3 -2
- package/dist/ee/registrikood.d.ts +2 -3
- package/dist/ee/registrikood.js +9 -15
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +2 -3
- package/dist/ee/vat.js +2 -10
- package/dist/ee/vat.js.map +1 -1
- package/dist/eg/mod.d.ts +3 -2
- 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 -3
- package/dist/es/cif.js +3 -12
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +2 -3
- package/dist/es/dni.js +1 -9
- package/dist/es/dni.js.map +1 -1
- package/dist/es/mod.d.ts +3 -2
- package/dist/es/nie.d.ts +2 -3
- package/dist/es/nie.js +14 -22
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +2 -3
- package/dist/es/nss.js +1 -16
- package/dist/es/nss.js.map +1 -1
- package/dist/es/vat.d.ts +2 -3
- package/dist/es/vat.js +5 -10
- package/dist/es/vat.js.map +1 -1
- package/dist/eu/mod.d.ts +3 -2
- package/dist/eu/vat.d.ts +5 -4
- package/dist/eu/vat.js +44 -2
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +5 -4
- package/dist/fi/hetu.js +19 -12
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/mod.d.ts +3 -2
- package/dist/fi/vat.d.ts +2 -3
- package/dist/fi/vat.js +3 -10
- package/dist/fi/vat.js.map +1 -1
- package/dist/fi/ytunnus.d.ts +2 -3
- package/dist/fi/ytunnus.js +2 -10
- package/dist/fi/ytunnus.js.map +1 -1
- package/dist/fr/mod.d.ts +3 -2
- package/dist/fr/nif.d.ts +2 -3
- package/dist/fr/nif.js +1 -9
- package/dist/fr/nif.js.map +1 -1
- package/dist/fr/nir.d.ts +2 -3
- package/dist/fr/nir.js +3 -14
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +2 -3
- package/dist/fr/siren.js +2 -10
- package/dist/fr/siren.js.map +1 -1
- package/dist/fr/siret.d.ts +2 -3
- package/dist/fr/siret.js +2 -11
- package/dist/fr/siret.js.map +1 -1
- package/dist/fr/tva.d.ts +2 -3
- package/dist/fr/tva.js +2 -12
- package/dist/fr/tva.js.map +1 -1
- package/dist/gb/mod.d.ts +3 -2
- package/dist/gb/nino.d.ts +12 -2
- package/dist/gb/nino.js +8 -17
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +2 -3
- package/dist/gb/sedol.js +9 -18
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +2 -3
- package/dist/gb/utr.js +2 -10
- package/dist/gb/utr.js.map +1 -1
- package/dist/gb/vat.d.ts +2 -3
- package/dist/gb/vat.js +2 -11
- package/dist/gb/vat.js.map +1 -1
- package/dist/ge/mod.d.ts +3 -2
- 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/mod.d.ts +3 -2
- package/dist/gh/tin.d.ts +2 -3
- package/dist/gh/tin.js +10 -24
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +2 -3
- package/dist/gr/amka.js +3 -11
- package/dist/gr/amka.js.map +1 -1
- package/dist/gr/mod.d.ts +3 -2
- package/dist/gr/vat.d.ts +2 -3
- package/dist/gr/vat.js +1 -10
- package/dist/gr/vat.js.map +1 -1
- package/dist/gt/mod.d.ts +3 -2
- package/dist/gt/nit.d.ts +2 -3
- package/dist/gt/nit.js +6 -14
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +2 -3
- package/dist/hk/hkid.js +2 -10
- package/dist/hk/hkid.js.map +1 -1
- package/dist/hk/mod.d.ts +3 -2
- package/dist/hr/mod.d.ts +3 -2
- package/dist/hr/vat.d.ts +2 -3
- package/dist/hr/vat.js +2 -9
- package/dist/hr/vat.js.map +1 -1
- package/dist/hu/mod.d.ts +3 -2
- package/dist/hu/vat.d.ts +2 -3
- package/dist/hu/vat.js +3 -10
- package/dist/hu/vat.js.map +1 -1
- package/dist/iban.d.ts +2 -3
- package/dist/iban.js +2 -8
- package/dist/iban.js.map +1 -1
- package/dist/id/mod.d.ts +3 -2
- package/dist/id/npwp.d.ts +2 -3
- package/dist/id/npwp.js +3 -13
- package/dist/id/npwp.js.map +1 -1
- package/dist/ie/mod.d.ts +3 -2
- package/dist/ie/pps.d.ts +2 -3
- package/dist/ie/pps.js +1 -10
- package/dist/ie/pps.js.map +1 -1
- package/dist/ie/vat.d.ts +2 -3
- package/dist/ie/vat.js +1 -9
- package/dist/ie/vat.js.map +1 -1
- package/dist/il/idnr.d.ts +2 -3
- package/dist/il/idnr.js +2 -9
- package/dist/il/idnr.js.map +1 -1
- package/dist/il/mod.d.ts +3 -2
- package/dist/in/aadhaar.d.ts +2 -3
- package/dist/in/aadhaar.js +2 -12
- package/dist/in/aadhaar.js.map +1 -1
- package/dist/in/gstin.d.ts +2 -3
- package/dist/in/gstin.js +4 -11
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/mod.d.ts +3 -2
- package/dist/in/pan.d.ts +15 -2
- package/dist/in/pan.js +3 -15
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/iq/mod.d.ts +3 -2
- 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/mod.d.ts +3 -2
- package/dist/ir/nid.d.ts +2 -3
- package/dist/ir/nid.js +2 -24
- package/dist/ir/nid.js.map +1 -1
- package/dist/is/kennitala.d.ts +2 -3
- package/dist/is/kennitala.js +2 -13
- package/dist/is/kennitala.js.map +1 -1
- package/dist/is/mod.d.ts +3 -2
- 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 -3
- package/dist/isin.js +11 -21
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +5 -4
- package/dist/it/codicefiscale.js +27 -23
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +2 -3
- package/dist/it/iva.js +2 -9
- package/dist/it/iva.js.map +1 -1
- package/dist/it/mod.d.ts +3 -2
- package/dist/jp/cn.d.ts +2 -3
- package/dist/jp/cn.js +1 -9
- package/dist/jp/cn.js.map +1 -1
- package/dist/jp/mod.d.ts +3 -2
- package/dist/jp/mynumber.d.ts +2 -3
- 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/mod.d.ts +3 -2
- package/dist/kr/rrn.d.ts +5 -4
- package/dist/kr/rrn.js +15 -13
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +6 -5
- package/dist/kw/civil.js +20 -17
- package/dist/kw/civil.js.map +1 -1
- package/dist/kw/mod.d.ts +3 -2
- package/dist/kz/iin.d.ts +2 -3
- package/dist/kz/iin.js +4 -18
- package/dist/kz/iin.js.map +1 -1
- package/dist/kz/mod.d.ts +3 -2
- package/dist/lei.d.ts +2 -3
- package/dist/lei.js +2 -11
- package/dist/lei.js.map +1 -1
- package/dist/li/mod.d.ts +3 -2
- 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/mod.d.ts +3 -2
- package/dist/lk/nic.d.ts +5 -4
- package/dist/lk/nic.js +16 -16
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +2 -3
- package/dist/lt/asmens.js +2 -1
- package/dist/lt/asmens.js.map +1 -1
- package/dist/lt/mod.d.ts +3 -2
- package/dist/lt/vat.d.ts +2 -3
- package/dist/lt/vat.js +2 -10
- package/dist/lt/vat.js.map +1 -1
- package/dist/lu/mod.d.ts +3 -2
- package/dist/lu/vat.d.ts +2 -3
- package/dist/lu/vat.js +2 -8
- package/dist/lu/vat.js.map +1 -1
- package/dist/luhn.d.ts +2 -3
- package/dist/luhn.js +9 -9
- package/dist/luhn.js.map +1 -1
- package/dist/lv/mod.d.ts +3 -2
- package/dist/lv/vat.d.ts +2 -3
- package/dist/lv/vat.js +19 -18
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +2 -3
- package/dist/ma/ice.js +2 -11
- package/dist/ma/ice.js.map +1 -1
- package/dist/ma/mod.d.ts +3 -2
- package/dist/mc/mod.d.ts +3 -2
- package/dist/mc/tva.d.ts +2 -3
- package/dist/mc/tva.js +1 -0
- package/dist/mc/tva.js.map +1 -1
- package/dist/md/idno.d.ts +2 -3
- package/dist/md/idno.js +1 -10
- package/dist/md/idno.js.map +1 -1
- package/dist/md/mod.d.ts +3 -2
- package/dist/me/mod.d.ts +3 -2
- package/dist/me/pib.d.ts +2 -3
- package/dist/me/pib.js +2 -10
- package/dist/me/pib.js.map +1 -1
- package/dist/mk/edb.d.ts +2 -3
- package/dist/mk/edb.js +2 -11
- package/dist/mk/edb.js.map +1 -1
- package/dist/mk/mod.d.ts +3 -2
- package/dist/mt/mod.d.ts +3 -2
- package/dist/mt/vat.d.ts +2 -3
- 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/mu/mod.d.ts +3 -2
- package/dist/mx/clabe.d.ts +2 -3
- package/dist/mx/clabe.js +1 -14
- package/dist/mx/clabe.js.map +1 -1
- package/dist/mx/curp.d.ts +5 -4
- package/dist/mx/curp.js +27 -19
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/mod.d.ts +3 -2
- package/dist/mx/rfc.d.ts +5 -4
- package/dist/mx/rfc.js +23 -20
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/mod.d.ts +3 -2
- package/dist/my/nric.d.ts +5 -4
- package/dist/my/nric.js +18 -16
- package/dist/my/nric.js.map +1 -1
- package/dist/ng/mod.d.ts +3 -2
- 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/mod.d.ts +3 -2
- package/dist/ni/ruc.d.ts +2 -3
- package/dist/ni/ruc.js +1 -23
- package/dist/ni/ruc.js.map +1 -1
- package/dist/nl/bsn.d.ts +2 -3
- 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/mod.d.ts +3 -2
- package/dist/nl/vat.d.ts +2 -3
- package/dist/nl/vat.js +4 -50
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +2 -3
- package/dist/no/fodselsnummer.js +3 -10
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mod.d.ts +3 -2
- package/dist/no/mva.d.ts +2 -3
- package/dist/no/mva.js +1 -8
- package/dist/no/mva.js.map +1 -1
- package/dist/no/orgnr.d.ts +2 -3
- package/dist/no/orgnr.js +2 -8
- package/dist/no/orgnr.js.map +1 -1
- package/dist/nz/ird.d.ts +2 -3
- package/dist/nz/ird.js +4 -13
- package/dist/nz/ird.js.map +1 -1
- package/dist/nz/mod.d.ts +3 -2
- package/dist/pa/mod.d.ts +3 -2
- package/dist/pa/ruc.d.ts +2 -3
- package/dist/pa/ruc.js +4 -19
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +8 -10
- package/dist/patterns.js +83 -28
- package/dist/patterns.js.map +1 -1
- package/dist/pe/mod.d.ts +3 -2
- package/dist/pe/ruc.d.ts +2 -3
- package/dist/pe/ruc.js +10 -24
- package/dist/pe/ruc.js.map +1 -1
- package/dist/ph/mod.d.ts +3 -2
- 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/pk/mod.d.ts +3 -2
- package/dist/pl/mod.d.ts +3 -2
- package/dist/pl/nip.d.ts +2 -3
- package/dist/pl/nip.js +2 -10
- package/dist/pl/nip.js.map +1 -1
- package/dist/pl/pesel.d.ts +2 -3
- package/dist/pl/pesel.js +4 -13
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +2 -3
- package/dist/pl/regon.js +2 -11
- package/dist/pl/regon.js.map +1 -1
- package/dist/pt/cc.d.ts +2 -3
- package/dist/pt/cc.js +7 -13
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/mod.d.ts +3 -2
- package/dist/pt/vat.d.ts +2 -3
- package/dist/pt/vat.js +3 -11
- package/dist/pt/vat.js.map +1 -1
- package/dist/ro/cnp.d.ts +2 -3
- package/dist/ro/cnp.js +5 -14
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/mod.d.ts +3 -2
- package/dist/ro/vat.d.ts +2 -3
- package/dist/ro/vat.js +13 -11
- package/dist/ro/vat.js.map +1 -1
- package/dist/rs/mod.d.ts +3 -2
- package/dist/rs/pib.d.ts +2 -3
- package/dist/rs/pib.js +1 -9
- package/dist/rs/pib.js.map +1 -1
- package/dist/ru/inn.d.ts +2 -3
- package/dist/ru/inn.js +2 -12
- package/dist/ru/inn.js.map +1 -1
- package/dist/ru/mod.d.ts +3 -2
- package/dist/se/mod.d.ts +3 -2
- package/dist/se/orgnr.d.ts +2 -3
- package/dist/se/orgnr.js +2 -9
- package/dist/se/orgnr.js.map +1 -1
- package/dist/se/personnummer.d.ts +2 -3
- package/dist/se/personnummer.js +8 -15
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +2 -3
- package/dist/se/vat.js +3 -10
- package/dist/se/vat.js.map +1 -1
- package/dist/sg/mod.d.ts +3 -2
- package/dist/sg/uen.d.ts +2 -3
- package/dist/sg/uen.js +47 -70
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +2 -3
- package/dist/si/emso.js +12 -14
- package/dist/si/emso.js.map +1 -1
- package/dist/si/mod.d.ts +3 -2
- package/dist/si/vat.d.ts +2 -3
- package/dist/si/vat.js +3 -12
- package/dist/si/vat.js.map +1 -1
- package/dist/sk/dic.d.ts +2 -3
- package/dist/sk/dic.js +1 -0
- package/dist/sk/dic.js.map +1 -1
- package/dist/sk/ico.d.ts +2 -3
- package/dist/sk/ico.js +1 -0
- package/dist/sk/ico.js.map +1 -1
- package/dist/sk/mod.d.ts +3 -2
- package/dist/sk/rc.d.ts +4 -5
- package/dist/sk/rc.js +6 -2
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/mod.d.ts +3 -2
- package/dist/th/tin.d.ts +2 -3
- package/dist/th/tin.js +1 -11
- package/dist/th/tin.js.map +1 -1
- package/dist/tr/mod.d.ts +3 -2
- package/dist/tr/tckimlik.d.ts +2 -3
- package/dist/tr/tckimlik.js +1 -20
- package/dist/tr/tckimlik.js.map +1 -1
- package/dist/tr/vkn.d.ts +2 -3
- package/dist/tr/vkn.js +1 -20
- package/dist/tr/vkn.js.map +1 -1
- package/dist/tw/mod.d.ts +3 -2
- package/dist/tw/ubn.d.ts +2 -3
- package/dist/tw/ubn.js +2 -12
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +56 -21
- package/dist/ua/edrpou.d.ts +2 -3
- package/dist/ua/edrpou.js +5 -12
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/ua/mod.d.ts +3 -2
- package/dist/us/ein.d.ts +12 -2
- package/dist/us/ein.js +88 -97
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.d.ts +13 -2
- package/dist/us/itin.js +4 -15
- package/dist/us/itin.js.map +1 -1
- package/dist/us/mod.d.ts +3 -2
- package/dist/us/rtn.d.ts +2 -3
- package/dist/us/rtn.js +11 -23
- 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/mod.d.ts +3 -2
- package/dist/uy/rut.d.ts +2 -3
- package/dist/uy/rut.js +2 -15
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/mod.d.ts +3 -2
- package/dist/ve/rif.d.ts +2 -3
- package/dist/ve/rif.js +13 -26
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mod.d.ts +3 -2
- package/dist/vn/mst.d.ts +2 -3
- package/dist/vn/mst.js +1 -12
- package/dist/vn/mst.js.map +1 -1
- package/dist/za/idnr.d.ts +2 -3
- package/dist/za/idnr.js +4 -16
- package/dist/za/idnr.js.map +1 -1
- package/dist/za/mod.d.ts +3 -2
- package/package.json +34 -21
- package/src/_checksums/mod1110.ts +1 -1
- package/src/_checksums/mod112.ts +7 -6
- package/src/_util/generate.ts +38 -0
- package/src/ad/nrt.ts +19 -7
- 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 +9 -5
- package/src/ar/cuit.ts +22 -10
- 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 +62 -12
- 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 +9 -3
- package/src/ba/jmbg.ts +9 -7
- package/src/bd/nid.ts +11 -7
- 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 +19 -10
- package/src/bg/pnf.ts +7 -3
- package/src/bg/vat.ts +8 -3
- package/src/bh/cpr.ts +17 -4
- package/src/bic.ts +26 -20
- package/src/br/cnpj.ts +7 -3
- package/src/br/cpf.ts +7 -3
- package/src/by/unp.ts +19 -9
- package/src/bz/tin.ts +19 -4
- 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 +11 -5
- package/src/cn/ric.ts +11 -7
- package/src/cn/uscc.ts +27 -11
- package/src/co/nit.ts +14 -6
- package/src/cr/cpf.ts +11 -6
- package/src/creditcard.ts +10 -6
- package/src/cu/ni.ts +28 -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 +61 -29
- package/src/de/handelsreg.ts +21 -6
- package/src/de/idnr.ts +10 -3
- package/src/de/stnr.ts +11 -3
- package/src/de/svnr.ts +14 -5
- package/src/de/vat.ts +7 -3
- package/src/dk/cpr.ts +23 -8
- package/src/dk/cvr.ts +7 -3
- package/src/dk/vat.ts +8 -3
- package/src/do/rnc.ts +9 -5
- package/src/ec/ruc.ts +9 -5
- package/src/ee/ik.ts +21 -10
- package/src/ee/registrikood.ts +12 -7
- package/src/ee/vat.ts +7 -3
- package/src/eg/tn.ts +7 -3
- package/src/es/cif.ts +10 -7
- package/src/es/dni.ts +7 -3
- package/src/es/nie.ts +18 -9
- package/src/es/nss.ts +7 -3
- package/src/es/vat.ts +13 -5
- package/src/eu/vat.ts +55 -6
- package/src/fi/hetu.ts +26 -8
- 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 +9 -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 +18 -13
- package/src/gb/sedol.ts +21 -15
- 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 +11 -6
- package/src/gr/amka.ts +7 -3
- package/src/gr/vat.ts +7 -3
- package/src/gt/nit.ts +13 -6
- package/src/hk/hkid.ts +9 -4
- 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 +10 -4
- package/src/in/pan.ts +15 -6
- package/src/index.ts +6 -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 +17 -7
- package/src/it/codicefiscale.ts +49 -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 +27 -8
- package/src/kw/civil.ts +31 -14
- package/src/kz/iin.ts +9 -8
- package/src/lei.ts +7 -3
- package/src/li/peid.ts +7 -3
- package/src/lk/nic.ts +31 -8
- 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 +10 -3
- package/src/lv/vat.ts +53 -23
- 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 +47 -10
- package/src/mx/rfc.ts +42 -7
- package/src/my/nric.ts +33 -8
- 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 +18 -69
- package/src/no/fodselsnummer.ts +12 -7
- package/src/no/mva.ts +9 -5
- package/src/no/orgnr.ts +7 -3
- package/src/nz/ird.ts +12 -8
- package/src/pa/ruc.ts +39 -11
- package/src/patterns.ts +184 -46
- package/src/pe/ruc.ts +13 -10
- package/src/ph/philid.ts +7 -3
- package/src/pk/cnic.ts +9 -3
- package/src/pl/nip.ts +7 -3
- package/src/pl/pesel.ts +9 -7
- package/src/pl/regon.ts +7 -3
- package/src/pt/cc.ts +13 -7
- package/src/pt/vat.ts +8 -3
- package/src/ro/cnp.ts +16 -8
- package/src/ro/vat.ts +8 -3
- package/src/rs/pib.ts +7 -3
- package/src/ru/inn.ts +9 -5
- package/src/se/orgnr.ts +7 -3
- package/src/se/personnummer.ts +35 -32
- package/src/se/vat.ts +8 -3
- package/src/sg/uen.ts +44 -23
- package/src/si/emso.ts +37 -11
- 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 +17 -4
- 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 +9 -5
- package/src/types.ts +69 -7
- package/src/ua/edrpou.ts +10 -5
- package/src/us/ein.ts +95 -91
- package/src/us/itin.ts +14 -11
- package/src/us/rtn.ts +32 -19
- package/src/us/ssn.ts +7 -3
- package/src/uy/rut.ts +9 -5
- package/src/ve/rif.ts +19 -12
- package/src/vn/mst.ts +7 -3
- package/src/za/idnr.ts +9 -7
package/dist/lk/nic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nic.js","names":[],"sources":["../../src/lk/nic.ts"],"sourcesContent":["/**\n * NIC (National Identity Card, ජාතික හැඳුනුම්පත).\n *\n * Sri Lankan personal identity number. Two formats:\n * Old (pre-2016): 9 digits + V or X (10 chars)\n * New (2016+): 12 digits\n *\n * Both encode birth date (day-of-year), gender, a\n * serial number, and a check digit.\n *\n * @see https://en.wikipedia.org/wiki/National_identification_number#Sri_Lanka\n * @see https://drp.gov.lk/Templates/Artical%20-%20English%20new%20number.html\n */\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport {
|
|
1
|
+
{"version":3,"file":"nic.js","names":[],"sources":["../../src/lk/nic.ts"],"sourcesContent":["/**\n * NIC (National Identity Card, ජාතික හැඳුනුම්පත).\n *\n * Sri Lankan personal identity number. Two formats:\n * Old (pre-2016): 9 digits + V or X (10 chars)\n * New (2016+): 12 digits\n *\n * Both encode birth date (day-of-year), gender, a\n * serial number, and a check digit.\n *\n * @see https://en.wikipedia.org/wiki/National_identification_number#Sri_Lanka\n * @see https://drp.gov.lk/Templates/Artical%20-%20English%20new%20number.html\n */\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\n/** Old format: 9 digits + V or X (case-insensitive). */\nconst OLD_RE = /^\\d{9}[VvXx]$/;\n\n/** New format: exactly 12 digits. */\nconst NEW_RE = /^\\d{12}$/;\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\n/**\n * Convert an old-format NIC to the 12-digit new\n * format for uniform validation.\n *\n * Old: YY DDD SSS C V/X (10 chars)\n * New: 19YY DDD 0SSS C (12 digits)\n */\nconst toNewFormat = (v: string): string => {\n const yy = v.slice(0, 2);\n const ddd = v.slice(2, 5);\n const sss = v.slice(5, 8);\n const check = v[8];\n return `19${yy}${ddd}0${sss}${check}`;\n};\n\n/**\n * Checksum weights for the first 11 digits.\n * Algorithm: weighted sum mod 11, then mod 10\n * if >= 10.\n */\nconst CHECK_WEIGHTS = [\n 8, 4, 3, 2, 7, 6, 5, 7, 4, 3, 2,\n] as const;\n\nconst checkDigit = (digits: string): number => {\n let sum = 0;\n for (let i = 0; i < 11; i++) {\n sum +=\n (CHECK_WEIGHTS[i] ?? 0) * Number(digits.charAt(i));\n }\n const d = 11 - (sum % 11);\n return d > 9 ? d % 10 : d;\n};\n\n/**\n * Resolve birth date and gender from the 12-digit\n * normalised form (YYYY DDD ...).\n *\n * Day-of-year encoding:\n * Male: 1–366\n * Female: 501–866 (subtract 500)\n */\nconst resolveBirthInfo = (\n v: string,\n): {\n year: number;\n month: number;\n day: number;\n gender: \"male\" | \"female\";\n} | null => {\n const year = Number(v.slice(0, 4));\n let days = Number(v.slice(4, 7));\n\n const gender: \"male\" | \"female\" =\n days > 500 ? \"female\" : \"male\";\n if (days > 500) days -= 500;\n\n if (days < 1 || days > 366) return null;\n\n // Convert day-of-year to month/day via Date\n const d = new Date(year, 0, days);\n const month = d.getMonth() + 1;\n const dayOfMonth = d.getDate();\n\n if (!isValidDate(year, month, dayOfMonth)) {\n return null;\n }\n\n // Guard against day 366 in non-leap years\n if (d.getFullYear() !== year) return null;\n\n return { year, month, day: dayOfMonth, gender };\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n const isOld = OLD_RE.test(v);\n const isNew = NEW_RE.test(v);\n\n if (!isOld && !isNew) {\n if (v.length !== 10 && v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"NIC must be 10 (old) or 12 (new) characters\",\n );\n }\n return err(\n \"INVALID_FORMAT\",\n \"NIC must be 9 digits + V/X (old) or\" +\n \" 12 digits (new)\",\n );\n }\n\n const normalized = isOld ? toNewFormat(v) : v;\n\n if (!isdigits(normalized)) {\n return err(\n \"INVALID_FORMAT\",\n \"NIC contains invalid characters\",\n );\n }\n\n if (resolveBirthInfo(normalized) === null) {\n return err(\n \"INVALID_COMPONENT\",\n \"NIC contains an invalid date of birth\",\n );\n }\n\n const expected = checkDigit(normalized.slice(0, 11));\n if (expected !== Number(normalized[11])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"NIC 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 // Old format: YYDDDSSSXV → no standard separator\n // New format: YYYYDDDSSSSC → no standard separator\n return v;\n};\n\n/**\n * Extract birth date and gender from an NIC.\n * Returns null if the value is not valid.\n */\nconst parse = (value: string): ParsedPersonId | null => {\n const result = validate(value);\n if (!result.valid) return null;\n\n const v = result.compact;\n const isOld = OLD_RE.test(v);\n const normalized = isOld ? toNewFormat(v) : v;\n\n const info = resolveBirthInfo(normalized);\n if (info === null) return null;\n\n return {\n birthDate: new Date(\n info.year,\n info.month - 1,\n info.day,\n ),\n gender: info.gender,\n };\n};\n\n/** Generate a random valid Sri Lankan NIC. */\nconst generate = (): string => {\n const year = randomInt(1950, 2024);\n const start = new Date(year, 0, 1);\n const end = new Date(year, 11, 31);\n const maxDay =\n Math.round(\n (end.getTime() - start.getTime()) / 86_400_000,\n ) + 1;\n const dayOfYear = randomInt(1, maxDay);\n const genderOffset = Math.random() < 0.5 ? 0 : 500;\n const ddd = String(dayOfYear + genderOffset).padStart(\n 3,\n \"0\",\n );\n const body = `${year}${ddd}0${randomDigits(3)}`;\n return `${body}${String(checkDigit(body))}`;\n};\n\n/** Sri Lankan National Identity Card. */\nconst nic: CountryValidator<\"LK\", ParsedPersonId> = {\n name: \"National Identity Card\",\n localName: \"ජාතික හැඳුනුම්පත\",\n abbreviation: \"NIC\",\n aliases: [\"NIC\", \"ජාතික හැඳුනුම්පත\"] as const,\n candidatePattern: \"\\\\d{9}[VXvx]|\\\\d{12}\",\n scope: \"country\",\n country: \"LK\",\n entityType: \"person\",\n description:\n \"Sri Lankan personal identity number issued to\" +\n \" all citizens\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/\" +\n \"National_identification_number#Sri_Lanka\",\n lengths: [10, 12] as const,\n examples: [\"197819202757\", \"862348753V\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default nic;\nexport { compact, format, generate, parse, validate };\n"],"mappings":";;;;;;;AA2BA,MAAM,SAAS;;AAGf,MAAM,SAAS;AAEf,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,EAAE,YAAY;;;;;;;;AASjC,MAAM,eAAe,MAAsB;CAKzC,OAAO,KAJI,EAAE,MAAM,GAAG,CAIT,IAHD,EAAE,MAAM,GAAG,CAGJ,EAAE,GAFT,EAAE,MAAM,GAAG,CAEG,IADZ,EAAE;AAElB;;;;;;AAOA,MAAM,gBAAgB;CACpB;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAChC;AAEA,MAAM,cAAc,WAA2B;CAC7C,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,QACG,cAAc,MAAM,KAAK,OAAO,OAAO,OAAO,CAAC,CAAC;CAErD,MAAM,IAAI,KAAM,MAAM;CACtB,OAAO,IAAI,IAAI,IAAI,KAAK;AAC1B;;;;;;;;;AAUA,MAAM,oBACJ,MAMU;CACV,MAAM,OAAO,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CACjC,IAAI,OAAO,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAE/B,MAAM,SACJ,OAAO,MAAM,WAAW;CAC1B,IAAI,OAAO,KAAK,QAAQ;CAExB,IAAI,OAAO,KAAK,OAAO,KAAK,OAAO;CAGnC,MAAM,IAAI,IAAI,KAAK,MAAM,GAAG,IAAI;CAChC,MAAM,QAAQ,EAAE,SAAS,IAAI;CAC7B,MAAM,aAAa,EAAE,QAAQ;CAE7B,IAAI,CAAC,YAAY,MAAM,OAAO,UAAU,GACtC,OAAO;CAIT,IAAI,EAAE,YAAY,MAAM,MAAM,OAAO;CAErC,OAAO;EAAE;EAAM;EAAO,KAAK;EAAY;CAAO;AAChD;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,MAAM,QAAQ,OAAO,KAAK,CAAC;CAC3B,MAAM,QAAQ,OAAO,KAAK,CAAC;CAE3B,IAAI,CAAC,SAAS,CAAC,OAAO;EACpB,IAAI,EAAE,WAAW,MAAM,EAAE,WAAW,IAClC,OAAO,IACL,kBACA,6CACF;EAEF,OAAO,IACL,kBACA,qDAEF;CACF;CAEA,MAAM,aAAa,QAAQ,YAAY,CAAC,IAAI;CAE5C,IAAI,CAAC,SAAS,UAAU,GACtB,OAAO,IACL,kBACA,iCACF;CAGF,IAAI,iBAAiB,UAAU,MAAM,MACnC,OAAO,IACL,qBACA,uCACF;CAIF,IADiB,WAAW,WAAW,MAAM,GAAG,EAAE,CACvC,MAAM,OAAO,WAAW,GAAG,GACpC,OAAO,IACL,oBACA,gCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CAIxC,OAHU,QAAQ,KAGX;AACT;;;;;AAMA,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,KAAK;CAC7B,IAAI,CAAC,OAAO,OAAO,OAAO;CAE1B,MAAM,IAAI,OAAO;CAIjB,MAAM,OAAO,iBAHC,OAAO,KAAK,CACH,IAAI,YAAY,CAAC,IAAI,CAEJ;CACxC,IAAI,SAAS,MAAM,OAAO;CAE1B,OAAO;EACL,WAAW,IAAI,KACb,KAAK,MACL,KAAK,QAAQ,GACb,KAAK,GACP;EACA,QAAQ,KAAK;CACf;AACF;;AAGA,MAAM,iBAAyB;CAC7B,MAAM,OAAO,UAAU,MAAM,IAAI;CACjC,MAAM,QAAQ,IAAI,KAAK,MAAM,GAAG,CAAC;CACjC,MAAM,MAAM,IAAI,KAAK,MAAM,IAAI,EAAE;CAKjC,MAAM,YAAY,UAAU,GAH1B,KAAK,OACF,IAAI,QAAQ,IAAI,MAAM,QAAQ,KAAK,KACtC,IAAI,CAC+B;CAMrC,MAAM,OAAO,GAAG,OAJJ,OAAO,aADE,KAAK,OAAO,IAAI,KAAM,IAAI,IACJ,EAAE,SAC3C,GACA,GAEuB,EAAE,GAAG,aAAa,CAAC;CAC5C,OAAO,GAAG,OAAO,OAAO,WAAW,IAAI,CAAC;AAC1C;;AAGA,MAAM,MAA8C;CAClD,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,kBAAkB;CACnC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CAEF,WACE;CAEF,SAAS,CAAC,IAAI,EAAE;CAChB,UAAU,CAAC,gBAAgB,YAAY;CACvC;CACA;CACA;CACA;CACA;AACF"}
|
package/dist/lt/asmens.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/lt/asmens.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Lithuanian personal code. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Lithuanian Personal Code. */
|
|
11
|
-
declare const asmens:
|
|
10
|
+
declare const asmens: CountryValidator<"LT">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, asmens as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=asmens.d.ts.map
|
package/dist/lt/asmens.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { isValidDate } from "../_util/date.js";
|
|
2
3
|
import { randomInt } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
5
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { isValidDate } from "../_util/date.js";
|
|
6
6
|
import { twoPassCheck } from "../ee/ik.js";
|
|
7
7
|
//#region src/lt/asmens.ts
|
|
8
8
|
/**
|
|
@@ -66,6 +66,7 @@ const asmens = {
|
|
|
66
66
|
abbreviation: "AK",
|
|
67
67
|
aliases: ["asmens kodas", "AK"],
|
|
68
68
|
candidatePattern: "[3-6]\\d{10}",
|
|
69
|
+
scope: "country",
|
|
69
70
|
country: "LT",
|
|
70
71
|
entityType: "person",
|
|
71
72
|
sourceUrl: "https://www.registrucentras.lt/",
|
package/dist/lt/asmens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asmens.js","names":[],"sources":["../../src/lt/asmens.ts"],"sourcesContent":["/**\n * Asmens kodas (Personal Code).\n *\n * Lithuanian personal identification number. 11 digits\n * with the same structure as the Estonian Isikukood:\n * gender/century digit, YYMMDD, 3-digit serial, and\n * a two-pass weighted checksum.\n *\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/lithuania-tin.pdf\n * @see https://www.registrucentras.lt/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"asmens.js","names":[],"sources":["../../src/lt/asmens.ts"],"sourcesContent":["/**\n * Asmens kodas (Personal Code).\n *\n * Lithuanian personal identification number. 11 digits\n * with the same structure as the Estonian Isikukood:\n * gender/century digit, YYMMDD, 3-digit serial, and\n * a two-pass weighted checksum.\n *\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/lithuania-tin.pdf\n * @see https://www.registrucentras.lt/\n */\n\nimport { twoPassCheck } from \"../ee/ik\";\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Asmens kodas must be exactly 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Asmens kodas must contain only digits\",\n );\n }\n\n const g = Number(v[0]);\n if (g < 1 || g > 9) {\n return err(\n \"INVALID_COMPONENT\",\n \"Asmens kodas gender/century digit is invalid\",\n );\n }\n\n // Digit 9 indicates a special case where the birth\n // date is not encoded; skip date validation.\n if (g !== 9) {\n const centuryMap: Record<number, number> = {\n 1: 1800,\n 2: 1800,\n 3: 1900,\n 4: 1900,\n 5: 2000,\n 6: 2000,\n 7: 2100,\n 8: 2100,\n };\n const century = centuryMap[g] ?? 1900;\n const yy = Number(v.slice(1, 3));\n const mm = Number(v.slice(3, 5));\n const dd = Number(v.slice(5, 7));\n const year = century + yy;\n\n if (!isValidDate(year, mm, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Asmens kodas contains an invalid date\",\n );\n }\n }\n\n const check = twoPassCheck(v.slice(0, 10));\n if (check !== Number(v[10])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Asmens kodas check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Lithuanian personal code. */\nconst generate = (): string => {\n for (;;) {\n const g = String(randomInt(3, 6));\n const yy = String(randomInt(0, 99)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n const dd = String(randomInt(1, 28)).padStart(2, \"0\");\n const s = String(randomInt(0, 999)).padStart(3, \"0\");\n const payload = g + yy + mm + dd + s;\n const c = payload + String(twoPassCheck(payload));\n if (validate(c).valid) return c;\n }\n};\n\n/** Lithuanian Personal Code. */\nconst asmens: CountryValidator<\"LT\"> = {\n name: \"Lithuanian Personal ID\",\n localName: \"Asmens kodas\",\n abbreviation: \"AK\",\n aliases: [\"asmens kodas\", \"AK\"] as const,\n candidatePattern: \"[3-6]\\\\d{10}\",\n scope: \"country\",\n country: \"LT\",\n entityType: \"person\",\n sourceUrl: \"https://www.registrucentras.lt/\",\n examples: [\"33309240064\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default asmens;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAwBA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,wCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,uCACF;CAGF,MAAM,IAAI,OAAO,EAAE,EAAE;CACrB,IAAI,IAAI,KAAK,IAAI,GACf,OAAO,IACL,qBACA,8CACF;CAKF,IAAI,MAAM,GAAG;EAWX,MAAM,UAAU;GATd,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;EAEoB,EAAE,MAAM;EACjC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;EAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;EAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;EAG/B,IAAI,CAAC,YAFQ,UAAU,IAEA,IAAI,EAAE,GAC3B,OAAO,IACL,qBACA,uCACF;CAEJ;CAGA,IADc,aAAa,EAAE,MAAM,GAAG,EAAE,CAChC,MAAM,OAAO,EAAE,GAAG,GACxB,OAAO,IACL,oBACA,yCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,OAAO,UAAU,GAAG,CAAC,CAAC;EAChC,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,IAAI,OAAO,UAAU,GAAG,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,UAAU,IAAI,KAAK,KAAK,KAAK;EACnC,MAAM,IAAI,UAAU,OAAO,aAAa,OAAO,CAAC;EAChD,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,SAAiC;CACrC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,gBAAgB,IAAI;CAC9B,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
|
package/dist/lt/mod.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import asmens from "./asmens.js";
|
|
3
2
|
import vat from "./vat.js";
|
|
4
3
|
|
|
5
4
|
//#region src/lt/mod.d.ts
|
|
6
|
-
|
|
5
|
+
declare namespace mod_d_exports {
|
|
6
|
+
export { asmens, vat };
|
|
7
|
+
}
|
|
7
8
|
//#endregion
|
|
8
9
|
export { asmens, mod_d_exports, vat };
|
|
9
10
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/lt/vat.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/lt/vat.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Lithuanian VAT number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Lithuanian VAT Number. */
|
|
11
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"LT">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, vat as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/lt/vat.js
CHANGED
|
@@ -3,16 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/lt/vat.ts
|
|
6
|
-
/**
|
|
7
|
-
* PVM kodas (Lithuanian VAT number).
|
|
8
|
-
*
|
|
9
|
-
* 9 or 12 digits. 9-digit: d[7] must be 1.
|
|
10
|
-
* 12-digit: d[10] must be 1. Weighted checksum
|
|
11
|
-
* with fallback weights.
|
|
12
|
-
*
|
|
13
|
-
* @see https://www.vatify.eu/lithuania-vat-number.html
|
|
14
|
-
* @see https://www.vmi.lt/
|
|
15
|
-
*/
|
|
16
6
|
const compact = (value) => {
|
|
17
7
|
let v = clean(value, " -/.");
|
|
18
8
|
if (v.startsWith("LT") || v.startsWith("lt")) v = v.slice(2);
|
|
@@ -57,9 +47,11 @@ const vat = {
|
|
|
57
47
|
abbreviation: "PVM kodas",
|
|
58
48
|
aliases: ["PVM mokėtojo kodas", "PVM"],
|
|
59
49
|
candidatePattern: "LT\\d{9,12}",
|
|
50
|
+
scope: "country",
|
|
60
51
|
country: "LT",
|
|
61
52
|
entityType: "any",
|
|
62
53
|
sourceUrl: "https://www.vmi.lt/",
|
|
54
|
+
lengths: [9, 12],
|
|
63
55
|
examples: ["119511515", "100001919017"],
|
|
64
56
|
compact,
|
|
65
57
|
format,
|
package/dist/lt/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/lt/vat.ts"],"sourcesContent":["/**\n * PVM kodas (Lithuanian VAT number).\n *\n * 9 or 12 digits. 9-digit: d[7] must be 1.\n * 12-digit: d[10] must be 1. Weighted checksum\n * with fallback weights.\n *\n * @see https://www.vatify.eu/lithuania-vat-number.html\n * @see https://www.vmi.lt/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/lt/vat.ts"],"sourcesContent":["/**\n * PVM kodas (Lithuanian VAT number).\n *\n * 9 or 12 digits. 9-digit: d[7] must be 1.\n * 12-digit: d[10] must be 1. Weighted checksum\n * with fallback weights.\n *\n * @see https://www.vatify.eu/lithuania-vat-number.html\n * @see https://www.vmi.lt/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"LT\") || v.startsWith(\"lt\")) {\n v = v.slice(2);\n }\n return v;\n};\n\nconst checksum = (v: string): boolean => {\n const n = v.length;\n let check = 0;\n for (let i = 0; i < n - 1; i++) {\n check += (1 + (i % 9)) * Number(v[i]);\n }\n check %= 11;\n if (check === 10) {\n check = 0;\n for (let i = 0; i < n - 1; i++) {\n check += (1 + ((i + 2) % 9)) * Number(v[i]);\n }\n check %= 11;\n }\n return check % 10 === Number(v[n - 1]);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9 && v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"Lithuanian VAT number must be 9 or 12 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Lithuanian VAT number must contain only digits\",\n );\n }\n // Check the marker digit\n if (v.length === 9 && v[7] !== \"1\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Lithuanian 9-digit VAT: digit 8 must be 1\",\n );\n }\n if (v.length === 12 && v[10] !== \"1\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Lithuanian 12-digit VAT: digit 11 must be 1\",\n );\n }\n if (!checksum(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Lithuanian VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `LT${compact(value)}`;\n\n/** Generate a random valid Lithuanian VAT number. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Lithuanian VAT Number. */\nconst vat: CountryValidator<\"LT\"> = {\n name: \"Lithuanian VAT Number\",\n localName: \"PVM mokėtojo kodas\",\n abbreviation: \"PVM kodas\",\n aliases: [\"PVM mokėtojo kodas\", \"PVM\"] as const,\n candidatePattern: \"LT\\\\d{9,12}\",\n scope: \"country\",\n country: \"LT\",\n entityType: \"any\",\n sourceUrl: \"https://www.vmi.lt/\",\n lengths: [9, 12] as const,\n examples: [\"119511515\", \"100001919017\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAqBA,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,MAAuB;CACvC,MAAM,IAAI,EAAE;CACZ,IAAI,QAAQ;CACZ,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,KACzB,UAAU,IAAK,IAAI,KAAM,OAAO,EAAE,EAAE;CAEtC,SAAS;CACT,IAAI,UAAU,IAAI;EAChB,QAAQ;EACR,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,KACzB,UAAU,KAAM,IAAI,KAAK,KAAM,OAAO,EAAE,EAAE;EAE5C,SAAS;CACX;CACA,OAAO,QAAQ,OAAO,OAAO,EAAE,IAAI,EAAE;AACvC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,KAAK,EAAE,WAAW,IACjC,OAAO,IACL,kBACA,8CACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,gDACF;CAGF,IAAI,EAAE,WAAW,KAAK,EAAE,OAAO,KAC7B,OAAO,IACL,qBACA,2CACF;CAEF,IAAI,EAAE,WAAW,MAAM,EAAE,QAAQ,KAC/B,OAAO,IACL,qBACA,6CACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,oBACA,4CACF;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,CAAC,sBAAsB,KAAK;CACrC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,SAAS,CAAC,GAAG,EAAE;CACf,UAAU,CAAC,aAAa,cAAc;CACtC;CACA;CACA;CACA;AACF"}
|
package/dist/lu/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import vat from "./vat.js";
|
|
3
2
|
|
|
4
3
|
//#region src/lu/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { vat };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, vat };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/lu/vat.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/lu/vat.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Luxembourg VAT number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Luxembourg VAT Number. */
|
|
11
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"LU">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, vat as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/lu/vat.js
CHANGED
|
@@ -3,14 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/lu/vat.ts
|
|
6
|
-
/**
|
|
7
|
-
* TVA (Luxembourg VAT number).
|
|
8
|
-
*
|
|
9
|
-
* 8 digits. First 6 digits mod 89 === last 2 digits.
|
|
10
|
-
*
|
|
11
|
-
* @see https://www.vatify.eu/luxembourg-vat-number.html
|
|
12
|
-
* @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/luxembourg-tin.pdf
|
|
13
|
-
*/
|
|
14
6
|
const compact = (value) => {
|
|
15
7
|
let v = clean(value, " -/.");
|
|
16
8
|
if (v.startsWith("LU") || v.startsWith("lu")) v = v.slice(2);
|
|
@@ -41,9 +33,11 @@ const vat = {
|
|
|
41
33
|
abbreviation: "TVA",
|
|
42
34
|
aliases: ["TVA", "numéro d'identification TVA"],
|
|
43
35
|
candidatePattern: "LU\\d{8}",
|
|
36
|
+
scope: "country",
|
|
44
37
|
country: "LU",
|
|
45
38
|
entityType: "company",
|
|
46
39
|
sourceUrl: "https://pfi.public.lu/",
|
|
40
|
+
lengths: [8],
|
|
47
41
|
examples: ["15027442"],
|
|
48
42
|
compact,
|
|
49
43
|
format,
|
package/dist/lu/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/lu/vat.ts"],"sourcesContent":["/**\n * TVA (Luxembourg VAT number).\n *\n * 8 digits. First 6 digits mod 89 === last 2 digits.\n *\n * @see https://www.vatify.eu/luxembourg-vat-number.html\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/luxembourg-tin.pdf\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/lu/vat.ts"],"sourcesContent":["/**\n * TVA (Luxembourg VAT number).\n *\n * 8 digits. First 6 digits mod 89 === last 2 digits.\n *\n * @see https://www.vatify.eu/luxembourg-vat-number.html\n * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/luxembourg-tin.pdf\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"LU\") || v.startsWith(\"lu\")) {\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 !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"Luxembourg VAT number must be 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Luxembourg VAT number must contain only digits\",\n );\n }\n const front = Number.parseInt(v.slice(0, 6), 10);\n const check = Number.parseInt(v.slice(6, 8), 10);\n if (front % 89 !== check) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Luxembourg VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `LU${compact(value)}`;\n\n/** Generate a random valid Luxembourg VAT number. */\nconst generate = (): string => {\n const body = randomDigits(6);\n return (\n body +\n String(Number.parseInt(body, 10) % 89).padStart(2, \"0\")\n );\n};\n\n/** Luxembourg VAT Number. */\nconst vat: CountryValidator<\"LU\"> = {\n name: \"Luxembourg VAT Number\",\n localName: \"Numéro de TVA\",\n abbreviation: \"TVA\",\n aliases: [\"TVA\", \"numéro d'identification TVA\"] as const,\n candidatePattern: \"LU\\\\d{8}\",\n scope: \"country\",\n country: \"LU\",\n entityType: \"company\",\n sourceUrl: \"https://pfi.public.lu/\",\n lengths: [8] as const,\n examples: [\"15027442\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAmBA,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,wCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,gDACF;CAEF,MAAM,QAAQ,OAAO,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;CAC/C,MAAM,QAAQ,OAAO,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;CAC/C,IAAI,QAAQ,OAAO,OACjB,OAAO,IACL,oBACA,4CACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAC7B,MAAM,OAAO,aAAa,CAAC;CAC3B,OACE,OACA,OAAO,OAAO,SAAS,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,GAAG,GAAG;AAE1D;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,6BAA6B;CAC9C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,UAAU;CACrB;CACA;CACA;CACA;AACF"}
|
package/dist/luhn.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GlobalValidator, ValidateResult } from "./types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/luhn.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
@@ -11,7 +10,7 @@ declare const format: (value: string) => string;
|
|
|
11
10
|
*/
|
|
12
11
|
declare const generate: (length?: number) => string;
|
|
13
12
|
/** Generic Luhn Validator. */
|
|
14
|
-
declare const luhn:
|
|
13
|
+
declare const luhn: GlobalValidator;
|
|
15
14
|
//#endregion
|
|
16
15
|
export { compact, luhn as default, format, generate, validate };
|
|
17
16
|
//# sourceMappingURL=luhn.d.ts.map
|
package/dist/luhn.js
CHANGED
|
@@ -1,17 +1,9 @@
|
|
|
1
|
+
import { luhnChecksum, luhnValidate } from "./_checksums/luhn.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
|
-
import { luhnChecksum, luhnValidate } from "./_checksums/luhn.js";
|
|
5
5
|
import { isdigits } from "./_util/strings.js";
|
|
6
6
|
//#region src/luhn.ts
|
|
7
|
-
/**
|
|
8
|
-
* Generic Luhn checksum validation.
|
|
9
|
-
*
|
|
10
|
-
* Validates any digit string using the Luhn
|
|
11
|
-
* algorithm (ISO/IEC 7812-1). No length
|
|
12
|
-
* restriction. For credit card validation
|
|
13
|
-
* (13-19 digits), use `creditcard` instead.
|
|
14
|
-
*/
|
|
15
7
|
const compact = (value) => clean(value, " -.");
|
|
16
8
|
const validate = (value) => {
|
|
17
9
|
const v = compact(value);
|
|
@@ -35,10 +27,18 @@ const generate = (length = 16) => {
|
|
|
35
27
|
};
|
|
36
28
|
/** Generic Luhn Validator. */
|
|
37
29
|
const luhn = {
|
|
30
|
+
scope: "global",
|
|
38
31
|
name: "Luhn",
|
|
39
32
|
localName: "Luhn",
|
|
40
33
|
abbreviation: "Luhn",
|
|
34
|
+
aliases: [
|
|
35
|
+
"Luhn",
|
|
36
|
+
"Luhn algorithm",
|
|
37
|
+
"mod 10"
|
|
38
|
+
],
|
|
39
|
+
candidatePattern: "\\d{2,}",
|
|
41
40
|
entityType: "any",
|
|
41
|
+
sourceUrl: "https://en.wikipedia.org/wiki/Luhn_algorithm",
|
|
42
42
|
examples: ["4111111111111111", "18"],
|
|
43
43
|
compact,
|
|
44
44
|
format,
|
package/dist/luhn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"luhn.js","names":[],"sources":["../src/luhn.ts"],"sourcesContent":["/**\n * Generic Luhn checksum validation.\n *\n * Validates any digit string using the Luhn\n * algorithm (ISO/IEC 7812-1). No length\n * restriction. For credit card validation\n * (13-19 digits), use `creditcard` instead.\n */\n\nimport {\n luhnChecksum,\n luhnValidate,\n} from \"#checksums/luhn\";\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":"luhn.js","names":[],"sources":["../src/luhn.ts"],"sourcesContent":["/**\n * Generic Luhn checksum validation.\n *\n * Validates any digit string using the Luhn\n * algorithm (ISO/IEC 7812-1). No length\n * restriction. For credit card validation\n * (13-19 digits), use `creditcard` instead.\n */\n\nimport type {\n ValidateResult,\n GlobalValidator,\n} from \"./types\";\n\nimport {\n luhnChecksum,\n luhnValidate,\n} from \"#checksums/luhn\";\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 < 1) {\n return err(\"INVALID_LENGTH\", \"Value must not be empty\");\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Value must contain only digits\",\n );\n }\n if (!luhnValidate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Luhn check digit does not match\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/**\n * Generate a random Luhn-valid number of the\n * given length (default 16).\n */\nconst generate = (length = 16): string => {\n const payload = randomDigits(length - 1);\n const partial = `${payload}0`;\n const remainder = luhnChecksum(partial);\n const check = (10 - remainder) % 10;\n return `${payload}${String(check)}`;\n};\n\n/** Generic Luhn Validator. */\nconst luhn: GlobalValidator = {\n scope: \"global\",\n name: \"Luhn\",\n localName: \"Luhn\",\n abbreviation: \"Luhn\",\n aliases: [\"Luhn\", \"Luhn algorithm\", \"mod 10\"] as const,\n candidatePattern: \"\\\\d{2,}\",\n entityType: \"any\",\n sourceUrl: \"https://en.wikipedia.org/wiki/Luhn_algorithm\",\n examples: [\"4111111111111111\", \"18\"] as const,\n compact,\n format,\n validate,\n generate: () => generate(),\n};\n\nexport default luhn;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;AAuBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,SAAS,GACb,OAAO,IAAI,kBAAkB,yBAAyB;CAExD,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,gCACF;CAEF,IAAI,CAAC,aAAa,CAAC,GACjB,OAAO,IACL,oBACA,iCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;;;;AAMvD,MAAM,YAAY,SAAS,OAAe;CACxC,MAAM,UAAU,aAAa,SAAS,CAAC;CAGvC,MAAM,SAAS,KADG,aAAa,GADZ,QAAQ,EAEC,KAAK;CACjC,OAAO,GAAG,UAAU,OAAO,KAAK;AAClC;;AAGA,MAAM,OAAwB;CAC5B,OAAO;CACP,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EAAC;EAAQ;EAAkB;CAAQ;CAC5C,kBAAkB;CAClB,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,oBAAoB,IAAI;CACnC;CACA;CACA;CACA,gBAAgB,SAAS;AAC3B"}
|
package/dist/lv/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import vat from "./vat.js";
|
|
3
2
|
|
|
4
3
|
//#region src/lv/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { vat };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, vat };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/lv/vat.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/lv/vat.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Latvian VAT number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Latvian VAT Number. */
|
|
11
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"LV">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, vat as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/lv/vat.js
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
5
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
6
|
//#region src/lv/vat.ts
|
|
7
|
-
/**
|
|
8
|
-
* PVN (Latvian VAT number).
|
|
9
|
-
*
|
|
10
|
-
* 11 digits. Legal entities (first digit > 3):
|
|
11
|
-
* weights [9,1,4,8,3,10,2,5,7,6,1], sum % 11 === 3.
|
|
12
|
-
* Personal (first digit <= 3): 11-digit format only.
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.vatify.eu/latvia-vat-number.html
|
|
15
|
-
* @see https://www.vid.gov.lv/en
|
|
16
|
-
*/
|
|
17
7
|
const WEIGHTS = [
|
|
18
8
|
9,
|
|
19
9
|
1,
|
|
@@ -53,7 +43,9 @@ const validateBirthDate = (v) => {
|
|
|
53
43
|
const day = Number(v.slice(0, 2));
|
|
54
44
|
const month = Number(v.slice(2, 4));
|
|
55
45
|
const year2 = Number(v.slice(4, 6));
|
|
56
|
-
const
|
|
46
|
+
const century = Number(v[6]);
|
|
47
|
+
if (century < 0 || century > 2) return false;
|
|
48
|
+
const fullYear = 1800 + century * 100 + year2;
|
|
57
49
|
const date = new Date(fullYear, month - 1, day);
|
|
58
50
|
return date.getFullYear() === fullYear && date.getMonth() === month - 1 && date.getDate() === day;
|
|
59
51
|
};
|
|
@@ -61,10 +53,13 @@ const validate = (value) => {
|
|
|
61
53
|
const v = compact(value);
|
|
62
54
|
if (v.length !== 11) return err("INVALID_LENGTH", "Latvian VAT number must be 11 digits");
|
|
63
55
|
if (!isdigits(v)) return err("INVALID_FORMAT", "Latvian VAT number must contain only digits");
|
|
64
|
-
if (
|
|
56
|
+
if (v[0] === "3" && v[1] !== void 0 && v[1] >= "2" && v[1] <= "9") return {
|
|
57
|
+
valid: true,
|
|
58
|
+
compact: v
|
|
59
|
+
};
|
|
60
|
+
const first = v[0];
|
|
61
|
+
if (first === "4" || first === "5" || first === "9") {
|
|
65
62
|
if (weightedSum(v, WEIGHTS, 11) !== 3) return err("INVALID_CHECKSUM", "Latvian VAT number check digit mismatch");
|
|
66
|
-
} else if (v.startsWith("32")) {
|
|
67
|
-
if (!checkPersonal(v)) return err("INVALID_CHECKSUM", "Latvian personal code check digit mismatch");
|
|
68
63
|
} else {
|
|
69
64
|
if (!validateBirthDate(v)) return err("INVALID_COMPONENT", "Latvian personal code has invalid birth date");
|
|
70
65
|
if (!checkPersonal(v)) return err("INVALID_CHECKSUM", "Latvian personal code check digit mismatch");
|
|
@@ -77,8 +72,13 @@ const validate = (value) => {
|
|
|
77
72
|
const format = (value) => `LV${compact(value)}`;
|
|
78
73
|
/** Generate a random valid Latvian VAT number. */
|
|
79
74
|
const generate = () => {
|
|
75
|
+
const entityPrefixes = [
|
|
76
|
+
"4",
|
|
77
|
+
"5",
|
|
78
|
+
"9"
|
|
79
|
+
];
|
|
80
80
|
for (;;) {
|
|
81
|
-
const c =
|
|
81
|
+
const c = randomInt(0, 1) === 0 ? `3${randomInt(2, 9)}${randomDigits(9)}` : `${entityPrefixes[randomInt(0, entityPrefixes.length - 1)] ?? "4"}${randomDigits(10)}`;
|
|
82
82
|
if (validate(c).valid) return c;
|
|
83
83
|
}
|
|
84
84
|
};
|
|
@@ -89,10 +89,11 @@ const vat = {
|
|
|
89
89
|
abbreviation: "PVN",
|
|
90
90
|
aliases: ["PVN reģistrācijas numurs", "PVN"],
|
|
91
91
|
candidatePattern: "LV\\d{11}",
|
|
92
|
+
scope: "country",
|
|
92
93
|
country: "LV",
|
|
93
94
|
entityType: "any",
|
|
94
|
-
sourceUrl: "https://www.
|
|
95
|
-
examples: ["40003521600"],
|
|
95
|
+
sourceUrl: "https://www.pmlp.gov.lv/en/change-personal-identity-number",
|
|
96
|
+
examples: ["40003521600", "32999999999"],
|
|
96
97
|
compact,
|
|
97
98
|
format,
|
|
98
99
|
validate,
|
package/dist/lv/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/lv/vat.ts"],"sourcesContent":["/**\n * PVN (Latvian VAT number).\n *\n * 11 digits
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/lv/vat.ts"],"sourcesContent":["/**\n * PVN (Latvian VAT number).\n *\n * 11 digits.\n *\n * Individuals:\n * - legacy personal codes: DDMMYY + century digit 0/1/2 + 4 digits\n * - since 1 July 2017: codes start with 3, the second digit is 2-9,\n * and the remaining digits are random\n *\n * Entities:\n * - tax administration issued: 9XXXXXXXXXX\n * - enterprise register issued: 4XXXXXXXXXX / 5XXXXXXXXXX\n *\n * Canonical sources:\n * - OECD Latvia TIN sheet for the tax-facing formats\n * - PMLP page documenting the post-2017 personal code\n *\n * These are the reasons we accept the new personal\n * code shape (`3` + second digit `2-9`) without the\n * legacy birth-date checksum, and why we reject\n * legacy personal codes with century digits outside\n * 0/1/2.\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Latvia-TIN.pdf\n * @see https://www.pmlp.gov.lv/en/change-personal-identity-number\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, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [9, 1, 4, 8, 3, 10, 2, 5, 7, 6, 1];\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"LV\") || v.startsWith(\"lv\")) {\n v = v.slice(2);\n }\n return v;\n};\n\nconst PERS_WEIGHTS = [10, 5, 8, 4, 2, 1, 6, 3, 7, 9];\n\nconst checkPersonal = (v: string): boolean => {\n // Initial sum = 1 (not 0), so can't use\n // weightedSum directly\n let sum = 1;\n for (let i = 0; i < 10; i++) {\n // SAFETY: both arrays are length 10+\n // eslint-disable-next-line no-non-null-assertion\n sum += PERS_WEIGHTS[i]! * Number(v[i]);\n }\n return (sum % 11) % 10 === Number(v[10]);\n};\n\nconst validateBirthDate = (v: string): boolean => {\n const day = Number(v.slice(0, 2));\n const month = Number(v.slice(2, 4));\n const year2 = Number(v.slice(4, 6));\n const century = Number(v[6]);\n if (century < 0 || century > 2) {\n return false;\n }\n const fullYear = 1800 + century * 100 + year2;\n const date = new Date(fullYear, month - 1, day);\n return (\n date.getFullYear() === fullYear &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n );\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Latvian VAT number must be 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Latvian VAT number must contain only digits\",\n );\n }\n if (\n v[0] === \"3\" &&\n v[1] !== undefined &&\n v[1] >= \"2\" &&\n v[1] <= \"9\"\n ) {\n // Since 1 July 2017, new personal codes start with 3\n // and are syntactic identifiers only.\n return { valid: true, compact: v };\n }\n\n const first = v[0];\n if (first === \"4\" || first === \"5\" || first === \"9\") {\n const sum = weightedSum(v, WEIGHTS, 11);\n if (sum !== 3) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Latvian VAT number check digit mismatch\",\n );\n }\n } else {\n // Old-format personal code: first 6 digits encode\n // birth date as DDMMYY, digit 7 encodes century\n if (!validateBirthDate(v)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Latvian personal code has invalid birth date\",\n );\n }\n if (!checkPersonal(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Latvian personal code check digit mismatch\",\n );\n }\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `LV${compact(value)}`;\n\n/** Generate a random valid Latvian VAT number. */\nconst generate = (): string => {\n const entityPrefixes = [\"4\", \"5\", \"9\"] as const;\n for (;;) {\n const c =\n randomInt(0, 1) === 0\n ? `3${randomInt(2, 9)}${randomDigits(9)}`\n : `${entityPrefixes[randomInt(0, entityPrefixes.length - 1)] ?? \"4\"}${randomDigits(10)}`;\n if (validate(c).valid) return c;\n }\n};\n\n/** Latvian VAT Number. */\nconst vat: CountryValidator<\"LV\"> = {\n name: \"Latvian VAT Number\",\n localName: \"PVN reģistrācijas numurs\",\n abbreviation: \"PVN\",\n aliases: [\"PVN reģistrācijas numurs\", \"PVN\"] as const,\n candidatePattern: \"LV\\\\d{11}\",\n scope: \"country\",\n country: \"LV\",\n entityType: \"any\",\n sourceUrl:\n \"https://www.pmlp.gov.lv/en/change-personal-identity-number\",\n examples: [\"40003521600\", \"32999999999\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAuCA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;AAAC;AAEjD,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,eAAe;CAAC;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEnD,MAAM,iBAAiB,MAAuB;CAG5C,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAGtB,OAAO,aAAa,KAAM,OAAO,EAAE,EAAE;CAEvC,OAAQ,MAAM,KAAM,OAAO,OAAO,EAAE,GAAG;AACzC;AAEA,MAAM,qBAAqB,MAAuB;CAChD,MAAM,MAAM,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAChC,MAAM,QAAQ,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAClC,MAAM,QAAQ,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAClC,MAAM,UAAU,OAAO,EAAE,EAAE;CAC3B,IAAI,UAAU,KAAK,UAAU,GAC3B,OAAO;CAET,MAAM,WAAW,OAAO,UAAU,MAAM;CACxC,MAAM,OAAO,IAAI,KAAK,UAAU,QAAQ,GAAG,GAAG;CAC9C,OACE,KAAK,YAAY,MAAM,YACvB,KAAK,SAAS,MAAM,QAAQ,KAC5B,KAAK,QAAQ,MAAM;AAEvB;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,IACE,EAAE,OAAO,OACT,EAAE,OAAO,KAAA,KACT,EAAE,MAAM,OACR,EAAE,MAAM,KAIR,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;CAGnC,MAAM,QAAQ,EAAE;CAChB,IAAI,UAAU,OAAO,UAAU,OAAO,UAAU;MAClC,YAAY,GAAG,SAAS,EAC9B,MAAM,GACV,OAAO,IACL,oBACA,yCACF;CAAA,OAEG;EAGL,IAAI,CAAC,kBAAkB,CAAC,GACtB,OAAO,IACL,qBACA,8CACF;EAEF,IAAI,CAAC,cAAc,CAAC,GAClB,OAAO,IACL,oBACA,4CACF;CAEJ;CACA,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAC7B,MAAM,iBAAiB;EAAC;EAAK;EAAK;CAAG;CACrC,SAAS;EACP,MAAM,IACJ,UAAU,GAAG,CAAC,MAAM,IAChB,IAAI,UAAU,GAAG,CAAC,IAAI,aAAa,CAAC,MACpC,GAAG,eAAe,UAAU,GAAG,eAAe,SAAS,CAAC,MAAM,MAAM,aAAa,EAAE;EACzF,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,4BAA4B,KAAK;CAC3C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,eAAe,aAAa;CACvC;CACA;CACA;CACA;AACF"}
|
package/dist/ma/ice.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/ma/ice.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Moroccan ICE. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Moroccan Company Identification Number. */
|
|
11
|
-
declare const ice:
|
|
10
|
+
declare const ice: CountryValidator<"MA">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, ice as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=ice.d.ts.map
|
package/dist/ma/ice.js
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
|
+
import { mod97 } from "../_checksums/mod97.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 { mod97 } from "../_checksums/mod97.js";
|
|
6
6
|
//#region src/ma/ice.ts
|
|
7
|
-
/**
|
|
8
|
-
* ICE (Identifiant Commun de l'Entreprise).
|
|
9
|
-
*
|
|
10
|
-
* Moroccan company identification number. 15 digits:
|
|
11
|
-
* 9 enterprise digits + 4 establishment digits +
|
|
12
|
-
* 2 check digits. Uses Mod 97-10 checksum
|
|
13
|
-
* (full number mod 97 must equal 0).
|
|
14
|
-
*
|
|
15
|
-
* @see https://www.ice.gov.ma/
|
|
16
|
-
*/
|
|
17
7
|
const compact = (value) => clean(value, " ");
|
|
18
8
|
const validate = (value) => {
|
|
19
9
|
const v = compact(value);
|
|
@@ -40,6 +30,7 @@ const ice = {
|
|
|
40
30
|
abbreviation: "ICE",
|
|
41
31
|
aliases: ["ICE", "Identifiant Commun de l'Entreprise"],
|
|
42
32
|
candidatePattern: "\\d{15}",
|
|
33
|
+
scope: "country",
|
|
43
34
|
country: "MA",
|
|
44
35
|
entityType: "company",
|
|
45
36
|
compact,
|
package/dist/ma/ice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ice.js","names":[],"sources":["../../src/ma/ice.ts"],"sourcesContent":["/**\n * ICE (Identifiant Commun de l'Entreprise).\n *\n * Moroccan company identification number. 15 digits:\n * 9 enterprise digits + 4 establishment digits +\n * 2 check digits. Uses Mod 97-10 checksum\n * (full number mod 97 must equal 0).\n *\n * @see https://www.ice.gov.ma/\n */\n\nimport { mod97 } from \"#checksums/mod97\";\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":"ice.js","names":[],"sources":["../../src/ma/ice.ts"],"sourcesContent":["/**\n * ICE (Identifiant Commun de l'Entreprise).\n *\n * Moroccan company identification number. 15 digits:\n * 9 enterprise digits + 4 establishment digits +\n * 2 check digits. Uses Mod 97-10 checksum\n * (full number mod 97 must equal 0).\n *\n * @see https://www.ice.gov.ma/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { mod97 } from \"#checksums/mod97\";\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 !== 15) {\n return err(\n \"INVALID_LENGTH\",\n \"Moroccan ICE must be exactly 15 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Moroccan ICE must contain only digits\",\n );\n }\n if (mod97(v) !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Moroccan ICE check digits mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Moroccan ICE. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(15);\n if (validate(c).valid) return c;\n }\n};\n\n/** Moroccan Company Identification Number. */\nconst ice: CountryValidator<\"MA\"> = {\n name: \"Moroccan Company Identification Number\",\n localName: \"Identifiant Commun de l'Entreprise\",\n abbreviation: \"ICE\",\n aliases: [\n \"ICE\",\n \"Identifiant Commun de l'Entreprise\",\n ] as const,\n candidatePattern: \"\\\\d{15}\",\n scope: \"country\",\n country: \"MA\",\n entityType: \"company\",\n compact,\n format,\n validate,\n description: \"Moroccan common enterprise identifier\",\n sourceUrl: \"https://www.ice.gov.ma/\",\n lengths: [15] as const,\n examples: [\"001561191000066\", \"002136093000040\"] as const,\n generate,\n};\n\nexport default ice;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAsBA,MAAM,WAAW,UACf,MAAM,OAAO,GAAG;AAElB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,wCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,uCACF;CAEF,IAAI,MAAM,CAAC,MAAM,GACf,OAAO,IACL,oBACA,oCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,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,CACP,OACA,oCACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ;CACA;CACA;CACA,aAAa;CACb,WAAW;CACX,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,mBAAmB,iBAAiB;CAC/C;AACF"}
|
package/dist/ma/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import ice from "./ice.js";
|
|
3
2
|
|
|
4
3
|
//#region src/ma/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { ice };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { ice, mod_d_exports };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/mc/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import tva from "./tva.js";
|
|
3
2
|
|
|
4
3
|
//#region src/mc/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { tva };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, tva };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|