@stll/stdnum 0.0.1 → 1.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/mod112.js +5 -5
- package/dist/_checksums/mod112.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/ad/mod.d.ts +3 -2
- package/dist/ad/nrt.js +3 -2
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +0 -1
- package/dist/ae/mod.d.ts +3 -2
- package/dist/ai/mod.d.ts +3 -2
- package/dist/al/mod.d.ts +3 -2
- package/dist/am/mod.d.ts +3 -2
- package/dist/ar/cbu.d.ts +0 -1
- package/dist/ar/cbu.js +1 -1
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +0 -1
- package/dist/ar/cuit.js +12 -12
- package/dist/ar/cuit.js.map +1 -1
- package/dist/ar/mod.d.ts +3 -2
- package/dist/at/mod.d.ts +3 -2
- package/dist/at/tin.d.ts +0 -1
- package/dist/at/uid.d.ts +0 -1
- package/dist/at/vnr.d.ts +3 -2
- package/dist/at/vnr.js +20 -3
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +0 -1
- package/dist/au/acn.d.ts +0 -1
- package/dist/au/mod.d.ts +3 -2
- package/dist/au/tfn.d.ts +0 -1
- package/dist/az/mod.d.ts +3 -2
- package/dist/az/voen.d.ts +0 -1
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +1 -2
- package/dist/ba/jmbg.js +1 -0
- 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.js +10 -11
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +0 -1
- package/dist/be/mod.d.ts +3 -2
- package/dist/be/nn.d.ts +0 -1
- package/dist/be/vat.d.ts +0 -1
- package/dist/bg/egn.d.ts +1 -2
- package/dist/bg/egn.js +10 -3
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/mod.d.ts +3 -2
- package/dist/bg/pnf.d.ts +0 -1
- package/dist/bg/vat.d.ts +0 -1
- package/dist/bh/cpr.d.ts +3 -2
- package/dist/bh/cpr.js +8 -2
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bh/mod.d.ts +3 -2
- package/dist/bic.js +13 -15
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +0 -1
- package/dist/br/cpf.d.ts +0 -1
- package/dist/br/mod.d.ts +3 -2
- package/dist/by/mod.d.ts +3 -2
- package/dist/by/unp.d.ts +0 -1
- package/dist/by/unp.js +6 -3
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/mod.d.ts +3 -2
- package/dist/bz/tin.d.ts +3 -2
- package/dist/bz/tin.js +9 -1
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +0 -1
- package/dist/ca/mod.d.ts +3 -2
- package/dist/ca/sin.d.ts +0 -1
- package/dist/ch/mod.d.ts +3 -2
- package/dist/ch/ssn.d.ts +0 -1
- package/dist/ch/uid.d.ts +0 -1
- package/dist/ch/vat.d.ts +0 -1
- package/dist/cl/mod.d.ts +3 -2
- package/dist/cl/rut.d.ts +0 -1
- package/dist/cl/rut.js +1 -1
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/mod.d.ts +3 -2
- package/dist/cn/ric.d.ts +1 -2
- package/dist/cn/ric.js +1 -0
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +0 -1
- package/dist/cn/uscc.js +7 -6
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/mod.d.ts +3 -2
- package/dist/co/nit.d.ts +0 -1
- package/dist/co/nit.js +4 -1
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.js +4 -3
- package/dist/cr/cpf.js.map +1 -1
- package/dist/cr/mod.d.ts +3 -2
- package/dist/creditcard.d.ts +0 -1
- package/dist/cu/mod.d.ts +3 -2
- package/dist/cu/ni.d.ts +4 -3
- package/dist/cu/ni.js +11 -1
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/mod.d.ts +3 -2
- package/dist/cy/vat.d.ts +0 -1
- package/dist/cz/dic.d.ts +0 -1
- package/dist/cz/ico.d.ts +0 -1
- package/dist/cz/mod.d.ts +3 -2
- package/dist/cz/rc.d.ts +1 -2
- package/dist/cz/rc.js +33 -8
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.js +9 -9
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +0 -1
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/mod.d.ts +3 -2
- package/dist/de/stnr.d.ts +0 -1
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +0 -1
- package/dist/de/svnr.js +2 -2
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +0 -1
- package/dist/dk/cpr.d.ts +4 -3
- package/dist/dk/cpr.js +12 -2
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +0 -1
- package/dist/dk/mod.d.ts +3 -2
- package/dist/dk/vat.d.ts +0 -1
- package/dist/do/mod.d.ts +3 -2
- package/dist/do/rnc.d.ts +0 -1
- package/dist/do/rnc.js +1 -1
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/mod.d.ts +3 -2
- package/dist/ec/ruc.d.ts +0 -1
- package/dist/ec/ruc.js +1 -1
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +1 -2
- package/dist/ee/ik.js +12 -4
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/mod.d.ts +3 -2
- package/dist/ee/registrikood.d.ts +0 -1
- package/dist/ee/registrikood.js +8 -7
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +0 -1
- package/dist/eg/mod.d.ts +3 -2
- package/dist/es/cif.d.ts +0 -1
- package/dist/es/cif.js +2 -2
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +0 -1
- package/dist/es/mod.d.ts +3 -2
- package/dist/es/nie.d.ts +0 -1
- package/dist/es/nie.js +13 -13
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +0 -1
- package/dist/es/vat.d.ts +0 -1
- package/dist/eu/mod.d.ts +3 -2
- package/dist/eu/vat.d.ts +3 -2
- package/dist/eu/vat.js +43 -2
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +4 -3
- package/dist/fi/hetu.js +17 -2
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/mod.d.ts +3 -2
- package/dist/fi/vat.d.ts +0 -1
- package/dist/fi/ytunnus.d.ts +0 -1
- package/dist/fr/mod.d.ts +3 -2
- package/dist/fr/nif.d.ts +0 -1
- package/dist/fr/nir.d.ts +1 -2
- package/dist/fr/nir.js +1 -0
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +0 -1
- package/dist/fr/siret.d.ts +0 -1
- package/dist/fr/tva.d.ts +0 -1
- package/dist/gb/mod.d.ts +3 -2
- package/dist/gb/nino.js +7 -7
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +0 -1
- package/dist/gb/sedol.js +8 -7
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +0 -1
- package/dist/gb/vat.d.ts +0 -1
- package/dist/ge/mod.d.ts +3 -2
- package/dist/gh/mod.d.ts +3 -2
- package/dist/gh/tin.d.ts +0 -1
- package/dist/gh/tin.js +9 -9
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +0 -1
- package/dist/gr/mod.d.ts +3 -2
- package/dist/gr/vat.d.ts +0 -1
- package/dist/gt/mod.d.ts +3 -2
- package/dist/gt/nit.d.ts +0 -1
- package/dist/gt/nit.js +5 -2
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +0 -1
- package/dist/hk/hkid.js +1 -0
- 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 +0 -1
- package/dist/hu/mod.d.ts +3 -2
- package/dist/hu/vat.d.ts +0 -1
- package/dist/iban.d.ts +0 -1
- package/dist/id/mod.d.ts +3 -2
- package/dist/id/npwp.d.ts +0 -1
- package/dist/ie/mod.d.ts +3 -2
- package/dist/ie/pps.d.ts +0 -1
- package/dist/ie/vat.d.ts +0 -1
- package/dist/il/idnr.d.ts +0 -1
- package/dist/il/mod.d.ts +3 -2
- package/dist/in/aadhaar.d.ts +0 -1
- package/dist/in/gstin.d.ts +0 -1
- package/dist/in/gstin.js +3 -1
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/mod.d.ts +3 -2
- package/dist/in/pan.js +2 -2
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/iq/mod.d.ts +3 -2
- package/dist/ir/mod.d.ts +3 -2
- package/dist/ir/nid.d.ts +0 -1
- package/dist/is/kennitala.d.ts +0 -1
- package/dist/is/mod.d.ts +3 -2
- package/dist/isin.d.ts +0 -1
- package/dist/isin.js +9 -9
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +4 -3
- package/dist/it/codicefiscale.js +26 -2
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +0 -1
- package/dist/it/mod.d.ts +3 -2
- package/dist/jp/cn.d.ts +0 -1
- package/dist/jp/mod.d.ts +3 -2
- package/dist/jp/mynumber.d.ts +0 -1
- package/dist/kr/mod.d.ts +3 -2
- package/dist/kr/rrn.d.ts +4 -3
- package/dist/kr/rrn.js +13 -2
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +6 -5
- package/dist/kw/civil.js +18 -3
- package/dist/kw/civil.js.map +1 -1
- package/dist/kw/mod.d.ts +3 -2
- package/dist/kz/iin.d.ts +1 -2
- package/dist/kz/iin.js +1 -0
- package/dist/kz/iin.js.map +1 -1
- package/dist/kz/mod.d.ts +3 -2
- package/dist/lei.d.ts +0 -1
- package/dist/li/mod.d.ts +3 -2
- package/dist/lk/mod.d.ts +3 -2
- package/dist/lk/nic.d.ts +4 -3
- package/dist/lk/nic.js +14 -2
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +0 -1
- package/dist/lt/mod.d.ts +3 -2
- package/dist/lt/vat.d.ts +0 -1
- package/dist/lu/mod.d.ts +3 -2
- package/dist/lu/vat.d.ts +0 -1
- package/dist/luhn.d.ts +0 -1
- package/dist/luhn.js +7 -0
- package/dist/luhn.js.map +1 -1
- package/dist/lv/mod.d.ts +3 -2
- package/dist/lv/vat.d.ts +0 -1
- package/dist/lv/vat.js +39 -12
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +0 -1
- package/dist/ma/mod.d.ts +3 -2
- package/dist/mc/mod.d.ts +3 -2
- package/dist/mc/tva.d.ts +0 -1
- package/dist/md/idno.d.ts +0 -1
- package/dist/md/mod.d.ts +3 -2
- package/dist/me/mod.d.ts +3 -2
- package/dist/me/pib.d.ts +0 -1
- package/dist/mk/edb.d.ts +0 -1
- package/dist/mk/mod.d.ts +3 -2
- package/dist/mt/mod.d.ts +3 -2
- package/dist/mt/vat.d.ts +0 -1
- package/dist/mu/mod.d.ts +3 -2
- package/dist/mx/clabe.d.ts +0 -1
- package/dist/mx/curp.d.ts +4 -3
- package/dist/mx/curp.js +25 -3
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/mod.d.ts +3 -2
- package/dist/mx/rfc.d.ts +3 -2
- package/dist/mx/rfc.js +21 -2
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/mod.d.ts +3 -2
- package/dist/my/nric.d.ts +4 -3
- package/dist/my/nric.js +16 -2
- package/dist/my/nric.js.map +1 -1
- package/dist/ng/mod.d.ts +3 -2
- package/dist/ni/mod.d.ts +3 -2
- package/dist/ni/ruc.d.ts +0 -1
- package/dist/nl/bsn.d.ts +0 -1
- package/dist/nl/mod.d.ts +3 -2
- package/dist/nl/vat.d.ts +0 -1
- package/dist/nl/vat.js +9 -43
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +1 -2
- package/dist/no/fodselsnummer.js +1 -0
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mod.d.ts +3 -2
- package/dist/no/mva.d.ts +0 -1
- package/dist/no/orgnr.d.ts +0 -1
- package/dist/nz/ird.d.ts +0 -1
- package/dist/nz/ird.js +2 -2
- 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 +0 -1
- package/dist/pa/ruc.js +3 -1
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +1 -4
- package/dist/patterns.js +80 -23
- package/dist/patterns.js.map +1 -1
- package/dist/pe/mod.d.ts +3 -2
- package/dist/pe/ruc.d.ts +0 -1
- package/dist/pe/ruc.js +9 -9
- package/dist/pe/ruc.js.map +1 -1
- package/dist/ph/mod.d.ts +3 -2
- 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 +0 -1
- package/dist/pl/pesel.d.ts +1 -2
- package/dist/pl/pesel.js +1 -0
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +0 -1
- package/dist/pt/cc.d.ts +0 -1
- package/dist/pt/cc.js +6 -4
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/mod.d.ts +3 -2
- package/dist/pt/vat.d.ts +0 -1
- package/dist/ro/cnp.d.ts +1 -2
- package/dist/ro/cnp.js +1 -0
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/mod.d.ts +3 -2
- package/dist/ro/vat.d.ts +0 -1
- package/dist/rs/mod.d.ts +3 -2
- package/dist/rs/pib.d.ts +0 -1
- package/dist/ru/inn.d.ts +0 -1
- package/dist/ru/inn.js +1 -1
- 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 +0 -1
- package/dist/se/personnummer.d.ts +1 -2
- package/dist/se/personnummer.js +1 -0
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +0 -1
- package/dist/sg/mod.d.ts +3 -2
- package/dist/sg/uen.d.ts +0 -1
- package/dist/sg/uen.js +46 -55
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +1 -2
- package/dist/si/emso.js +17 -4
- package/dist/si/emso.js.map +1 -1
- package/dist/si/mod.d.ts +3 -2
- package/dist/si/vat.d.ts +0 -1
- package/dist/sk/dic.d.ts +0 -1
- package/dist/sk/ico.d.ts +0 -1
- package/dist/sk/mod.d.ts +3 -2
- package/dist/sk/rc.d.ts +4 -5
- package/dist/sk/rc.js +5 -2
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/mod.d.ts +3 -2
- package/dist/th/tin.d.ts +0 -1
- package/dist/tr/mod.d.ts +3 -2
- package/dist/tr/tckimlik.d.ts +0 -1
- package/dist/tr/vkn.d.ts +0 -1
- package/dist/tw/mod.d.ts +3 -2
- package/dist/tw/ubn.d.ts +0 -1
- package/dist/tw/ubn.js +1 -1
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +35 -22
- package/dist/ua/edrpou.d.ts +0 -1
- package/dist/ua/edrpou.js +4 -1
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/ua/mod.d.ts +3 -2
- package/dist/us/ein.js +87 -87
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.js +3 -4
- package/dist/us/itin.js.map +1 -1
- package/dist/us/mod.d.ts +3 -2
- package/dist/us/rtn.d.ts +0 -1
- package/dist/us/rtn.js +8 -5
- package/dist/us/rtn.js.map +1 -1
- package/dist/uy/mod.d.ts +3 -2
- package/dist/uy/rut.d.ts +0 -1
- package/dist/uy/rut.js +1 -1
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/mod.d.ts +3 -2
- package/dist/ve/rif.d.ts +0 -1
- package/dist/ve/rif.js +11 -11
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mod.d.ts +3 -2
- package/dist/vn/mst.d.ts +0 -1
- package/dist/za/idnr.d.ts +1 -2
- package/dist/za/idnr.js +1 -0
- package/dist/za/idnr.js.map +1 -1
- package/dist/za/mod.d.ts +3 -2
- package/package.json +18 -15
- package/src/_checksums/mod112.ts +7 -6
- package/src/_util/generate.ts +38 -0
- package/src/ad/nrt.ts +12 -4
- package/src/ar/cbu.ts +2 -2
- package/src/ar/cuit.ts +15 -7
- package/src/at/vnr.ts +26 -4
- package/src/az/voen.ts +2 -0
- package/src/ba/jmbg.ts +2 -1
- package/src/bd/nid.ts +4 -4
- package/src/bg/egn.ts +12 -4
- package/src/bh/cpr.ts +10 -1
- package/src/bic.ts +19 -17
- package/src/by/unp.ts +9 -4
- package/src/bz/tin.ts +12 -1
- package/src/cl/rut.ts +4 -2
- package/src/cn/ric.ts +4 -1
- package/src/cn/uscc.ts +20 -8
- package/src/co/nit.ts +6 -2
- package/src/cr/cpf.ts +4 -3
- package/src/cu/ni.ts +22 -2
- package/src/cz/rc.ts +54 -23
- package/src/de/handelsreg.ts +14 -3
- package/src/de/idnr.ts +3 -0
- package/src/de/stnr.ts +4 -0
- package/src/de/svnr.ts +7 -2
- package/src/dk/cpr.ts +16 -2
- package/src/do/rnc.ts +2 -2
- package/src/ec/ruc.ts +2 -2
- package/src/ee/ik.ts +14 -4
- package/src/ee/registrikood.ts +4 -3
- package/src/es/cif.ts +2 -3
- package/src/es/nie.ts +10 -5
- package/src/eu/vat.ts +46 -1
- package/src/fi/hetu.ts +19 -2
- package/src/fr/nir.ts +2 -1
- package/src/gb/nino.ts +11 -10
- package/src/gb/sedol.ts +14 -12
- package/src/gh/tin.ts +4 -3
- package/src/gt/nit.ts +6 -3
- package/src/hk/hkid.ts +2 -1
- package/src/in/gstin.ts +3 -1
- package/src/in/pan.ts +8 -3
- package/src/index.ts +3 -0
- package/src/isin.ts +10 -4
- package/src/it/codicefiscale.ts +40 -2
- package/src/kr/rrn.ts +20 -2
- package/src/kw/civil.ts +25 -9
- package/src/kz/iin.ts +2 -1
- package/src/lk/nic.ts +24 -2
- package/src/luhn.ts +3 -0
- package/src/lv/vat.ts +46 -20
- package/src/mx/curp.ts +41 -5
- package/src/mx/rfc.ts +35 -4
- package/src/my/nric.ts +26 -2
- package/src/nl/vat.ts +11 -66
- package/src/no/fodselsnummer.ts +2 -1
- package/src/nz/ird.ts +4 -4
- package/src/pa/ruc.ts +32 -8
- package/src/patterns.ts +135 -28
- package/src/pe/ruc.ts +6 -7
- package/src/pk/cnic.ts +2 -0
- package/src/pl/pesel.ts +2 -1
- package/src/pt/cc.ts +6 -4
- package/src/ro/cnp.ts +2 -1
- package/src/ru/inn.ts +2 -2
- package/src/se/personnummer.ts +2 -1
- package/src/sg/uen.ts +37 -20
- package/src/si/emso.ts +30 -5
- package/src/sk/rc.ts +13 -4
- package/src/tw/ubn.ts +2 -2
- package/src/types.ts +37 -6
- package/src/ua/edrpou.ts +3 -2
- package/src/us/ein.ts +88 -88
- package/src/us/itin.ts +7 -8
- package/src/us/rtn.ts +16 -11
- package/src/uy/rut.ts +2 -2
- package/src/ve/rif.ts +11 -6
- package/src/za/idnr.ts +2 -1
package/LICENSE
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026 stella labs, s.r.o
|
|
4
|
-
established under the laws of the Czech Republic, with its registered
|
|
5
|
-
office at Nad Porubkou 2355, Poruba, 708 00 Ostrava, Czech Republic,
|
|
6
|
-
Company ID (IČO): 24632872, registered in the Commercial Register
|
|
7
|
-
maintained by the Regional Court in Ostrava, Section C, File No. 103233.
|
|
3
|
+
Copyright (c) 2026 stella labs, s.r.o.
|
|
8
4
|
|
|
9
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
10
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
# @stll/stdnum
|
|
6
6
|
|
|
7
|
-
Validate, compact, and format standard
|
|
8
|
-
|
|
9
|
-
tree-shakeable.
|
|
7
|
+
Validate, compact, and format standard identifiers
|
|
8
|
+
for Node.js and Bun. Pure TypeScript, zero
|
|
9
|
+
dependencies, tree-shakeable per identifier.
|
|
10
|
+
|
|
11
|
+
This package covers 7 international identifiers and
|
|
12
|
+
96 countries through per-module entry points.
|
|
10
13
|
|
|
11
14
|
## Install
|
|
12
15
|
|
|
@@ -16,6 +19,9 @@ npm install @stll/stdnum
|
|
|
16
19
|
bun add @stll/stdnum
|
|
17
20
|
```
|
|
18
21
|
|
|
22
|
+
Tagged releases are published from GitHub Actions
|
|
23
|
+
with npm provenance enabled.
|
|
24
|
+
|
|
19
25
|
## Usage
|
|
20
26
|
|
|
21
27
|
```typescript
|
|
@@ -43,6 +49,23 @@ ico.validate("25596641");
|
|
|
43
49
|
iban.validate("CZ65 0800 0000 1920 0014 5399");
|
|
44
50
|
```
|
|
45
51
|
|
|
52
|
+
## Oracle Validation
|
|
53
|
+
|
|
54
|
+
The repo ships two oracle modes:
|
|
55
|
+
|
|
56
|
+
- `bun run oracle`
|
|
57
|
+
Runs the strict gate. It keeps only
|
|
58
|
+
high-confidence cross-checks that are stable enough
|
|
59
|
+
for CI.
|
|
60
|
+
- `bun run oracle:survey`
|
|
61
|
+
Runs the broader ecosystem survey. It includes
|
|
62
|
+
noisier third-party validators and mutation probes to
|
|
63
|
+
surface drift without treating every disagreement as a
|
|
64
|
+
release blocker.
|
|
65
|
+
|
|
66
|
+
Both commands accept `ORACLE_SAMPLES=<n>` to trade off
|
|
67
|
+
runtime against coverage.
|
|
68
|
+
|
|
46
69
|
## Supported Identifiers
|
|
47
70
|
|
|
48
71
|
### International
|
|
@@ -313,7 +336,8 @@ handled automatically.
|
|
|
313
336
|
|
|
314
337
|
```bash
|
|
315
338
|
bun install
|
|
316
|
-
bun
|
|
339
|
+
bun run typecheck
|
|
340
|
+
bun test
|
|
317
341
|
bun run lint # oxlint
|
|
318
342
|
bun run format # oxfmt
|
|
319
343
|
```
|
|
@@ -35,17 +35,17 @@ const CHECK_CHARS = "10X98765432";
|
|
|
35
35
|
*/
|
|
36
36
|
const mod112checkChar = (payload) => {
|
|
37
37
|
let sum = 0;
|
|
38
|
-
for (
|
|
39
|
-
return CHECK_CHARS[sum % 11];
|
|
38
|
+
for (const [i, weight] of WEIGHTS.entries()) sum += Number(payload[i]) * weight;
|
|
39
|
+
return CHECK_CHARS[sum % 11] ?? "";
|
|
40
40
|
};
|
|
41
41
|
/**
|
|
42
42
|
* Validate an 18-character string with a Mod 11,2
|
|
43
43
|
* check character (last char is 0-9 or X).
|
|
44
44
|
*/
|
|
45
45
|
const mod112validate = (value) => {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
return mod112checkChar(
|
|
46
|
+
const check = value[17]?.toUpperCase();
|
|
47
|
+
if (check === void 0) return false;
|
|
48
|
+
return mod112checkChar(value.slice(0, 17)) === check;
|
|
49
49
|
};
|
|
50
50
|
//#endregion
|
|
51
51
|
export { mod112checkChar, mod112validate };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod112.js","names":[],"sources":["../../src/_checksums/mod112.ts"],"sourcesContent":["/**\n * ISO 7064 Mod 11,2 check character algorithm.\n * Used by CN RIC (Resident Identity Card).\n *\n * Weights are powers of 2 modulo 11\n * (2^17 mod 11 ... 2^1 mod 11), applied\n * left-to-right across the 17-character payload.\n * The check character is looked up from\n * \"10X98765432\".\n */\n\nconst WEIGHTS = [\n 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,\n] as const;\n\nconst CHECK_CHARS = \"10X98765432\";\n\n/**\n * Compute the ISO 7064 Mod 11,2 check character\n * for a 17-character payload.\n */\nexport const mod112checkChar = (\n payload: string,\n): string => {\n let sum = 0;\n for (
|
|
1
|
+
{"version":3,"file":"mod112.js","names":[],"sources":["../../src/_checksums/mod112.ts"],"sourcesContent":["/**\n * ISO 7064 Mod 11,2 check character algorithm.\n * Used by CN RIC (Resident Identity Card).\n *\n * Weights are powers of 2 modulo 11\n * (2^17 mod 11 ... 2^1 mod 11), applied\n * left-to-right across the 17-character payload.\n * The check character is looked up from\n * \"10X98765432\".\n */\n\nconst WEIGHTS = [\n 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,\n] as const;\n\nconst CHECK_CHARS = \"10X98765432\";\n\n/**\n * Compute the ISO 7064 Mod 11,2 check character\n * for a 17-character payload.\n */\nexport const mod112checkChar = (\n payload: string,\n): string => {\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(payload[i]) * weight;\n }\n // SAFETY: sum % 11 is in 0..10 and CHECK_CHARS has 11 chars.\n return CHECK_CHARS[sum % 11] ?? \"\";\n};\n\n/**\n * Validate an 18-character string with a Mod 11,2\n * check character (last char is 0-9 or X).\n */\nexport const mod112validate = (value: string): boolean => {\n const check = value[17]?.toUpperCase();\n if (check === undefined) return false;\n return mod112checkChar(value.slice(0, 17)) === check;\n};\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,UAAU;CACd;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CACnD;AAED,MAAM,cAAc;;;;;AAMpB,MAAa,mBACX,YACW;CACX,IAAI,MAAM;AACV,MAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,SAAS,CACzC,QAAO,OAAO,QAAQ,GAAG,GAAG;AAG9B,QAAO,YAAY,MAAM,OAAO;;;;;;AAOlC,MAAa,kBAAkB,UAA2B;CACxD,MAAM,QAAQ,MAAM,KAAK,aAAa;AACtC,KAAI,UAAU,KAAA,EAAW,QAAO;AAChC,QAAO,gBAAgB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK"}
|
package/dist/_util/generate.d.ts
CHANGED
|
@@ -11,6 +11,18 @@ declare const randomDigits: (n: number) => string;
|
|
|
11
11
|
* (inclusive).
|
|
12
12
|
*/
|
|
13
13
|
declare const randomInt: (min: number, max: number) => number;
|
|
14
|
+
/**
|
|
15
|
+
* Pick a random element from a non-empty array.
|
|
16
|
+
* Throws if the array is empty so generators that
|
|
17
|
+
* declare a fixed pool fail loudly instead of
|
|
18
|
+
* returning `undefined`.
|
|
19
|
+
*/
|
|
20
|
+
declare const randomPick: <T>(values: readonly T[]) => T;
|
|
21
|
+
/**
|
|
22
|
+
* Pick a random character from a non-empty string.
|
|
23
|
+
* Same contract as `randomPick` for arrays.
|
|
24
|
+
*/
|
|
25
|
+
declare const randomChar: (chars: string) => string;
|
|
14
26
|
//#endregion
|
|
15
|
-
export { randomDigits, randomInt };
|
|
27
|
+
export { randomChar, randomDigits, randomInt, randomPick };
|
|
16
28
|
//# sourceMappingURL=generate.d.ts.map
|
package/dist/_util/generate.js
CHANGED
|
@@ -15,7 +15,29 @@ const randomDigits = (n) => {
|
|
|
15
15
|
* (inclusive).
|
|
16
16
|
*/
|
|
17
17
|
const randomInt = (min, max) => min + Math.floor(Math.random() * (max - min + 1));
|
|
18
|
+
/**
|
|
19
|
+
* Pick a random element from a non-empty array.
|
|
20
|
+
* Throws if the array is empty so generators that
|
|
21
|
+
* declare a fixed pool fail loudly instead of
|
|
22
|
+
* returning `undefined`.
|
|
23
|
+
*/
|
|
24
|
+
const randomPick = (values) => {
|
|
25
|
+
if (values.length === 0) throw new Error("randomPick called with empty array");
|
|
26
|
+
const value = values[randomInt(0, values.length - 1)];
|
|
27
|
+
if (value === void 0) throw new Error("randomPick produced undefined");
|
|
28
|
+
return value;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Pick a random character from a non-empty string.
|
|
32
|
+
* Same contract as `randomPick` for arrays.
|
|
33
|
+
*/
|
|
34
|
+
const randomChar = (chars) => {
|
|
35
|
+
if (chars.length === 0) throw new Error("randomChar called with empty string");
|
|
36
|
+
const ch = chars[randomInt(0, chars.length - 1)];
|
|
37
|
+
if (ch === void 0) throw new Error("randomChar produced undefined");
|
|
38
|
+
return ch;
|
|
39
|
+
};
|
|
18
40
|
//#endregion
|
|
19
|
-
export { randomDigits, randomInt };
|
|
41
|
+
export { randomChar, randomDigits, randomInt, randomPick };
|
|
20
42
|
|
|
21
43
|
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","names":[],"sources":["../../src/_util/generate.ts"],"sourcesContent":["/**\n * Helpers for generating random valid identifiers.\n * NOT cryptographically secure; use only for\n * testing, demos, and form placeholders.\n */\n\n/** Generate a string of n random decimal digits. */\nexport const randomDigits = (n: number): string => {\n let result = \"\";\n for (let i = 0; i < n; i++) {\n result += String(Math.floor(Math.random() * 10));\n }\n return result;\n};\n\n/**\n * Generate a random integer in [min, max]\n * (inclusive).\n */\nexport const randomInt = (\n min: number,\n max: number,\n): number =>\n min + Math.floor(Math.random() * (max - min + 1));\n"],"mappings":";;;;;;;AAOA,MAAa,gBAAgB,MAAsB;CACjD,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,WAAU,OAAO,KAAK,MAAM,KAAK,QAAQ,GAAG,GAAG,CAAC;AAElD,QAAO;;;;;;AAOT,MAAa,aACX,KACA,QAEA,MAAM,KAAK,MAAM,KAAK,QAAQ,IAAI,MAAM,MAAM,GAAG"}
|
|
1
|
+
{"version":3,"file":"generate.js","names":[],"sources":["../../src/_util/generate.ts"],"sourcesContent":["/**\n * Helpers for generating random valid identifiers.\n * NOT cryptographically secure; use only for\n * testing, demos, and form placeholders.\n */\n\n/** Generate a string of n random decimal digits. */\nexport const randomDigits = (n: number): string => {\n let result = \"\";\n for (let i = 0; i < n; i++) {\n result += String(Math.floor(Math.random() * 10));\n }\n return result;\n};\n\n/**\n * Generate a random integer in [min, max]\n * (inclusive).\n */\nexport const randomInt = (\n min: number,\n max: number,\n): number =>\n min + Math.floor(Math.random() * (max - min + 1));\n\n/**\n * Pick a random element from a non-empty array.\n * Throws if the array is empty so generators that\n * declare a fixed pool fail loudly instead of\n * returning `undefined`.\n */\nexport const randomPick = <T>(values: readonly T[]): T => {\n if (values.length === 0) {\n throw new Error(\"randomPick called with empty array\");\n }\n const idx = randomInt(0, values.length - 1);\n // SAFETY: idx is bounded by values.length and the\n // array is non-empty (checked above).\n const value = values[idx];\n if (value === undefined) {\n throw new Error(\"randomPick produced undefined\");\n }\n return value;\n};\n\n/**\n * Pick a random character from a non-empty string.\n * Same contract as `randomPick` for arrays.\n */\nexport const randomChar = (chars: string): string => {\n if (chars.length === 0) {\n throw new Error(\"randomChar called with empty string\");\n }\n const idx = randomInt(0, chars.length - 1);\n // SAFETY: idx is bounded by chars.length and the\n // string is non-empty (checked above).\n const ch = chars[idx];\n if (ch === undefined) {\n throw new Error(\"randomChar produced undefined\");\n }\n return ch;\n};\n"],"mappings":";;;;;;;AAOA,MAAa,gBAAgB,MAAsB;CACjD,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,WAAU,OAAO,KAAK,MAAM,KAAK,QAAQ,GAAG,GAAG,CAAC;AAElD,QAAO;;;;;;AAOT,MAAa,aACX,KACA,QAEA,MAAM,KAAK,MAAM,KAAK,QAAQ,IAAI,MAAM,MAAM,GAAG;;;;;;;AAQnD,MAAa,cAAiB,WAA4B;AACxD,KAAI,OAAO,WAAW,EACpB,OAAM,IAAI,MAAM,qCAAqC;CAKvD,MAAM,QAAQ,OAHF,UAAU,GAAG,OAAO,SAAS,EAAE;AAI3C,KAAI,UAAU,KAAA,EACZ,OAAM,IAAI,MAAM,gCAAgC;AAElD,QAAO;;;;;;AAOT,MAAa,cAAc,UAA0B;AACnD,KAAI,MAAM,WAAW,EACnB,OAAM,IAAI,MAAM,sCAAsC;CAKxD,MAAM,KAAK,MAHC,UAAU,GAAG,MAAM,SAAS,EAAE;AAI1C,KAAI,OAAO,KAAA,EACT,OAAM,IAAI,MAAM,gCAAgC;AAElD,QAAO"}
|
package/dist/ad/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import nrt from "./nrt.js";
|
|
3
2
|
|
|
4
3
|
//#region src/ad/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { nrt };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, nrt };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/ad/nrt.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
-
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
2
|
+
import { randomChar, randomDigits, randomInt } from "../_util/generate.js";
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/ad/nrt.ts
|
|
@@ -17,9 +17,10 @@ import { isdigits } from "../_util/strings.js";
|
|
|
17
17
|
*
|
|
18
18
|
* @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Andorra-TIN.pdf
|
|
19
19
|
*/
|
|
20
|
+
const NRT_PREFIXES = "CDEGOPU";
|
|
20
21
|
/** Generate a random valid Andorra NRT. */
|
|
21
22
|
const generate = () => {
|
|
22
|
-
return `${
|
|
23
|
+
return `${randomChar(NRT_PREFIXES)}${randomDigits(6)}${String.fromCodePoint(65 + randomInt(0, 25))}`;
|
|
23
24
|
};
|
|
24
25
|
const VALID_PREFIXES = "ACDEFGLOPU";
|
|
25
26
|
const compact = (value) => clean(value, " -.").toUpperCase().trim();
|
package/dist/ad/nrt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nrt.js","names":[],"sources":["../../src/ad/nrt.ts"],"sourcesContent":["/** Generate a random valid Andorra NRT. */\nconst generate = (): string => {\n const
|
|
1
|
+
{"version":3,"file":"nrt.js","names":[],"sources":["../../src/ad/nrt.ts"],"sourcesContent":["const NRT_PREFIXES = \"CDEGOPU\";\n\n/** Generate a random valid Andorra NRT. */\nconst generate = (): string => {\n const prefix = randomChar(NRT_PREFIXES);\n const digits = randomDigits(6);\n const suffix = String.fromCodePoint(\n 65 + randomInt(0, 25),\n );\n return `${prefix}${digits}${suffix}`;\n};\n\n/**\n * NRT (Número de Registre Tributari, Andorra tax number).\n *\n * The NRT identifies legal and natural entities for tax\n * purposes. It consists of one letter indicating entity\n * type, six digits, and a check letter.\n *\n * Entity type prefixes:\n * F — companies (digits <= 699999)\n * A, L — other entities (digits 700000-799999)\n * C, D, E, G, O, P, U — other types\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Andorra-TIN.pdf\n */\n\nimport { clean } from \"#util/clean\";\nimport {\n randomChar,\n randomDigits,\n randomInt,\n} from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst VALID_PREFIXES = \"ACDEFGLOPU\";\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").toUpperCase().trim();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"Andorra NRT must be 8 characters\",\n );\n }\n // SAFETY: v.length === 8 guarantees both positions\n // exist; oxlint cannot see the length guard.\n // eslint-disable-next-line no-non-null-assertion\n const prefix = v[0]!;\n // eslint-disable-next-line no-non-null-assertion\n const tail = v[7]!;\n const digits = v.slice(1, 7);\n if (!/^[A-Z]$/.test(prefix) || !/^[A-Z]$/.test(tail)) {\n return err(\n \"INVALID_FORMAT\",\n \"Andorra NRT must start and end with a letter\",\n );\n }\n if (!isdigits(digits)) {\n return err(\n \"INVALID_FORMAT\",\n \"Andorra NRT must have 6 digits in the middle\",\n );\n }\n if (!VALID_PREFIXES.includes(prefix)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Andorra NRT has an invalid entity type prefix\",\n );\n }\n if (prefix === \"F\" && digits > \"699999\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Andorra NRT F-type digits must be <= 699999\",\n );\n }\n if (\n (prefix === \"A\" || prefix === \"L\") &&\n !(\"699999\" < digits && digits < \"800000\")\n ) {\n return err(\n \"INVALID_COMPONENT\",\n \"Andorra NRT A/L-type digits must be 700000-799999\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v[0]}-${v.slice(1, 7)}-${v[7]}`;\n};\n\n/** Andorra NRT (Número de Registre Tributari). */\nconst nrt: Validator = {\n name: \"Andorra Tax Number\",\n localName: \"Número de Registre Tributari\",\n abbreviation: \"NRT\",\n aliases: [\"NRT\", \"Número de Registre Tributari\"] as const,\n candidatePattern: \"[A-Z]-?\\\\d{6}-?[A-Z]\",\n country: \"AD\",\n entityType: \"any\",\n sourceUrl:\n \"https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Andorra-TIN.pdf\",\n examples: [\"U132950X\", \"D059888N\", \"F123456M\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nrt;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,MAAM,eAAe;;AAGrB,MAAM,iBAAyB;AAM7B,QAAO,GALQ,WAAW,aAAa,GACxB,aAAa,EAAE,GACf,OAAO,cACpB,KAAK,UAAU,GAAG,GAAG,CACtB;;AA8BH,MAAM,iBAAiB;AAEvB,MAAM,WAAW,UACf,MAAM,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM;AAE1C,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,mCACD;CAKH,MAAM,SAAS,EAAE;CAEjB,MAAM,OAAO,EAAE;CACf,MAAM,SAAS,EAAE,MAAM,GAAG,EAAE;AAC5B,KAAI,CAAC,UAAU,KAAK,OAAO,IAAI,CAAC,UAAU,KAAK,KAAK,CAClD,QAAO,IACL,kBACA,+CACD;AAEH,KAAI,CAAC,SAAS,OAAO,CACnB,QAAO,IACL,kBACA,+CACD;AAEH,KAAI,CAAC,eAAe,SAAS,OAAO,CAClC,QAAO,IACL,qBACA,gDACD;AAEH,KAAI,WAAW,OAAO,SAAS,SAC7B,QAAO,IACL,qBACA,8CACD;AAEH,MACG,WAAW,OAAO,WAAW,QAC9B,EAAE,WAAW,UAAU,SAAS,UAEhC,QAAO,IACL,qBACA,oDACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;;;AAIvC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,+BAA+B;CAChD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU;EAAC;EAAY;EAAY;EAAW;CAC9C;CACA;CACA;CACA;CACD"}
|
package/dist/ae/eid.d.ts
CHANGED
package/dist/ae/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import eid from "./eid.js";
|
|
3
2
|
|
|
4
3
|
//#region src/ae/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { eid };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { eid, mod_d_exports };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/ai/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import tin from "./tin.js";
|
|
3
2
|
|
|
4
3
|
//#region src/ai/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { tin };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, tin };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/al/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import nipt from "./nipt.js";
|
|
3
2
|
|
|
4
3
|
//#region src/al/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { nipt };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, nipt };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/am/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import tin from "./tin.js";
|
|
3
2
|
|
|
4
3
|
//#region src/am/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { tin };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, tin };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/ar/cbu.d.ts
CHANGED
package/dist/ar/cbu.js
CHANGED
|
@@ -39,7 +39,7 @@ const WEIGHTS_BLOCK2 = [
|
|
|
39
39
|
const compact = (value) => clean(value, " -").trim();
|
|
40
40
|
const calcCheck = (digits, weights) => {
|
|
41
41
|
let sum = 0;
|
|
42
|
-
for (
|
|
42
|
+
for (const [i, weight] of weights.entries()) sum += Number(digits[i]) * weight;
|
|
43
43
|
return (10 - sum % 10) % 10;
|
|
44
44
|
};
|
|
45
45
|
const validate = (value) => {
|
package/dist/ar/cbu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cbu.js","names":[],"sources":["../../src/ar/cbu.ts"],"sourcesContent":["/**\n * CBU (Clave Bancaria Uniforme).\n *\n * Argentine bank account number used for electronic\n * transfers. 22 digits: 3-digit bank + 4-digit branch\n * + 1 check digit + 13-digit account + 1 check digit.\n *\n * @see https://es.wikipedia.org/wiki/Clave_bancaria_uniforme\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst WEIGHTS_BLOCK1 = [7, 1, 3, 9, 7, 1, 3];\nconst WEIGHTS_BLOCK2 = [\n 3, 9, 7, 1, 3, 9, 7, 1, 3, 9, 7, 1, 3,\n];\n\nconst compact = (value: string): string =>\n clean(value, \" -\").trim();\n\nconst calcCheck = (\n digits: string,\n weights: readonly number[],\n): number => {\n let sum = 0;\n for (
|
|
1
|
+
{"version":3,"file":"cbu.js","names":[],"sources":["../../src/ar/cbu.ts"],"sourcesContent":["/**\n * CBU (Clave Bancaria Uniforme).\n *\n * Argentine bank account number used for electronic\n * transfers. 22 digits: 3-digit bank + 4-digit branch\n * + 1 check digit + 13-digit account + 1 check digit.\n *\n * @see https://es.wikipedia.org/wiki/Clave_bancaria_uniforme\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst WEIGHTS_BLOCK1 = [7, 1, 3, 9, 7, 1, 3];\nconst WEIGHTS_BLOCK2 = [\n 3, 9, 7, 1, 3, 9, 7, 1, 3, 9, 7, 1, 3,\n];\n\nconst compact = (value: string): string =>\n clean(value, \" -\").trim();\n\nconst calcCheck = (\n digits: string,\n weights: readonly number[],\n): number => {\n let sum = 0;\n for (const [i, weight] of weights.entries()) {\n sum += Number(digits[i]) * weight;\n }\n return (10 - (sum % 10)) % 10;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 22) {\n return err(\"INVALID_LENGTH\", \"CBU must be 22 digits\");\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"CBU must contain only digits\",\n );\n }\n\n // First block: digits 0-6, check digit at 7\n const check1 = calcCheck(v.slice(0, 7), WEIGHTS_BLOCK1);\n if (check1 !== Number(v[7])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"CBU first check digit mismatch\",\n );\n }\n\n // Second block: digits 8-20, check digit at 21\n const check2 = calcCheck(v.slice(8, 21), WEIGHTS_BLOCK2);\n if (check2 !== Number(v[21])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"CBU second check digit mismatch\",\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, 8)} ${v.slice(8)}`;\n};\n\n/** Generate a random valid CBU. */\nconst generate = (): string => {\n const block1 = randomDigits(7);\n const check1 = calcCheck(block1, WEIGHTS_BLOCK1);\n const block2 = randomDigits(13);\n const check2 = calcCheck(block2, WEIGHTS_BLOCK2);\n return block1 + String(check1) + block2 + String(check2);\n};\n\n/** Argentine Uniform Bank Key. */\nconst cbu: Validator = {\n name: \"Argentine Bank Account Number\",\n localName: \"Clave Bancaria Uniforme\",\n abbreviation: \"CBU\",\n aliases: [\"CBU\", \"Clave Bancaria Uniforme\"] as const,\n candidatePattern: \"\\\\d{22}\",\n country: \"AR\",\n entityType: \"any\",\n sourceUrl:\n \"https://es.wikipedia.org/wiki/Clave_bancaria_uniforme\",\n lengths: [22] as const,\n examples: [\"2850590940090418135201\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default cbu;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,iBAAiB;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;AAC5C,MAAM,iBAAiB;CACrB;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CACrC;AAED,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,MAAM;AAE3B,MAAM,aACJ,QACA,YACW;CACX,IAAI,MAAM;AACV,MAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,SAAS,CACzC,QAAO,OAAO,OAAO,GAAG,GAAG;AAE7B,SAAQ,KAAM,MAAM,MAAO;;AAG7B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,GACf,QAAO,IAAI,kBAAkB,wBAAwB;AAGvD,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;AAKH,KADe,UAAU,EAAE,MAAM,GAAG,EAAE,EAAE,eAAe,KACxC,OAAO,EAAE,GAAG,CACzB,QAAO,IACL,oBACA,iCACD;AAKH,KADe,UAAU,EAAE,MAAM,GAAG,GAAG,EAAE,eAAe,KACzC,OAAO,EAAE,IAAI,CAC1B,QAAO,IACL,oBACA,kCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE;;;AAIvC,MAAM,iBAAyB;CAC7B,MAAM,SAAS,aAAa,EAAE;CAC9B,MAAM,SAAS,UAAU,QAAQ,eAAe;CAChD,MAAM,SAAS,aAAa,GAAG;CAC/B,MAAM,SAAS,UAAU,QAAQ,eAAe;AAChD,QAAO,SAAS,OAAO,OAAO,GAAG,SAAS,OAAO,OAAO;;;AAI1D,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,0BAA0B;CAC3C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CACF,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,yBAAyB;CACpC;CACA;CACA;CACA;CACD"}
|
package/dist/ar/cuit.d.ts
CHANGED
package/dist/ar/cuit.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
-
import { randomDigits } from "../_util/generate.js";
|
|
2
|
+
import { randomDigits, randomPick } from "../_util/generate.js";
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/ar/cuit.ts
|
|
@@ -44,6 +44,15 @@ const WEIGHTS = [
|
|
|
44
44
|
3,
|
|
45
45
|
2
|
|
46
46
|
];
|
|
47
|
+
const GENERATE_TYPES = [
|
|
48
|
+
"20",
|
|
49
|
+
"23",
|
|
50
|
+
"24",
|
|
51
|
+
"27",
|
|
52
|
+
"30",
|
|
53
|
+
"33",
|
|
54
|
+
"34"
|
|
55
|
+
];
|
|
47
56
|
const compact = (value) => clean(value, " -.").trim();
|
|
48
57
|
/**
|
|
49
58
|
* Compute the CUIT check digit using weighted sum
|
|
@@ -53,7 +62,7 @@ const compact = (value) => clean(value, " -.").trim();
|
|
|
53
62
|
*/
|
|
54
63
|
const calcCheckDigit = (body) => {
|
|
55
64
|
let sum = 0;
|
|
56
|
-
for (
|
|
65
|
+
for (const [i, weight] of WEIGHTS.entries()) sum += Number(body[i]) * weight;
|
|
57
66
|
const remainder = 11 - sum % 11;
|
|
58
67
|
if (remainder === 11) return 0;
|
|
59
68
|
if (remainder === 10) return 9;
|
|
@@ -78,16 +87,7 @@ const format = (value) => {
|
|
|
78
87
|
};
|
|
79
88
|
/** Generate a random valid CUIT. */
|
|
80
89
|
const generate = () => {
|
|
81
|
-
const
|
|
82
|
-
"20",
|
|
83
|
-
"23",
|
|
84
|
-
"24",
|
|
85
|
-
"27",
|
|
86
|
-
"30",
|
|
87
|
-
"33",
|
|
88
|
-
"34"
|
|
89
|
-
];
|
|
90
|
-
const body = types[Math.floor(Math.random() * types.length)] + randomDigits(8);
|
|
90
|
+
const body = randomPick(GENERATE_TYPES) + randomDigits(8);
|
|
91
91
|
const check = calcCheckDigit(body);
|
|
92
92
|
return body + String(check);
|
|
93
93
|
};
|
package/dist/ar/cuit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cuit.js","names":[],"sources":["../../src/ar/cuit.ts"],"sourcesContent":["/**\n * CUIT (Clave Única de Identificación Tributaria).\n *\n * Argentine tax identification number assigned by AFIP\n * (Administración Federal de Ingresos Públicos). The\n * number consists of 11 digits: a 2-digit type code,\n * an 8-digit DNI number, and a single check digit\n * computed using a weighted modulo 11 algorithm.\n *\n * Type codes: 20/23/24/27 = person, 30/33/34 = company,\n * 50/51/55 = international.\n *\n * Format: XX-XXXXXXXX-X (11 digits).\n *\n * @see https://www.afip.gob.ar/\n * @see https://en.wikipedia.org/wiki/CUIT_(Argentina)\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst VALID_TYPES = new Set([\n \"20\",\n \"23\",\n \"24\",\n \"27\",\n \"30\",\n \"33\",\n \"34\",\n \"50\",\n \"51\",\n \"55\",\n]);\n\nconst WEIGHTS = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").trim();\n\n/**\n * Compute the CUIT check digit using weighted sum\n * mod 11. Weights: [5, 4, 3, 2, 7, 6, 5, 4, 3, 2].\n *\n * check = 11 - (sum % 11); if 11 -> 0, if 10 -> 9.\n */\nconst calcCheckDigit = (body: string): number => {\n let sum = 0;\n for (
|
|
1
|
+
{"version":3,"file":"cuit.js","names":[],"sources":["../../src/ar/cuit.ts"],"sourcesContent":["/**\n * CUIT (Clave Única de Identificación Tributaria).\n *\n * Argentine tax identification number assigned by AFIP\n * (Administración Federal de Ingresos Públicos). The\n * number consists of 11 digits: a 2-digit type code,\n * an 8-digit DNI number, and a single check digit\n * computed using a weighted modulo 11 algorithm.\n *\n * Type codes: 20/23/24/27 = person, 30/33/34 = company,\n * 50/51/55 = international.\n *\n * Format: XX-XXXXXXXX-X (11 digits).\n *\n * @see https://www.afip.gob.ar/\n * @see https://en.wikipedia.org/wiki/CUIT_(Argentina)\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst VALID_TYPES = new Set([\n \"20\",\n \"23\",\n \"24\",\n \"27\",\n \"30\",\n \"33\",\n \"34\",\n \"50\",\n \"51\",\n \"55\",\n]);\n\nconst WEIGHTS = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2] as const;\n\nconst GENERATE_TYPES = [\n \"20\",\n \"23\",\n \"24\",\n \"27\",\n \"30\",\n \"33\",\n \"34\",\n] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").trim();\n\n/**\n * Compute the CUIT check digit using weighted sum\n * mod 11. Weights: [5, 4, 3, 2, 7, 6, 5, 4, 3, 2].\n *\n * check = 11 - (sum % 11); if 11 -> 0, if 10 -> 9.\n */\nconst calcCheckDigit = (body: string): number => {\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(body[i]) * weight;\n }\n const remainder = 11 - (sum % 11);\n if (remainder === 11) return 0;\n if (remainder === 10) return 9;\n return remainder;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 11) {\n return err(\"INVALID_LENGTH\", \"CUIT must be 11 digits\");\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"CUIT must contain only digits\",\n );\n }\n\n const typeCode = v.slice(0, 2);\n if (!VALID_TYPES.has(typeCode)) {\n return err(\n \"INVALID_COMPONENT\",\n \"CUIT has an invalid type code\",\n );\n }\n\n const expected = calcCheckDigit(v.slice(0, 10));\n if (Number(v[10]) !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"CUIT check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)}-${v.slice(2, 10)}-${v.slice(10)}`;\n};\n\n/** Generate a random valid CUIT. */\nconst generate = (): string => {\n const type = randomPick(GENERATE_TYPES);\n const body = type + randomDigits(8);\n const check = calcCheckDigit(body);\n return body + String(check);\n};\n\n/**\n * Argentine CUIT (tax identification number).\n *\n * Examples sourced from python-stdnum test suite\n * (ar.cuit module).\n */\nconst cuit: Validator = {\n name: \"Argentine Tax ID\",\n localName: \"Clave Única de Identificación Tributaria\",\n abbreviation: \"CUIT\",\n aliases: [\n \"CUIT\",\n \"CUIL\",\n \"Clave Única de Identificación Tributaria\",\n ] as const,\n candidatePattern: \"\\\\d{2}-?\\\\d{8}-?\\\\d\",\n country: \"AR\",\n entityType: \"any\",\n compact,\n format,\n validate,\n sourceUrl: \"https://www.afip.gob.ar/\",\n lengths: [11] as const,\n examples: [\"20267565393\", \"20055361682\"] as const,\n generate,\n};\n\nexport default cuit;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,cAAc,IAAI,IAAI;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;AAE9C,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,WAAW,UACf,MAAM,OAAO,MAAM,CAAC,MAAM;;;;;;;AAQ5B,MAAM,kBAAkB,SAAyB;CAC/C,IAAI,MAAM;AACV,MAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,SAAS,CACzC,QAAO,OAAO,KAAK,GAAG,GAAG;CAE3B,MAAM,YAAY,KAAM,MAAM;AAC9B,KAAI,cAAc,GAAI,QAAO;AAC7B,KAAI,cAAc,GAAI,QAAO;AAC7B,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,GACf,QAAO,IAAI,kBAAkB,yBAAyB;AAGxD,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,gCACD;CAGH,MAAM,WAAW,EAAE,MAAM,GAAG,EAAE;AAC9B,KAAI,CAAC,YAAY,IAAI,SAAS,CAC5B,QAAO,IACL,qBACA,gCACD;CAGH,MAAM,WAAW,eAAe,EAAE,MAAM,GAAG,GAAG,CAAC;AAC/C,KAAI,OAAO,EAAE,IAAI,KAAK,SACpB,QAAO,IACL,oBACA,kCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG;;;AAI1D,MAAM,iBAAyB;CAE7B,MAAM,OADO,WAAW,eAAe,GACnB,aAAa,EAAE;CACnC,MAAM,QAAQ,eAAe,KAAK;AAClC,QAAO,OAAO,OAAO,MAAM;;;;;;;;AAS7B,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ;CACA;CACA;CACA,WAAW;CACX,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,eAAe,cAAc;CACxC;CACD"}
|
package/dist/ar/mod.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import cbu from "./cbu.js";
|
|
3
2
|
import cuit from "./cuit.js";
|
|
4
3
|
import dni from "./dni.js";
|
|
5
4
|
|
|
6
5
|
//#region src/ar/mod.d.ts
|
|
7
|
-
|
|
6
|
+
declare namespace mod_d_exports {
|
|
7
|
+
export { cbu, cuit, dni };
|
|
8
|
+
}
|
|
8
9
|
//#endregion
|
|
9
10
|
export { cbu, cuit, dni, mod_d_exports };
|
|
10
11
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/at/mod.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import businessid from "./businessid.js";
|
|
3
2
|
import tin from "./tin.js";
|
|
4
3
|
import uid from "./uid.js";
|
|
5
4
|
import vnr from "./vnr.js";
|
|
6
5
|
|
|
7
6
|
//#region src/at/mod.d.ts
|
|
8
|
-
|
|
7
|
+
declare namespace mod_d_exports {
|
|
8
|
+
export { businessid, tin, uid, vnr };
|
|
9
|
+
}
|
|
9
10
|
//#endregion
|
|
10
11
|
export { businessid, mod_d_exports, tin, uid, vnr };
|
|
11
12
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/at/tin.d.ts
CHANGED
package/dist/at/uid.d.ts
CHANGED
package/dist/at/vnr.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ValidateResult, Validator } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/at/vnr.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;
|
|
7
|
+
/** Generate a random valid Austrian VNR. */
|
|
8
|
+
declare const generate: () => string;
|
|
8
9
|
/** Austrian Social Insurance Number. */
|
|
9
10
|
declare const vnr: Validator;
|
|
10
11
|
//#endregion
|
|
11
|
-
export { compact, vnr as default, format, validate };
|
|
12
|
+
export { compact, vnr as default, format, generate, validate };
|
|
12
13
|
//# sourceMappingURL=vnr.d.ts.map
|
package/dist/at/vnr.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
2
3
|
import { err } from "../_util/result.js";
|
|
3
4
|
import { isdigits } from "../_util/strings.js";
|
|
4
5
|
//#region src/at/vnr.ts
|
|
@@ -39,7 +40,7 @@ const validate = (value) => {
|
|
|
39
40
|
if (day < 1 || day > 31 || month < 1 || month > 12) return err("INVALID_COMPONENT", "Austrian VNR contains an invalid birth date");
|
|
40
41
|
const digits = v.slice(0, 3) + v.slice(4);
|
|
41
42
|
let sum = 0;
|
|
42
|
-
for (
|
|
43
|
+
for (const [i, weight] of WEIGHTS.entries()) sum += Number(digits[i]) * weight;
|
|
43
44
|
const check = sum % 11;
|
|
44
45
|
if (check === 10) return err("INVALID_CHECKSUM", "Austrian VNR check digit is invalid (mod 11 remainder is 10)");
|
|
45
46
|
if (check !== Number(v[3])) return err("INVALID_CHECKSUM", "Austrian VNR check digit mismatch");
|
|
@@ -52,6 +53,21 @@ const format = (value) => {
|
|
|
52
53
|
const v = compact(value);
|
|
53
54
|
return `${v.slice(0, 4)} ${v.slice(4, 6)}${v.slice(6, 8)}${v.slice(8)}`;
|
|
54
55
|
};
|
|
56
|
+
/** Generate a random valid Austrian VNR. */
|
|
57
|
+
const generate = () => {
|
|
58
|
+
for (;;) {
|
|
59
|
+
const serial = randomDigits(3);
|
|
60
|
+
const day = String(randomInt(1, 28)).padStart(2, "0");
|
|
61
|
+
const month = String(randomInt(1, 12)).padStart(2, "0");
|
|
62
|
+
const year = String(randomInt(0, 99)).padStart(2, "0");
|
|
63
|
+
const digits = `${serial}${day}${month}${year}`;
|
|
64
|
+
let sum = 0;
|
|
65
|
+
for (const [i, weight] of WEIGHTS.entries()) sum += Number(digits[i]) * weight;
|
|
66
|
+
const check = sum % 11;
|
|
67
|
+
if (check === 10) continue;
|
|
68
|
+
return `${serial}${String(check)}${day}${month}${year}`;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
55
71
|
/** Austrian Social Insurance Number. */
|
|
56
72
|
const vnr = {
|
|
57
73
|
name: "Austrian Social Insurance Number",
|
|
@@ -71,9 +87,10 @@ const vnr = {
|
|
|
71
87
|
examples: ["1237010180"],
|
|
72
88
|
compact,
|
|
73
89
|
format,
|
|
74
|
-
validate
|
|
90
|
+
validate,
|
|
91
|
+
generate
|
|
75
92
|
};
|
|
76
93
|
//#endregion
|
|
77
|
-
export { compact, vnr as default, format, validate };
|
|
94
|
+
export { compact, vnr as default, format, generate, validate };
|
|
78
95
|
|
|
79
96
|
//# sourceMappingURL=vnr.js.map
|
package/dist/at/vnr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vnr.js","names":[],"sources":["../../src/at/vnr.ts"],"sourcesContent":["/**\n * VNR (Versicherungsnummer).\n *\n * Austrian social insurance number. 10 digits: 3-digit\n * serial + 1 check digit + 6-digit birth date (DDMMYY).\n * The check digit is computed using a weighted sum\n * mod 11 over the 9 non-check digits.\n *\n * @see https://de.wikipedia.org/wiki/Sozialversicherungsnummer#%C3%96sterreich\n * @see https://www.sozialversicherung.at/\n */\n\nimport { clean } from \"#util/clean\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/**\n * Weights for the 9 non-check digits (positions\n * 0,1,2, then 4,5,6,7,8,9). Check digit is at\n * position 3 and equals the weighted sum mod 11.\n */\nconst WEIGHTS = [3, 7, 9, 5, 8, 4, 2, 1, 6];\n\nconst compact = (value: string): string =>\n clean(value, \" -/\").trim();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Austrian VNR must be 10 digits\",\n );\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Austrian VNR must contain only digits\",\n );\n }\n\n // Validate birth date (DDMMYY in positions 4-9)\n const day = Number(v.slice(4, 6));\n const month = Number(v.slice(6, 8));\n if (day < 1 || day > 31 || month < 1 || month > 12) {\n return err(\n \"INVALID_COMPONENT\",\n \"Austrian VNR contains an invalid birth date\",\n );\n }\n\n // Check digit at position 3: weighted sum of the\n // other 9 digits mod 11. If remainder is 10 the\n // number is invalid.\n const digits = v.slice(0, 3) + v.slice(4);\n let sum = 0;\n for (
|
|
1
|
+
{"version":3,"file":"vnr.js","names":[],"sources":["../../src/at/vnr.ts"],"sourcesContent":["/**\n * VNR (Versicherungsnummer).\n *\n * Austrian social insurance number. 10 digits: 3-digit\n * serial + 1 check digit + 6-digit birth date (DDMMYY).\n * The check digit is computed using a weighted sum\n * mod 11 over the 9 non-check digits.\n *\n * @see https://de.wikipedia.org/wiki/Sozialversicherungsnummer#%C3%96sterreich\n * @see https://www.sozialversicherung.at/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/**\n * Weights for the 9 non-check digits (positions\n * 0,1,2, then 4,5,6,7,8,9). Check digit is at\n * position 3 and equals the weighted sum mod 11.\n */\nconst WEIGHTS = [3, 7, 9, 5, 8, 4, 2, 1, 6] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -/\").trim();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Austrian VNR must be 10 digits\",\n );\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Austrian VNR must contain only digits\",\n );\n }\n\n // Validate birth date (DDMMYY in positions 4-9)\n const day = Number(v.slice(4, 6));\n const month = Number(v.slice(6, 8));\n if (day < 1 || day > 31 || month < 1 || month > 12) {\n return err(\n \"INVALID_COMPONENT\",\n \"Austrian VNR contains an invalid birth date\",\n );\n }\n\n // Check digit at position 3: weighted sum of the\n // other 9 digits mod 11. If remainder is 10 the\n // number is invalid.\n const digits = v.slice(0, 3) + v.slice(4);\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(digits[i]) * weight;\n }\n const check = sum % 11;\n if (check === 10) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Austrian VNR check digit is invalid (mod 11 \" +\n \"remainder is 10)\",\n );\n }\n if (check !== Number(v[3])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Austrian VNR check digit mismatch\",\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, 4)} ${v.slice(4, 6)}${v.slice(6, 8)}${v.slice(8)}`;\n};\n\n/** Generate a random valid Austrian VNR. */\nconst generate = (): string => {\n for (;;) {\n const serial = randomDigits(3);\n const day = String(randomInt(1, 28)).padStart(2, \"0\");\n const month = String(randomInt(1, 12)).padStart(2, \"0\");\n const year = String(randomInt(0, 99)).padStart(2, \"0\");\n const digits = `${serial}${day}${month}${year}`;\n\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(digits[i]) * weight;\n }\n\n const check = sum % 11;\n if (check === 10) continue;\n return `${serial}${String(check)}${day}${month}${year}`;\n }\n};\n\n/** Austrian Social Insurance Number. */\nconst vnr: Validator = {\n name: \"Austrian Social Insurance Number\",\n localName: \"Versicherungsnummer\",\n abbreviation: \"VNR\",\n aliases: [\n \"VNR\",\n \"SVNR\",\n \"Versicherungsnummer\",\n \"Sozialversicherungsnummer\",\n ] as const,\n candidatePattern: \"\\\\d{4}\\\\s?\\\\d{6}\",\n country: \"AT\",\n entityType: \"person\",\n sourceUrl:\n \"https://de.wikipedia.org/wiki/Sozialversicherungsnummer\",\n lengths: [10] as const,\n examples: [\"1237010180\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vnr;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;AAE3C,MAAM,WAAW,UACf,MAAM,OAAO,MAAM,CAAC,MAAM;AAE5B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,iCACD;AAGH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,wCACD;CAIH,MAAM,MAAM,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CACjC,MAAM,QAAQ,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;AACnC,KAAI,MAAM,KAAK,MAAM,MAAM,QAAQ,KAAK,QAAQ,GAC9C,QAAO,IACL,qBACA,8CACD;CAMH,MAAM,SAAS,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE;CACzC,IAAI,MAAM;AACV,MAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,SAAS,CACzC,QAAO,OAAO,OAAO,GAAG,GAAG;CAE7B,MAAM,QAAQ,MAAM;AACpB,KAAI,UAAU,GACZ,QAAO,IACL,oBACA,+DAED;AAEH,KAAI,UAAU,OAAO,EAAE,GAAG,CACxB,QAAO,IACL,oBACA,oCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE;;;AAIvE,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,SAAS,aAAa,EAAE;EAC9B,MAAM,MAAM,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACrD,MAAM,QAAQ,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACvD,MAAM,OAAO,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACtD,MAAM,SAAS,GAAG,SAAS,MAAM,QAAQ;EAEzC,IAAI,MAAM;AACV,OAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,SAAS,CACzC,QAAO,OAAO,OAAO,GAAG,GAAG;EAG7B,MAAM,QAAQ,MAAM;AACpB,MAAI,UAAU,GAAI;AAClB,SAAO,GAAG,SAAS,OAAO,MAAM,GAAG,MAAM,QAAQ;;;;AAKrD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CACF,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;CACD"}
|
package/dist/au/abn.d.ts
CHANGED
package/dist/au/acn.d.ts
CHANGED
package/dist/au/mod.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import abn from "./abn.js";
|
|
3
2
|
import acn from "./acn.js";
|
|
4
3
|
import tfn from "./tfn.js";
|
|
5
4
|
|
|
6
5
|
//#region src/au/mod.d.ts
|
|
7
|
-
|
|
6
|
+
declare namespace mod_d_exports {
|
|
7
|
+
export { abn, acn, tfn };
|
|
8
|
+
}
|
|
8
9
|
//#endregion
|
|
9
10
|
export { abn, acn, mod_d_exports, tfn };
|
|
10
11
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/au/tfn.d.ts
CHANGED
package/dist/az/mod.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import voen from "./voen.js";
|
|
3
2
|
|
|
4
3
|
//#region src/az/mod.d.ts
|
|
5
|
-
|
|
4
|
+
declare namespace mod_d_exports {
|
|
5
|
+
export { voen };
|
|
6
|
+
}
|
|
6
7
|
//#endregion
|
|
7
8
|
export { mod_d_exports, voen };
|
|
8
9
|
//# sourceMappingURL=mod.d.ts.map
|