@stll/stdnum 1.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -4
- package/dist/_checksums/luhn.js.map +1 -1
- package/dist/_checksums/mod1110.js +1 -1
- package/dist/_checksums/mod1110.js.map +1 -1
- package/dist/_checksums/mod112.js.map +1 -1
- package/dist/_checksums/mod97.js.map +1 -1
- package/dist/_checksums/verhoeff.js.map +1 -1
- package/dist/_checksums/weighted-sum.js.map +1 -1
- package/dist/_util/arabic.js.map +1 -1
- package/dist/_util/clean.js.map +1 -1
- package/dist/_util/date.js.map +1 -1
- package/dist/_util/generate.js.map +1 -1
- package/dist/_util/result.js.map +1 -1
- package/dist/_util/strings.js.map +1 -1
- package/dist/ad/nrt.d.ts +16 -2
- package/dist/ad/nrt.js +1 -14
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +2 -2
- package/dist/ae/eid.js +2 -12
- package/dist/ae/eid.js.map +1 -1
- package/dist/ai/tin.d.ts +20 -2
- package/dist/ai/tin.js +1 -18
- package/dist/ai/tin.js.map +1 -1
- package/dist/al/nipt.d.ts +13 -2
- package/dist/al/nipt.js +1 -11
- package/dist/al/nipt.js.map +1 -1
- package/dist/am/tin.d.ts +16 -2
- package/dist/am/tin.js +1 -14
- package/dist/am/tin.js.map +1 -1
- package/dist/ar/cbu.d.ts +2 -2
- package/dist/ar/cbu.js +1 -9
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +2 -2
- package/dist/ar/cuit.js +1 -17
- package/dist/ar/cuit.js.map +1 -1
- package/dist/ar/dni.d.ts +11 -2
- package/dist/ar/dni.js +1 -9
- package/dist/ar/dni.js.map +1 -1
- package/dist/at/businessid.d.ts +10 -2
- package/dist/at/businessid.js +1 -8
- package/dist/at/businessid.js.map +1 -1
- package/dist/at/tin.d.ts +2 -2
- package/dist/at/tin.js +1 -11
- package/dist/at/tin.js.map +1 -1
- package/dist/at/uid.d.ts +2 -2
- package/dist/at/uid.js +2 -10
- package/dist/at/uid.js.map +1 -1
- package/dist/at/vnr.d.ts +2 -2
- package/dist/at/vnr.js +4 -14
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +2 -2
- package/dist/au/abn.js +1 -10
- package/dist/au/abn.js.map +1 -1
- package/dist/au/acn.d.ts +2 -2
- package/dist/au/acn.js +1 -10
- package/dist/au/acn.js.map +1 -1
- package/dist/au/tfn.d.ts +2 -2
- package/dist/au/tfn.js +1 -10
- package/dist/au/tfn.js.map +1 -1
- package/dist/az/voen.d.ts +2 -2
- package/dist/az/voen.js +1 -14
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +2 -2
- package/dist/ba/jmbg.js +3 -11
- package/dist/ba/jmbg.js.map +1 -1
- package/dist/bd/nid.d.ts +23 -2
- package/dist/bd/nid.js +1 -21
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +2 -2
- package/dist/be/bis.js +1 -11
- package/dist/be/bis.js.map +1 -1
- package/dist/be/nn.d.ts +2 -2
- package/dist/be/nn.js +1 -11
- package/dist/be/nn.js.map +1 -1
- package/dist/be/vat.d.ts +2 -2
- package/dist/be/vat.js +1 -9
- package/dist/be/vat.js.map +1 -1
- package/dist/bg/egn.d.ts +2 -2
- package/dist/bg/egn.js +3 -18
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/pnf.d.ts +2 -2
- package/dist/bg/pnf.js +1 -8
- package/dist/bg/pnf.js.map +1 -1
- package/dist/bg/vat.d.ts +2 -2
- package/dist/bg/vat.js +3 -9
- package/dist/bg/vat.js.map +1 -1
- package/dist/bh/cpr.d.ts +2 -2
- package/dist/bh/cpr.js +1 -17
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bic.d.ts +13 -2
- package/dist/bic.js +1 -11
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +2 -2
- package/dist/br/cnpj.js +1 -20
- package/dist/br/cnpj.js.map +1 -1
- package/dist/br/cpf.d.ts +2 -2
- package/dist/br/cpf.js +1 -14
- package/dist/br/cpf.js.map +1 -1
- package/dist/by/unp.d.ts +2 -2
- package/dist/by/unp.js +3 -14
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/tin.d.ts +2 -2
- package/dist/bz/tin.js +1 -26
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +2 -2
- package/dist/ca/bn.js +2 -10
- package/dist/ca/bn.js.map +1 -1
- package/dist/ca/sin.d.ts +2 -2
- package/dist/ca/sin.js +2 -10
- package/dist/ca/sin.js.map +1 -1
- package/dist/ch/ssn.d.ts +2 -2
- package/dist/ch/ssn.js +1 -9
- package/dist/ch/ssn.js.map +1 -1
- package/dist/ch/uid.d.ts +2 -2
- package/dist/ch/uid.js +1 -9
- package/dist/ch/uid.js.map +1 -1
- package/dist/ch/vat.d.ts +2 -2
- package/dist/ch/vat.js +1 -9
- package/dist/ch/vat.js.map +1 -1
- package/dist/cl/rut.d.ts +2 -2
- package/dist/cl/rut.js +1 -14
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/ric.d.ts +2 -2
- package/dist/cn/ric.js +3 -14
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +2 -2
- package/dist/cn/uscc.js +1 -10
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/nit.d.ts +2 -2
- package/dist/co/nit.js +2 -12
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.d.ts +18 -2
- package/dist/cr/cpf.js +1 -16
- package/dist/cr/cpf.js.map +1 -1
- package/dist/creditcard.d.ts +2 -2
- package/dist/creditcard.js +5 -14
- package/dist/creditcard.js.map +1 -1
- package/dist/cu/ni.d.ts +2 -2
- package/dist/cu/ni.js +2 -17
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/vat.d.ts +2 -2
- package/dist/cy/vat.js +1 -8
- package/dist/cy/vat.js.map +1 -1
- package/dist/cz/dic.d.ts +2 -2
- package/dist/cz/dic.js +7 -13
- package/dist/cz/dic.js.map +1 -1
- package/dist/cz/ico.d.ts +2 -2
- package/dist/cz/ico.js +2 -10
- package/dist/cz/ico.js.map +1 -1
- package/dist/cz/rc.d.ts +2 -2
- package/dist/cz/rc.js +2 -26
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.d.ts +19 -2
- package/dist/de/handelsreg.js +1 -17
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +2 -2
- package/dist/de/idnr.js +2 -12
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/stnr.d.ts +17 -2
- package/dist/de/stnr.js +1 -15
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +2 -2
- package/dist/de/svnr.js +2 -11
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +2 -2
- package/dist/de/vat.js +2 -11
- package/dist/de/vat.js.map +1 -1
- package/dist/dk/cpr.d.ts +2 -2
- package/dist/dk/cpr.js +2 -10
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +2 -2
- package/dist/dk/cvr.js +2 -15
- package/dist/dk/cvr.js.map +1 -1
- package/dist/dk/vat.d.ts +2 -2
- package/dist/dk/vat.js +3 -13
- package/dist/dk/vat.js.map +1 -1
- package/dist/do/rnc.d.ts +2 -2
- package/dist/do/rnc.js +2 -16
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/ruc.d.ts +2 -2
- package/dist/ec/ruc.js +1 -18
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +2 -2
- package/dist/ee/ik.js +3 -20
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/registrikood.d.ts +2 -2
- package/dist/ee/registrikood.js +1 -8
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +2 -2
- package/dist/ee/vat.js +2 -10
- package/dist/ee/vat.js.map +1 -1
- package/dist/eg/tn.d.ts +11 -2
- package/dist/eg/tn.js +1 -9
- package/dist/eg/tn.js.map +1 -1
- package/dist/es/cif.d.ts +2 -2
- package/dist/es/cif.js +1 -10
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +2 -2
- package/dist/es/dni.js +1 -9
- package/dist/es/dni.js.map +1 -1
- package/dist/es/nie.d.ts +2 -2
- package/dist/es/nie.js +1 -9
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +2 -2
- package/dist/es/nss.js +1 -16
- package/dist/es/nss.js.map +1 -1
- package/dist/es/vat.d.ts +2 -2
- package/dist/es/vat.js +5 -10
- package/dist/es/vat.js.map +1 -1
- package/dist/eu/vat.d.ts +2 -2
- package/dist/eu/vat.js +1 -0
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +2 -2
- package/dist/fi/hetu.js +2 -10
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/vat.d.ts +2 -2
- package/dist/fi/vat.js +3 -10
- package/dist/fi/vat.js.map +1 -1
- package/dist/fi/ytunnus.d.ts +2 -2
- package/dist/fi/ytunnus.js +2 -10
- package/dist/fi/ytunnus.js.map +1 -1
- package/dist/fr/nif.d.ts +2 -2
- package/dist/fr/nif.js +1 -9
- package/dist/fr/nif.js.map +1 -1
- package/dist/fr/nir.d.ts +2 -2
- package/dist/fr/nir.js +2 -14
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +2 -2
- package/dist/fr/siren.js +2 -10
- package/dist/fr/siren.js.map +1 -1
- package/dist/fr/siret.d.ts +2 -2
- package/dist/fr/siret.js +2 -11
- package/dist/fr/siret.js.map +1 -1
- package/dist/fr/tva.d.ts +2 -2
- package/dist/fr/tva.js +2 -12
- package/dist/fr/tva.js.map +1 -1
- package/dist/gb/nino.d.ts +12 -2
- package/dist/gb/nino.js +1 -10
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +2 -2
- package/dist/gb/sedol.js +1 -11
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +2 -2
- package/dist/gb/utr.js +2 -10
- package/dist/gb/utr.js.map +1 -1
- package/dist/gb/vat.d.ts +2 -2
- package/dist/gb/vat.js +2 -11
- package/dist/gb/vat.js.map +1 -1
- package/dist/ge/pin.d.ts +14 -2
- package/dist/ge/pin.js +1 -12
- package/dist/ge/pin.js.map +1 -1
- package/dist/gh/tin.d.ts +2 -2
- package/dist/gh/tin.js +1 -15
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +2 -2
- package/dist/gr/amka.js +3 -11
- package/dist/gr/amka.js.map +1 -1
- package/dist/gr/vat.d.ts +2 -2
- package/dist/gr/vat.js +1 -10
- package/dist/gr/vat.js.map +1 -1
- package/dist/gt/nit.d.ts +2 -2
- package/dist/gt/nit.js +1 -12
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +2 -2
- package/dist/hk/hkid.js +1 -10
- package/dist/hk/hkid.js.map +1 -1
- package/dist/hr/vat.d.ts +2 -2
- package/dist/hr/vat.js +2 -9
- package/dist/hr/vat.js.map +1 -1
- package/dist/hu/vat.d.ts +2 -2
- package/dist/hu/vat.js +3 -10
- package/dist/hu/vat.js.map +1 -1
- package/dist/iban.d.ts +2 -2
- package/dist/iban.js +2 -8
- package/dist/iban.js.map +1 -1
- package/dist/id/npwp.d.ts +2 -2
- package/dist/id/npwp.js +3 -13
- package/dist/id/npwp.js.map +1 -1
- package/dist/ie/pps.d.ts +2 -2
- package/dist/ie/pps.js +1 -10
- package/dist/ie/pps.js.map +1 -1
- package/dist/ie/vat.d.ts +2 -2
- package/dist/ie/vat.js +1 -9
- package/dist/ie/vat.js.map +1 -1
- package/dist/il/idnr.d.ts +2 -2
- package/dist/il/idnr.js +2 -9
- package/dist/il/idnr.js.map +1 -1
- package/dist/in/aadhaar.d.ts +2 -2
- package/dist/in/aadhaar.js +2 -12
- package/dist/in/aadhaar.js.map +1 -1
- package/dist/in/gstin.d.ts +2 -2
- package/dist/in/gstin.js +1 -10
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/pan.d.ts +15 -2
- package/dist/in/pan.js +1 -13
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/iq/nid.d.ts +16 -2
- package/dist/iq/nid.js +2 -15
- package/dist/iq/nid.js.map +1 -1
- package/dist/ir/nid.d.ts +2 -2
- package/dist/ir/nid.js +2 -24
- package/dist/ir/nid.js.map +1 -1
- package/dist/is/kennitala.d.ts +2 -2
- package/dist/is/kennitala.js +2 -13
- package/dist/is/kennitala.js.map +1 -1
- package/dist/is/vsk.d.ts +9 -2
- package/dist/is/vsk.js +1 -7
- package/dist/is/vsk.js.map +1 -1
- package/dist/isin.d.ts +2 -2
- package/dist/isin.js +2 -12
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +2 -2
- package/dist/it/codicefiscale.js +1 -21
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +2 -2
- package/dist/it/iva.js +2 -9
- package/dist/it/iva.js.map +1 -1
- package/dist/jp/cn.d.ts +2 -2
- package/dist/jp/cn.js +1 -9
- package/dist/jp/cn.js.map +1 -1
- package/dist/jp/mynumber.d.ts +2 -2
- package/dist/jp/mynumber.js +1 -10
- package/dist/jp/mynumber.js.map +1 -1
- package/dist/kr/brn.d.ts +11 -2
- package/dist/kr/brn.js +1 -9
- package/dist/kr/brn.js.map +1 -1
- package/dist/kr/rrn.d.ts +2 -2
- package/dist/kr/rrn.js +2 -11
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +2 -2
- package/dist/kw/civil.js +2 -14
- package/dist/kw/civil.js.map +1 -1
- package/dist/kz/iin.d.ts +2 -2
- package/dist/kz/iin.js +3 -18
- package/dist/kz/iin.js.map +1 -1
- package/dist/lei.d.ts +2 -2
- package/dist/lei.js +2 -11
- package/dist/lei.js.map +1 -1
- package/dist/li/peid.d.ts +11 -2
- package/dist/li/peid.js +1 -9
- package/dist/li/peid.js.map +1 -1
- package/dist/lk/nic.d.ts +2 -2
- package/dist/lk/nic.js +2 -14
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +2 -2
- package/dist/lt/asmens.js +2 -1
- package/dist/lt/asmens.js.map +1 -1
- package/dist/lt/vat.d.ts +2 -2
- package/dist/lt/vat.js +2 -10
- package/dist/lt/vat.js.map +1 -1
- package/dist/lu/vat.d.ts +2 -2
- package/dist/lu/vat.js +2 -8
- package/dist/lu/vat.js.map +1 -1
- package/dist/luhn.d.ts +2 -2
- package/dist/luhn.js +2 -9
- package/dist/luhn.js.map +1 -1
- package/dist/lv/vat.d.ts +2 -2
- package/dist/lv/vat.js +2 -28
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +2 -2
- package/dist/ma/ice.js +2 -11
- package/dist/ma/ice.js.map +1 -1
- package/dist/mc/tva.d.ts +2 -2
- package/dist/mc/tva.js +1 -0
- package/dist/mc/tva.js.map +1 -1
- package/dist/md/idno.d.ts +2 -2
- package/dist/md/idno.js +1 -10
- package/dist/md/idno.js.map +1 -1
- package/dist/me/pib.d.ts +2 -2
- package/dist/me/pib.js +2 -10
- package/dist/me/pib.js.map +1 -1
- package/dist/mk/edb.d.ts +2 -2
- package/dist/mk/edb.js +2 -11
- package/dist/mk/edb.js.map +1 -1
- package/dist/mt/vat.d.ts +2 -2
- package/dist/mt/vat.js +3 -10
- package/dist/mt/vat.js.map +1 -1
- package/dist/mu/brn.d.ts +23 -2
- package/dist/mu/brn.js +1 -21
- package/dist/mu/brn.js.map +1 -1
- package/dist/mx/clabe.d.ts +2 -2
- package/dist/mx/clabe.js +1 -14
- package/dist/mx/clabe.js.map +1 -1
- package/dist/mx/curp.d.ts +2 -2
- package/dist/mx/curp.js +3 -17
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/rfc.d.ts +2 -2
- package/dist/mx/rfc.js +3 -19
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/nric.d.ts +2 -2
- package/dist/my/nric.js +2 -14
- package/dist/my/nric.js.map +1 -1
- package/dist/ng/nin.d.ts +13 -2
- package/dist/ng/nin.js +1 -11
- package/dist/ng/nin.js.map +1 -1
- package/dist/ni/ruc.d.ts +2 -2
- package/dist/ni/ruc.js +1 -23
- package/dist/ni/ruc.js.map +1 -1
- package/dist/nl/bsn.d.ts +2 -2
- package/dist/nl/bsn.js +2 -10
- package/dist/nl/bsn.js.map +1 -1
- package/dist/nl/kvk.d.ts +9 -2
- package/dist/nl/kvk.js +1 -7
- package/dist/nl/kvk.js.map +1 -1
- package/dist/nl/vat.d.ts +2 -2
- package/dist/nl/vat.js +1 -13
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +2 -2
- package/dist/no/fodselsnummer.js +2 -10
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mva.d.ts +2 -2
- package/dist/no/mva.js +1 -8
- package/dist/no/mva.js.map +1 -1
- package/dist/no/orgnr.d.ts +2 -2
- package/dist/no/orgnr.js +2 -8
- package/dist/no/orgnr.js.map +1 -1
- package/dist/nz/ird.d.ts +2 -2
- package/dist/nz/ird.js +2 -11
- package/dist/nz/ird.js.map +1 -1
- package/dist/pa/ruc.d.ts +2 -2
- package/dist/pa/ruc.js +1 -18
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +8 -7
- package/dist/patterns.js +3 -5
- package/dist/patterns.js.map +1 -1
- package/dist/pe/ruc.d.ts +2 -2
- package/dist/pe/ruc.js +1 -15
- package/dist/pe/ruc.js.map +1 -1
- package/dist/ph/philid.d.ts +14 -2
- package/dist/ph/philid.js +1 -12
- package/dist/ph/philid.js.map +1 -1
- package/dist/pk/cnic.d.ts +14 -2
- package/dist/pk/cnic.js +1 -12
- package/dist/pk/cnic.js.map +1 -1
- package/dist/pl/nip.d.ts +2 -2
- package/dist/pl/nip.js +2 -10
- package/dist/pl/nip.js.map +1 -1
- package/dist/pl/pesel.d.ts +2 -2
- package/dist/pl/pesel.js +3 -13
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +2 -2
- package/dist/pl/regon.js +2 -11
- package/dist/pl/regon.js.map +1 -1
- package/dist/pt/cc.d.ts +2 -2
- package/dist/pt/cc.js +1 -9
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/vat.d.ts +2 -2
- package/dist/pt/vat.js +3 -11
- package/dist/pt/vat.js.map +1 -1
- package/dist/ro/cnp.d.ts +2 -2
- package/dist/ro/cnp.js +4 -14
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/vat.d.ts +2 -2
- package/dist/ro/vat.js +13 -11
- package/dist/ro/vat.js.map +1 -1
- package/dist/rs/pib.d.ts +2 -2
- package/dist/rs/pib.js +1 -9
- package/dist/rs/pib.js.map +1 -1
- package/dist/ru/inn.d.ts +2 -2
- package/dist/ru/inn.js +1 -11
- package/dist/ru/inn.js.map +1 -1
- package/dist/se/orgnr.d.ts +2 -2
- package/dist/se/orgnr.js +2 -9
- package/dist/se/orgnr.js.map +1 -1
- package/dist/se/personnummer.d.ts +2 -2
- package/dist/se/personnummer.js +7 -15
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +2 -2
- package/dist/se/vat.js +3 -10
- package/dist/se/vat.js.map +1 -1
- package/dist/sg/uen.d.ts +2 -2
- package/dist/sg/uen.js +1 -15
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +2 -2
- package/dist/si/emso.js +3 -18
- package/dist/si/emso.js.map +1 -1
- package/dist/si/vat.d.ts +2 -2
- package/dist/si/vat.js +3 -12
- package/dist/si/vat.js.map +1 -1
- package/dist/sk/dic.d.ts +2 -2
- package/dist/sk/dic.js +1 -0
- package/dist/sk/dic.js.map +1 -1
- package/dist/sk/ico.d.ts +2 -2
- package/dist/sk/ico.js +1 -0
- package/dist/sk/ico.js.map +1 -1
- package/dist/sk/rc.d.ts +2 -2
- package/dist/sk/rc.js +1 -0
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/tin.d.ts +2 -2
- package/dist/th/tin.js +1 -11
- package/dist/th/tin.js.map +1 -1
- package/dist/tr/tckimlik.d.ts +2 -2
- package/dist/tr/tckimlik.js +1 -20
- package/dist/tr/tckimlik.js.map +1 -1
- package/dist/tr/vkn.d.ts +2 -2
- package/dist/tr/vkn.js +1 -20
- package/dist/tr/vkn.js.map +1 -1
- package/dist/tw/ubn.d.ts +2 -2
- package/dist/tw/ubn.js +1 -11
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +26 -4
- package/dist/ua/edrpou.d.ts +2 -2
- package/dist/ua/edrpou.js +1 -11
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/us/ein.d.ts +12 -2
- package/dist/us/ein.js +1 -10
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.d.ts +13 -2
- package/dist/us/itin.js +1 -11
- package/dist/us/itin.js.map +1 -1
- package/dist/us/rtn.d.ts +2 -2
- package/dist/us/rtn.js +3 -18
- package/dist/us/rtn.js.map +1 -1
- package/dist/us/ssn.d.ts +13 -2
- package/dist/us/ssn.js +1 -11
- package/dist/us/ssn.js.map +1 -1
- package/dist/uy/rut.d.ts +2 -2
- package/dist/uy/rut.js +1 -14
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/rif.d.ts +2 -2
- package/dist/ve/rif.js +2 -15
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mst.d.ts +2 -2
- package/dist/vn/mst.js +1 -12
- package/dist/vn/mst.js.map +1 -1
- package/dist/za/idnr.d.ts +2 -2
- package/dist/za/idnr.js +3 -16
- package/dist/za/idnr.js.map +1 -1
- package/package.json +22 -12
- package/src/_checksums/mod1110.ts +1 -1
- package/src/ad/nrt.ts +7 -3
- package/src/ae/eid.ts +7 -3
- package/src/ai/tin.ts +7 -3
- package/src/al/nipt.ts +7 -3
- package/src/am/tin.ts +7 -3
- package/src/ar/cbu.ts +7 -3
- package/src/ar/cuit.ts +7 -3
- package/src/ar/dni.ts +7 -3
- package/src/at/businessid.ts +7 -3
- package/src/at/tin.ts +7 -3
- package/src/at/uid.ts +7 -3
- package/src/at/vnr.ts +37 -9
- package/src/au/abn.ts +7 -3
- package/src/au/acn.ts +7 -3
- package/src/au/tfn.ts +7 -3
- package/src/az/voen.ts +7 -3
- package/src/ba/jmbg.ts +8 -7
- package/src/bd/nid.ts +7 -3
- package/src/be/bis.ts +8 -4
- package/src/be/nn.ts +7 -3
- package/src/be/vat.ts +7 -3
- package/src/bg/egn.ts +8 -7
- package/src/bg/pnf.ts +7 -3
- package/src/bg/vat.ts +8 -3
- package/src/bh/cpr.ts +7 -3
- package/src/bic.ts +7 -3
- package/src/br/cnpj.ts +7 -3
- package/src/br/cpf.ts +7 -3
- package/src/by/unp.ts +10 -5
- package/src/bz/tin.ts +7 -3
- package/src/ca/bn.ts +7 -3
- package/src/ca/sin.ts +7 -3
- package/src/ch/ssn.ts +7 -3
- package/src/ch/uid.ts +7 -3
- package/src/ch/vat.ts +9 -5
- package/src/cl/rut.ts +7 -3
- package/src/cn/ric.ts +8 -7
- package/src/cn/uscc.ts +7 -3
- package/src/co/nit.ts +8 -4
- package/src/cr/cpf.ts +7 -3
- package/src/creditcard.ts +10 -6
- package/src/cu/ni.ts +8 -7
- package/src/cy/vat.ts +7 -3
- package/src/cz/dic.ts +9 -4
- package/src/cz/ico.ts +7 -3
- package/src/cz/rc.ts +8 -7
- package/src/de/handelsreg.ts +7 -3
- package/src/de/idnr.ts +7 -3
- package/src/de/stnr.ts +7 -3
- package/src/de/svnr.ts +7 -3
- package/src/de/vat.ts +7 -3
- package/src/dk/cpr.ts +8 -7
- package/src/dk/cvr.ts +7 -3
- package/src/dk/vat.ts +8 -3
- package/src/do/rnc.ts +7 -3
- package/src/ec/ruc.ts +7 -3
- package/src/ee/ik.ts +8 -7
- package/src/ee/registrikood.ts +8 -4
- package/src/ee/vat.ts +7 -3
- package/src/eg/tn.ts +7 -3
- package/src/es/cif.ts +8 -4
- package/src/es/dni.ts +7 -3
- package/src/es/nie.ts +8 -4
- package/src/es/nss.ts +7 -3
- package/src/es/vat.ts +13 -5
- package/src/eu/vat.ts +10 -6
- package/src/fi/hetu.ts +8 -7
- package/src/fi/vat.ts +8 -3
- package/src/fi/ytunnus.ts +7 -3
- package/src/fr/nif.ts +7 -3
- package/src/fr/nir.ts +8 -7
- package/src/fr/siren.ts +7 -3
- package/src/fr/siret.ts +7 -3
- package/src/fr/tva.ts +7 -3
- package/src/gb/nino.ts +7 -3
- package/src/gb/sedol.ts +7 -3
- package/src/gb/utr.ts +7 -3
- package/src/gb/vat.ts +7 -3
- package/src/ge/pin.ts +7 -3
- package/src/gh/tin.ts +7 -3
- package/src/gr/amka.ts +7 -3
- package/src/gr/vat.ts +7 -3
- package/src/gt/nit.ts +7 -3
- package/src/hk/hkid.ts +7 -3
- package/src/hr/vat.ts +7 -3
- package/src/hu/vat.ts +8 -3
- package/src/iban.ts +7 -3
- package/src/id/npwp.ts +7 -3
- package/src/ie/pps.ts +7 -3
- package/src/ie/vat.ts +7 -3
- package/src/il/idnr.ts +7 -3
- package/src/in/aadhaar.ts +7 -3
- package/src/in/gstin.ts +7 -3
- package/src/in/pan.ts +7 -3
- package/src/index.ts +3 -0
- package/src/iq/nid.ts +7 -3
- package/src/ir/nid.ts +7 -3
- package/src/is/kennitala.ts +7 -3
- package/src/is/vsk.ts +7 -3
- package/src/isin.ts +7 -3
- package/src/it/codicefiscale.ts +11 -7
- package/src/it/iva.ts +7 -3
- package/src/jp/cn.ts +7 -3
- package/src/jp/mynumber.ts +7 -3
- package/src/kr/brn.ts +7 -3
- package/src/kr/rrn.ts +8 -7
- package/src/kw/civil.ts +8 -7
- package/src/kz/iin.ts +8 -8
- package/src/lei.ts +7 -3
- package/src/li/peid.ts +7 -3
- package/src/lk/nic.ts +8 -7
- package/src/lt/asmens.ts +8 -4
- package/src/lt/vat.ts +8 -3
- package/src/lu/vat.ts +8 -3
- package/src/luhn.ts +7 -3
- package/src/lv/vat.ts +7 -3
- package/src/ma/ice.ts +7 -3
- package/src/mc/tva.ts +9 -5
- package/src/md/idno.ts +7 -3
- package/src/me/pib.ts +7 -3
- package/src/mk/edb.ts +7 -3
- package/src/mt/vat.ts +8 -3
- package/src/mu/brn.ts +7 -3
- package/src/mx/clabe.ts +7 -3
- package/src/mx/curp.ts +9 -8
- package/src/mx/rfc.ts +8 -4
- package/src/my/nric.ts +8 -7
- package/src/ng/nin.ts +7 -3
- package/src/ni/ruc.ts +7 -3
- package/src/nl/bsn.ts +7 -3
- package/src/nl/kvk.ts +7 -3
- package/src/nl/vat.ts +7 -3
- package/src/no/fodselsnummer.ts +11 -7
- package/src/no/mva.ts +9 -5
- package/src/no/orgnr.ts +7 -3
- package/src/nz/ird.ts +8 -4
- package/src/pa/ruc.ts +7 -3
- package/src/patterns.ts +49 -18
- package/src/pe/ruc.ts +7 -3
- package/src/ph/philid.ts +7 -3
- package/src/pk/cnic.ts +7 -3
- package/src/pl/nip.ts +7 -3
- package/src/pl/pesel.ts +8 -7
- package/src/pl/regon.ts +7 -3
- package/src/pt/cc.ts +7 -3
- package/src/pt/vat.ts +8 -3
- package/src/ro/cnp.ts +15 -8
- package/src/ro/vat.ts +8 -3
- package/src/rs/pib.ts +7 -3
- package/src/ru/inn.ts +7 -3
- package/src/se/orgnr.ts +7 -3
- package/src/se/personnummer.ts +35 -33
- package/src/se/vat.ts +8 -3
- package/src/sg/uen.ts +7 -3
- package/src/si/emso.ts +8 -7
- package/src/si/vat.ts +8 -3
- package/src/sk/dic.ts +8 -4
- package/src/sk/ico.ts +3 -2
- package/src/sk/rc.ts +6 -2
- package/src/th/tin.ts +7 -3
- package/src/tr/tckimlik.ts +7 -3
- package/src/tr/vkn.ts +7 -3
- package/src/tw/ubn.ts +7 -3
- package/src/types.ts +34 -3
- package/src/ua/edrpou.ts +7 -3
- package/src/us/ein.ts +7 -3
- package/src/us/itin.ts +7 -3
- package/src/us/rtn.ts +16 -8
- package/src/us/ssn.ts +7 -3
- package/src/uy/rut.ts +7 -3
- package/src/ve/rif.ts +8 -6
- package/src/vn/mst.ts +7 -3
- package/src/za/idnr.ts +8 -7
package/dist/cz/dic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dic.js","names":["validateRc"],"sources":["../../src/cz/dic.ts"],"sourcesContent":["/**\n * DIČ (Daňové identifikační číslo).\n *\n * Czech tax identification number / VAT number.\n * Format: \"CZ\" prefix + 8, 9, or 10 digits.\n * - 8 digits: company (same checksum as IČO,\n * but first digit cannot be 9)\n * - 9 digits starting with 6: special entity\n * - 9-10 digits: individual (birth number)\n *\n * @see https://adisspr.mfcr.cz/dpr/DphReg\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"dic.js","names":["validateRc"],"sources":["../../src/cz/dic.ts"],"sourcesContent":["/**\n * DIČ (Daňové identifikační číslo).\n *\n * Czech tax identification number / VAT number.\n * Format: \"CZ\" prefix + 8, 9, or 10 digits.\n * - 8 digits: company (same checksum as IČO,\n * but first digit cannot be 9)\n * - 9 digits starting with 6: special entity\n * - 9-10 digits: individual (birth number)\n *\n * @see https://adisspr.mfcr.cz/dpr/DphReg\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\nimport { validate as validateRc } from \"./rc\";\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 ICO_WEIGHTS = [8, 7, 6, 5, 4, 3, 2] as const;\n\nconst compact = (value: string): string => {\n const v = clean(value, \" -\");\n if (v.startsWith(\"CZ\") || v.startsWith(\"cz\")) {\n return v.slice(2);\n }\n return v;\n};\n\nconst checkLegal = (value: string): boolean => {\n const sum = weightedSum(\n value.slice(0, 7),\n ICO_WEIGHTS,\n 11,\n );\n const v11 = (11 - sum) % 11;\n const check = v11 === 0 ? 1 : v11 % 10;\n return check === Number(value[7]);\n};\n\nconst checkSpecial = (value: string): boolean => {\n // Skip the leading \"6\"; check digits 1..7\n const sum = weightedSum(\n value.slice(1, 8),\n [8, 7, 6, 5, 4, 3, 2],\n 11,\n );\n const check =\n (((8 - ((((10 - sum) % 11) + 11) % 11)) % 10) + 10) %\n 10;\n return check === Number(value[8]);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length < 8 || v.length > 10) {\n return err(\n \"INVALID_LENGTH\",\n \"DIČ must be 8-10 digits (without CZ prefix)\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"DIČ must contain only digits\",\n );\n }\n\n // 8-digit: legal entity (IČO-like checksum)\n if (v.length === 8) {\n if (v[0] === \"9\") {\n return err(\n \"INVALID_COMPONENT\",\n \"8-digit DIČ cannot start with 9\",\n );\n }\n if (!checkLegal(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"DIČ check digit does not match\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // 9-digit starting with 6: special entity\n if (v.length === 9 && v[0] === \"6\") {\n if (!checkSpecial(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"DIČ special entity check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // 9-10 digit: birth number\n return validateRc(v);\n};\n\nconst format = (value: string): string =>\n `CZ${compact(value)}`;\n\n/** Generate a random valid 8-digit DIČ. */\nconst generate = (): string => {\n const first = String(randomInt(1, 8));\n const payload = first + randomDigits(6);\n const sum = weightedSum(payload, ICO_WEIGHTS, 11);\n const v11 = (11 - sum) % 11;\n const check = v11 === 0 ? 1 : v11 % 10;\n return payload + String(check);\n};\n\n/** Czech VAT Number. */\nconst dic: CountryValidator<\"CZ\"> = {\n name: \"Czech VAT Number\",\n localName: \"Daňové identifikační číslo\",\n abbreviation: \"DIČ\",\n aliases: [\"DIČ\", \"daňové identifikační číslo\"] as const,\n candidatePattern: \"CZ\\\\d{8,10}\",\n scope: \"country\",\n country: \"CZ\",\n entityType: \"any\",\n sourceUrl: \"https://adisspr.mfcr.cz/dpr/DphReg\",\n lengths: [8, 9, 10] as const,\n examples: [\"25123891\", \"7103192745\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default dic;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;AAyBA,MAAM,cAAc;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAExC,MAAM,WAAW,UAA0B;CACzC,MAAM,IAAI,MAAM,OAAO,IAAI;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,OAAO,EAAE,MAAM,CAAC;CAElB,OAAO;AACT;AAEA,MAAM,cAAc,UAA2B;CAM7C,MAAM,OAAO,KALD,YACV,MAAM,MAAM,GAAG,CAAC,GAChB,aACA,EAEkB,KAAK;CAEzB,QADc,QAAQ,IAAI,IAAI,MAAM,QACnB,OAAO,MAAM,EAAE;AAClC;AAEA,MAAM,gBAAgB,UAA2B;CAU/C,SAFK,MAAQ,KAND,YACV,MAAM,MAAM,GAAG,CAAC,GAChB;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC,GACpB,EAGkB,KAAK,KAAM,MAAM,MAAO,KAAM,MAChD,OACe,OAAO,MAAM,EAAE;AAClC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,SAAS,KAAK,EAAE,SAAS,IAC7B,OAAO,IACL,kBACA,6CACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAIF,IAAI,EAAE,WAAW,GAAG;EAClB,IAAI,EAAE,OAAO,KACX,OAAO,IACL,qBACA,iCACF;EAEF,IAAI,CAAC,WAAW,CAAC,GACf,OAAO,IACL,oBACA,gCACF;EAEF,OAAO;GAAE,OAAO;GAAM,SAAS;EAAE;CACnC;CAGA,IAAI,EAAE,WAAW,KAAK,EAAE,OAAO,KAAK;EAClC,IAAI,CAAC,aAAa,CAAC,GACjB,OAAO,IACL,oBACA,yCACF;EAEF,OAAO;GAAE,OAAO;GAAM,SAAS;EAAE;CACnC;CAGA,OAAOA,WAAW,CAAC;AACrB;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAE7B,MAAM,UADQ,OAAO,UAAU,GAAG,CAAC,CACf,IAAI,aAAa,CAAC;CAEtC,MAAM,OAAO,KADD,YAAY,SAAS,aAAa,EAC1B,KAAK;CACzB,MAAM,QAAQ,QAAQ,IAAI,IAAI,MAAM;CACpC,OAAO,UAAU,OAAO,KAAK;AAC/B;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,4BAA4B;CAC7C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,SAAS;EAAC;EAAG;EAAG;CAAE;CAClB,UAAU,CAAC,YAAY,YAAY;CACnC;CACA;CACA;CACA;AACF"}
|
package/dist/cz/ico.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/cz/ico.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -7,7 +7,7 @@ declare const format: (value: string) => string;
|
|
|
7
7
|
/** Generate a random valid ICO. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** Czech Company Identification Number. */
|
|
10
|
-
declare const ico:
|
|
10
|
+
declare const ico: CountryValidator<"CZ">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, ico as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=ico.d.ts.map
|
package/dist/cz/ico.js
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
|
+
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
1
2
|
import { clean } from "../_util/clean.js";
|
|
2
3
|
import { randomDigits } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
5
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { weightedSum } from "../_checksums/weighted-sum.js";
|
|
6
6
|
//#region src/cz/ico.ts
|
|
7
|
-
/**
|
|
8
|
-
* IČO (Identifikační číslo osoby).
|
|
9
|
-
*
|
|
10
|
-
* Czech company identification number. 8 digits
|
|
11
|
-
* with a weighted checksum. Assigned by the Czech
|
|
12
|
-
* Statistical Office.
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.czso.cz/
|
|
15
|
-
*/
|
|
16
7
|
const WEIGHTS = [
|
|
17
8
|
8,
|
|
18
9
|
7,
|
|
@@ -53,6 +44,7 @@ const ico = {
|
|
|
53
44
|
"identifikační číslo"
|
|
54
45
|
],
|
|
55
46
|
candidatePattern: "\\d{8}",
|
|
47
|
+
scope: "country",
|
|
56
48
|
country: "CZ",
|
|
57
49
|
entityType: "company",
|
|
58
50
|
description: "8-digit company ID assigned by the Czech Statistical Office",
|
package/dist/cz/ico.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ico.js","names":[],"sources":["../../src/cz/ico.ts"],"sourcesContent":["/**\n * IČO (Identifikační číslo osoby).\n *\n * Czech company identification number. 8 digits\n * with a weighted checksum. Assigned by the Czech\n * Statistical Office.\n *\n * @see https://www.czso.cz/\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"ico.js","names":[],"sources":["../../src/cz/ico.ts"],"sourcesContent":["/**\n * IČO (Identifikační číslo osoby).\n *\n * Czech company identification number. 8 digits\n * with a weighted checksum. Assigned by the Czech\n * Statistical Office.\n *\n * @see https://www.czso.cz/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [8, 7, 6, 5, 4, 3, 2] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"IČO must be exactly 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"IČO must contain only digits\",\n );\n }\n const sum = weightedSum(v.slice(0, 7), WEIGHTS, 11);\n const v11 = (11 - sum) % 11;\n const check = v11 === 0 ? 1 : v11 % 10;\n if (check !== Number(v[7])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"IČO check digit does not match\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid ICO. */\nconst generate = (): string => {\n const payload = randomDigits(7);\n const sum = weightedSum(payload, WEIGHTS, 11);\n const v11 = (11 - sum) % 11;\n const check = v11 === 0 ? 1 : v11 % 10;\n return `${payload}${String(check)}`;\n};\n\n/** Czech Company Identification Number. */\nconst ico: CountryValidator<\"CZ\"> = {\n name: \"Czech Company ID\",\n localName: \"Identifikační číslo osoby\",\n abbreviation: \"IČO\",\n aliases: [\"IČO\", \"IČ\", \"identifikační číslo\"] as const,\n candidatePattern: \"\\\\d{8}\",\n scope: \"country\",\n country: \"CZ\",\n entityType: \"company\",\n description:\n \"8-digit company ID assigned by the Czech Statistical Office\",\n sourceUrl: \"https://www.czso.cz/\",\n lengths: [8] as const,\n examples: [\"25123891\", \"27074358\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ico;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;AAqBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEpC,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAGF,MAAM,OAAO,KADD,YAAY,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,EAC5B,KAAK;CAEzB,KADc,QAAQ,IAAI,IAAI,MAAM,QACtB,OAAO,EAAE,EAAE,GACvB,OAAO,IACL,oBACA,gCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,CAAC;CAE9B,MAAM,OAAO,KADD,YAAY,SAAS,SAAS,EACtB,KAAK;CACzB,MAAM,QAAQ,QAAQ,IAAI,IAAI,MAAM;CACpC,OAAO,GAAG,UAAU,OAAO,KAAK;AAClC;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EAAC;EAAO;EAAM;CAAqB;CAC5C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CACF,WAAW;CACX,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,YAAY,UAAU;CACjC;CACA;CACA;CACA;AACF"}
|
package/dist/cz/rc.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/cz/rc.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -15,7 +15,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
15
15
|
*/
|
|
16
16
|
declare const generate: () => string;
|
|
17
17
|
/** Czech/Slovak Birth Number. */
|
|
18
|
-
declare const rc:
|
|
18
|
+
declare const rc: CountryValidator<"CZ", ParsedPersonId>;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { compact, rc as default, format, generate, parse, validate };
|
|
21
21
|
//# sourceMappingURL=rc.d.ts.map
|
package/dist/cz/rc.js
CHANGED
|
@@ -1,34 +1,9 @@
|
|
|
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
|
//#region src/cz/rc.ts
|
|
7
|
-
/**
|
|
8
|
-
* RČ (Rodné číslo).
|
|
9
|
-
*
|
|
10
|
-
* Czech and Slovak national identifier (birth
|
|
11
|
-
* number). 9 or 10 digits encoding date of birth
|
|
12
|
-
* and gender. 10-digit numbers (post-1954) must
|
|
13
|
-
* be divisible by 11.
|
|
14
|
-
*
|
|
15
|
-
* Women have 50 added to the month. For modern
|
|
16
|
-
* 10-digit numbers, an additional +20 offset may
|
|
17
|
-
* be used when the daily serial range is exhausted
|
|
18
|
-
* (+70 for women).
|
|
19
|
-
*
|
|
20
|
-
* Canonical source:
|
|
21
|
-
* - Czech Ministry of the Interior guidance on rodne
|
|
22
|
-
* cislo, with the modern overflow-month rules
|
|
23
|
-
*
|
|
24
|
-
* We use this to keep the 9-digit historical form
|
|
25
|
-
* valid while rejecting modern +20/+70 month offsets
|
|
26
|
-
* on 9-digit numbers. Those overflow offsets are a
|
|
27
|
-
* modern rule for 10-digit values.
|
|
28
|
-
*
|
|
29
|
-
* @see https://www.mvcr.cz/mvcren/docDetail.aspx?docid=21975362&doctype=ART
|
|
30
|
-
* @see Law 133/2000 Sb.
|
|
31
|
-
*/
|
|
32
7
|
const compact = (value) => clean(value, " /");
|
|
33
8
|
const decodeMonth = (rawMonth, year, length) => {
|
|
34
9
|
const candidates = length === 10 && year >= 2004 ? [
|
|
@@ -123,6 +98,7 @@ const rc = {
|
|
|
123
98
|
"birth number"
|
|
124
99
|
],
|
|
125
100
|
candidatePattern: "\\d{6}/\\d{3,4}",
|
|
101
|
+
scope: "country",
|
|
126
102
|
country: "CZ",
|
|
127
103
|
entityType: "person",
|
|
128
104
|
description: "Czech/Slovak national identifier encoding birth date and gender",
|
package/dist/cz/rc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rc.js","names":[],"sources":["../../src/cz/rc.ts"],"sourcesContent":["/**\n * RČ (Rodné číslo).\n *\n * Czech and Slovak national identifier (birth\n * number). 9 or 10 digits encoding date of birth\n * and gender. 10-digit numbers (post-1954) must\n * be divisible by 11.\n *\n * Women have 50 added to the month. For modern\n * 10-digit numbers, an additional +20 offset may\n * be used when the daily serial range is exhausted\n * (+70 for women).\n *\n * Canonical source:\n * - Czech Ministry of the Interior guidance on rodne\n * cislo, with the modern overflow-month rules\n *\n * We use this to keep the 9-digit historical form\n * valid while rejecting modern +20/+70 month offsets\n * on 9-digit numbers. Those overflow offsets are a\n * modern rule for 10-digit values.\n *\n * @see https://www.mvcr.cz/mvcren/docDetail.aspx?docid=21975362&doctype=ART\n * @see Law 133/2000 Sb.\n */\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\
|
|
1
|
+
{"version":3,"file":"rc.js","names":[],"sources":["../../src/cz/rc.ts"],"sourcesContent":["/**\n * RČ (Rodné číslo).\n *\n * Czech and Slovak national identifier (birth\n * number). 9 or 10 digits encoding date of birth\n * and gender. 10-digit numbers (post-1954) must\n * be divisible by 11.\n *\n * Women have 50 added to the month. For modern\n * 10-digit numbers, an additional +20 offset may\n * be used when the daily serial range is exhausted\n * (+70 for women).\n *\n * Canonical source:\n * - Czech Ministry of the Interior guidance on rodne\n * cislo, with the modern overflow-month rules\n *\n * We use this to keep the 9-digit historical form\n * valid while rejecting modern +20/+70 month offsets\n * on 9-digit numbers. Those overflow offsets are a\n * modern rule for 10-digit values.\n *\n * @see https://www.mvcr.cz/mvcren/docDetail.aspx?docid=21975362&doctype=ART\n * @see Law 133/2000 Sb.\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 { 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 decodeMonth = (\n rawMonth: number,\n year: number,\n length: number,\n): number | null => {\n const candidates =\n length === 10 && year >= 2004\n ? [0, 50, 20, 70]\n : [0, 50];\n for (const offset of candidates) {\n const month = rawMonth - offset;\n if (month >= 1 && month <= 12) {\n return month;\n }\n }\n return null;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9 && v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Birth number must be 9 or 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Birth number must contain only digits\",\n );\n }\n\n const yy = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const dd = Number(v.slice(4, 6));\n\n // Resolve full year\n let year = yy + 1900;\n if (v.length === 9) {\n // 9-digit: pre-1954 only\n if (year >= 1980) year -= 100;\n if (year > 1953) {\n return err(\n \"INVALID_COMPONENT\",\n \"9-digit birth numbers are pre-1954 only\",\n );\n }\n } else {\n // 10-digit: if year < 1954, it's 2000s\n if (year < 1954) year += 100;\n }\n\n const month = decodeMonth(mm, year, v.length);\n if (month === null) {\n return err(\n \"INVALID_COMPONENT\",\n \"Birth number contains an invalid month\",\n );\n }\n\n if (dd < 1 || dd > 31) {\n return err(\n \"INVALID_COMPONENT\",\n \"Birth number contains an invalid day\",\n );\n }\n\n // Validate the actual date\n if (!isValidDate(year, month, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Birth number contains an invalid date\",\n );\n }\n\n // 10-digit: check digit is first 9 digits\n // mod 11 mod 10\n if (v.length === 10) {\n const front = Number(v.slice(0, 9));\n const check = (front % 11) % 10;\n if (String(check) !== v[9]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Birth number is not divisible by 11\",\n );\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, 6)}/${v.slice(6)}`;\n};\n\n/**\n * Extract birth date and gender from a birth number.\n * Returns null if the value is not valid.\n */\nconst parse = (value: string): ParsedPersonId | null => {\n const result = validate(value);\n if (!result.valid) return null;\n\n const v = result.compact;\n const yy = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const dd = Number(v.slice(4, 6));\n\n const gender = mm >= 50 ? \"female\" : \"male\";\n let year = yy + 1900;\n if (v.length === 10 && year < 1954) year += 100;\n if (v.length === 9 && year >= 1980) year -= 100;\n\n const month = decodeMonth(mm, year, v.length);\n if (month === null) {\n return null;\n }\n\n return {\n birthDate: new Date(year, month - 1, dd),\n gender,\n };\n};\n\n/**\n * Generate a random valid 10-digit birth number.\n * Uses a random date between 1954 and 2024.\n */\nconst generate = (): string => {\n const year = randomInt(1954, 2024);\n const month = randomInt(1, 12);\n const day = randomInt(1, 28);\n const isFemale = Math.random() < 0.5;\n const mm = isFemale ? month + 50 : month;\n\n const yy = String(year % 100).padStart(2, \"0\");\n const mmStr = String(mm).padStart(2, \"0\");\n const dd = String(day).padStart(2, \"0\");\n\n const datePart = `${yy}${mmStr}${dd}`;\n for (let seq = 0; seq < 1000; seq++) {\n const seqStr = String(seq).padStart(3, \"0\");\n const front = `${datePart}${seqStr}`;\n const num = Number(front);\n const check = (num % 11) % 10;\n const result = `${front}${String(check)}`;\n if (validate(result).valid) {\n return result;\n }\n }\n\n throw new Error(\"Failed to generate valid birth number\");\n};\n\n/** Czech/Slovak Birth Number. */\nconst rc: CountryValidator<\"CZ\", ParsedPersonId> = {\n name: \"Czech Birth Number\",\n localName: \"Rodné číslo\",\n abbreviation: \"RČ\",\n aliases: [\"rodné číslo\", \"RČ\", \"birth number\"] as const,\n candidatePattern: \"\\\\d{6}/\\\\d{3,4}\",\n scope: \"country\",\n country: \"CZ\",\n entityType: \"person\",\n description:\n \"Czech/Slovak national identifier encoding birth date and gender\",\n sourceUrl:\n \"https://www.mvcr.cz/mvcren/docDetail.aspx?docid=21975362&doctype=ART\",\n lengths: [9, 10] as const,\n examples: [\"7103192745\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default rc;\nexport { compact, format, generate, parse, validate };\n"],"mappings":"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"}
|
package/dist/de/handelsreg.d.ts
CHANGED
|
@@ -1,8 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/de/handelsreg.d.ts
|
|
4
4
|
/** Generate a random valid Handelsregisternummer. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* Handelsregisternummer (German Company Register Number).
|
|
8
|
+
*
|
|
9
|
+
* German commercial register number assigned by the
|
|
10
|
+
* local court (Amtsgericht). Format: register type
|
|
11
|
+
* (HRA, HRB, GnR, PR, VR) + number.
|
|
12
|
+
*
|
|
13
|
+
* HRA = Handelsregister Abteilung A (partnerships,
|
|
14
|
+
* sole proprietors). HRB = Abteilung B (corporations).
|
|
15
|
+
* GnR = Genossenschaftsregister.
|
|
16
|
+
* PR = Partnerschaftsregister.
|
|
17
|
+
* VR = Vereinsregister.
|
|
18
|
+
*
|
|
19
|
+
* No check digit; validation is structural only.
|
|
20
|
+
*
|
|
21
|
+
* @see https://de.wikipedia.org/wiki/Handelsregister_(Deutschland)
|
|
22
|
+
*/
|
|
6
23
|
/**
|
|
7
24
|
* Strip separators and normalize to canonical form.
|
|
8
25
|
* Accepts "HRB 12345", "HRB12345", "hrb 12345".
|
|
@@ -11,7 +28,7 @@ declare const compact: (value: string) => string;
|
|
|
11
28
|
declare const validate: (value: string) => ValidateResult;
|
|
12
29
|
declare const format: (value: string) => string;
|
|
13
30
|
/** German Company Register Number. */
|
|
14
|
-
declare const handelsreg:
|
|
31
|
+
declare const handelsreg: CountryValidator<"DE">;
|
|
15
32
|
//#endregion
|
|
16
33
|
export { compact, handelsreg as default, format, generate, validate };
|
|
17
34
|
//# sourceMappingURL=handelsreg.d.ts.map
|
package/dist/de/handelsreg.js
CHANGED
|
@@ -2,23 +2,6 @@ import { clean } from "../_util/clean.js";
|
|
|
2
2
|
import { randomDigits, randomPick } from "../_util/generate.js";
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
//#region src/de/handelsreg.ts
|
|
5
|
-
/**
|
|
6
|
-
* Handelsregisternummer (German Company Register Number).
|
|
7
|
-
*
|
|
8
|
-
* German commercial register number assigned by the
|
|
9
|
-
* local court (Amtsgericht). Format: register type
|
|
10
|
-
* (HRA, HRB, GnR, PR, VR) + number.
|
|
11
|
-
*
|
|
12
|
-
* HRA = Handelsregister Abteilung A (partnerships,
|
|
13
|
-
* sole proprietors). HRB = Abteilung B (corporations).
|
|
14
|
-
* GnR = Genossenschaftsregister.
|
|
15
|
-
* PR = Partnerschaftsregister.
|
|
16
|
-
* VR = Vereinsregister.
|
|
17
|
-
*
|
|
18
|
-
* No check digit; validation is structural only.
|
|
19
|
-
*
|
|
20
|
-
* @see https://de.wikipedia.org/wiki/Handelsregister_(Deutschland)
|
|
21
|
-
*/
|
|
22
5
|
const GENERATE_TYPES = [
|
|
23
6
|
"HRA",
|
|
24
7
|
"HRB",
|
|
@@ -71,6 +54,7 @@ const handelsreg = {
|
|
|
71
54
|
"HRA"
|
|
72
55
|
],
|
|
73
56
|
candidatePattern: "(?:HRA|HRB|GnR|PR|VR)\\s*\\d{1,7}",
|
|
57
|
+
scope: "country",
|
|
74
58
|
country: "DE",
|
|
75
59
|
entityType: "company",
|
|
76
60
|
sourceUrl: "https://de.wikipedia.org/wiki/Handelsregister_(Deutschland)",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handelsreg.js","names":[],"sources":["../../src/de/handelsreg.ts"],"sourcesContent":["const GENERATE_TYPES = [\n \"HRA\",\n \"HRB\",\n \"GNR\",\n \"PR\",\n \"VR\",\n] as const;\n\n/** Generate a random valid Handelsregisternummer. */\nconst generate = (): string => {\n const type = randomPick(GENERATE_TYPES);\n const number = randomDigits(5);\n return `${type} ${number}`;\n};\n\n/**\n * Handelsregisternummer (German Company Register Number).\n *\n * German commercial register number assigned by the\n * local court (Amtsgericht). Format: register type\n * (HRA, HRB, GnR, PR, VR) + number.\n *\n * HRA = Handelsregister Abteilung A (partnerships,\n * sole proprietors). HRB = Abteilung B (corporations).\n * GnR = Genossenschaftsregister.\n * PR = Partnerschaftsregister.\n * VR = Vereinsregister.\n *\n * No check digit; validation is structural only.\n *\n * @see https://de.wikipedia.org/wiki/Handelsregister_(Deutschland)\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\
|
|
1
|
+
{"version":3,"file":"handelsreg.js","names":[],"sources":["../../src/de/handelsreg.ts"],"sourcesContent":["const GENERATE_TYPES = [\n \"HRA\",\n \"HRB\",\n \"GNR\",\n \"PR\",\n \"VR\",\n] as const;\n\n/** Generate a random valid Handelsregisternummer. */\nconst generate = (): string => {\n const type = randomPick(GENERATE_TYPES);\n const number = randomDigits(5);\n return `${type} ${number}`;\n};\n\n/**\n * Handelsregisternummer (German Company Register Number).\n *\n * German commercial register number assigned by the\n * local court (Amtsgericht). Format: register type\n * (HRA, HRB, GnR, PR, VR) + number.\n *\n * HRA = Handelsregister Abteilung A (partnerships,\n * sole proprietors). HRB = Abteilung B (corporations).\n * GnR = Genossenschaftsregister.\n * PR = Partnerschaftsregister.\n * VR = Vereinsregister.\n *\n * No check digit; validation is structural only.\n *\n * @see https://de.wikipedia.org/wiki/Handelsregister_(Deutschland)\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nconst REGISTER_TYPES = new Set([\n \"HRA\",\n \"HRB\",\n \"GNR\",\n \"PR\",\n \"VR\",\n]);\n\n/**\n * Strip separators and normalize to canonical form.\n * Accepts \"HRB 12345\", \"HRB12345\", \"hrb 12345\".\n */\nconst compact = (value: string): string => {\n const v = clean(value, \" -.\").trim().toUpperCase();\n const match = v.match(/^(HRA|HRB|GNR|PR|VR)(\\d{1,7})$/);\n if (!match) return v;\n return `${match[1]} ${match[2]}`;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = clean(value, \" -.\").trim().toUpperCase();\n\n const match = v.match(/^([A-Z]{2,3})(\\d{1,7})$/);\n if (!match) {\n return err(\n \"INVALID_FORMAT\",\n \"Handelsregisternummer must be a register type \" +\n \"(HRA, HRB, GnR, PR, VR) followed by \" +\n \"1-7 digits\",\n );\n }\n\n // SAFETY: both capture groups are required, so a\n // successful match always populates [1] and [2].\n // eslint-disable-next-line no-non-null-assertion\n const type = match[1]!;\n // eslint-disable-next-line no-non-null-assertion\n const number = match[2]!;\n\n if (!REGISTER_TYPES.has(type)) {\n return err(\n \"INVALID_COMPONENT\",\n `Unrecognised register type \"${type}\"`,\n );\n }\n\n return {\n valid: true,\n compact: `${type} ${number}`,\n };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** German Company Register Number. */\nconst handelsreg: CountryValidator<\"DE\"> = {\n name: \"German Company Register Number\",\n localName: \"Handelsregisternummer\",\n abbreviation: \"HReg\",\n aliases: [\n \"Handelsregisternummer\",\n \"Handelsregister\",\n \"HRB\",\n \"HRA\",\n ] as const,\n candidatePattern: \"(?:HRA|HRB|GnR|PR|VR)\\\\s*\\\\d{1,7}\",\n scope: \"country\",\n country: \"DE\",\n entityType: \"company\",\n sourceUrl:\n \"https://de.wikipedia.org/wiki/Handelsregister_(Deutschland)\",\n examples: [\"HRB 12345\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default handelsreg;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;AAAA,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAM,iBAAyB;CAG7B,OAAO,GAFM,WAAW,cAEX,EAAE,GADA,aAAa,CACL;AACzB;AA6BA,MAAM,iBAAiB,IAAI,IAAI;CAC7B;CACA;CACA;CACA;CACA;AACF,CAAC;;;;;AAMD,MAAM,WAAW,UAA0B;CACzC,MAAM,IAAI,MAAM,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY;CACjD,MAAM,QAAQ,EAAE,MAAM,gCAAgC;CACtD,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO,GAAG,MAAM,GAAG,GAAG,MAAM;AAC9B;AAEA,MAAM,YAAY,UAAkC;CAGlD,MAAM,QAFI,MAAM,OAAO,KAAK,EAAE,KAAK,EAAE,YAEvB,EAAE,MAAM,yBAAyB;CAC/C,IAAI,CAAC,OACH,OAAO,IACL,kBACA,8FAGF;CAMF,MAAM,OAAO,MAAM;CAEnB,MAAM,SAAS,MAAM;CAErB,IAAI,CAAC,eAAe,IAAI,IAAI,GAC1B,OAAO,IACL,qBACA,+BAA+B,KAAK,EACtC;CAGF,OAAO;EACL,OAAO;EACP,SAAS,GAAG,KAAK,GAAG;CACtB;AACF;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,aAAqC;CACzC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/de/idnr.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/de/idnr.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -7,7 +7,7 @@ declare const format: (value: string) => string;
|
|
|
7
7
|
/** Generate a random valid German IdNr. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** German Personal Tax ID. */
|
|
10
|
-
declare const idnr:
|
|
10
|
+
declare const idnr: CountryValidator<"DE">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, idnr as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=idnr.d.ts.map
|
package/dist/de/idnr.js
CHANGED
|
@@ -1,20 +1,9 @@
|
|
|
1
|
+
import { mod1110checkDigit, mod1110validate } from "../_checksums/mod1110.js";
|
|
1
2
|
import { clean } from "../_util/clean.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 { mod1110checkDigit, mod1110validate } from "../_checksums/mod1110.js";
|
|
6
6
|
//#region src/de/idnr.ts
|
|
7
|
-
/**
|
|
8
|
-
* IdNr (Steuerliche Identifikationsnummer).
|
|
9
|
-
*
|
|
10
|
-
* German personal tax identification number.
|
|
11
|
-
* 11 digits; the last digit is a check digit
|
|
12
|
-
* (ISO 7064 Mod 11,10). Exactly one digit
|
|
13
|
-
* appears twice or three times; the rest are
|
|
14
|
-
* unique. The first digit cannot be 0.
|
|
15
|
-
*
|
|
16
|
-
* @see https://www.bzst.de/DE/Privatpersonen/SteuerlicheIdentifikationsnummer/steuerlicheidentifikationsnummer_node.html
|
|
17
|
-
*/
|
|
18
7
|
const compact = (value) => clean(value, " -/");
|
|
19
8
|
/**
|
|
20
9
|
* Validate digit distribution: in the first 10
|
|
@@ -87,6 +76,7 @@ const idnr = {
|
|
|
87
76
|
"Steuer-ID"
|
|
88
77
|
],
|
|
89
78
|
candidatePattern: "\\d{2}\\s?\\d{3}\\s?\\d{3}\\s?\\d{3}",
|
|
79
|
+
scope: "country",
|
|
90
80
|
country: "DE",
|
|
91
81
|
entityType: "person",
|
|
92
82
|
sourceUrl: "https://www.bzst.de/DE/Privatpersonen/SteuerlicheIdentifikationsnummer/steuerlicheidentifikationsnummer_node.html",
|
package/dist/de/idnr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idnr.js","names":[],"sources":["../../src/de/idnr.ts"],"sourcesContent":["/**\n * IdNr (Steuerliche Identifikationsnummer).\n *\n * German personal tax identification number.\n * 11 digits; the last digit is a check digit\n * (ISO 7064 Mod 11,10). Exactly one digit\n * appears twice or three times; the rest are\n * unique. The first digit cannot be 0.\n *\n * @see https://www.bzst.de/DE/Privatpersonen/SteuerlicheIdentifikationsnummer/steuerlicheidentifikationsnummer_node.html\n */\n\nimport {\n mod1110validate,\n mod1110checkDigit,\n} from \"#checksums/mod1110\";\nimport { clean } from \"#util/clean\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"idnr.js","names":[],"sources":["../../src/de/idnr.ts"],"sourcesContent":["/**\n * IdNr (Steuerliche Identifikationsnummer).\n *\n * German personal tax identification number.\n * 11 digits; the last digit is a check digit\n * (ISO 7064 Mod 11,10). Exactly one digit\n * appears twice or three times; the rest are\n * unique. The first digit cannot be 0.\n *\n * @see https://www.bzst.de/DE/Privatpersonen/SteuerlicheIdentifikationsnummer/steuerlicheidentifikationsnummer_node.html\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport {\n mod1110validate,\n mod1110checkDigit,\n} from \"#checksums/mod1110\";\nimport { clean } from \"#util/clean\";\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\n/**\n * Validate digit distribution: in the first 10\n * digits, exactly one digit appears 2 or 3\n * times; all others appear exactly once.\n */\nconst validDistribution = (value: string): boolean => {\n const counts = Array.from<number>({ length: 10 }).fill(0);\n for (let i = 0; i < 10; i++) {\n const idx = Number(value.charAt(i));\n const prev = counts[idx];\n if (prev !== undefined) counts[idx] = prev + 1;\n }\n let doubles = 0;\n let triples = 0;\n for (const c of counts) {\n if (c === 2) doubles++;\n if (c === 3) triples++;\n if (c > 3) return false;\n }\n // Exactly one digit repeated (2 or 3 times)\n return (\n (doubles === 1 && triples === 0) ||\n (doubles === 0 && triples === 1)\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 \"German IdNr must be 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"German IdNr must contain only digits\",\n );\n }\n if (v[0] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"German IdNr cannot start with 0\",\n );\n }\n if (!validDistribution(v)) {\n return err(\n \"INVALID_COMPONENT\",\n \"German IdNr digit distribution invalid\",\n );\n }\n if (!mod1110validate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"German IdNr check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)} ${v.slice(2, 5)} ${v.slice(5, 8)} ${v.slice(8)}`;\n};\n\n/** Generate a random valid German IdNr. */\nconst generate = (): string => {\n for (;;) {\n const repeated = randomInt(0, 9);\n const times = Math.random() < 0.8 ? 2 : 3;\n const pool: number[] = [];\n for (let d = 0; d < 10; d++) {\n const count = d === repeated ? times : 1;\n for (let t = 0; t < count; t++) pool.push(d);\n }\n while (pool.length < 10) pool.push(randomInt(0, 9));\n for (let i = pool.length - 1; i > 0; i--) {\n const j = randomInt(0, i);\n // SAFETY: i and j are valid indices of `pool`\n // (i > 0, j ∈ [0, i]).\n // eslint-disable-next-line no-non-null-assertion\n [pool[i], pool[j]] = [pool[j]!, pool[i]!];\n }\n if (pool[0] === 0) continue;\n const payload = pool.slice(0, 10).join(\"\");\n if (!validDistribution(payload)) continue;\n const check = mod1110checkDigit(payload);\n const c = payload + String(check);\n if (validate(c).valid) return c;\n }\n};\n\n/** German Personal Tax ID. */\nconst idnr: CountryValidator<\"DE\"> = {\n name: \"German Tax ID\",\n localName: \"Steuerliche Identifikationsnummer\",\n abbreviation: \"IdNr\",\n aliases: [\n \"Steuerliche Identifikationsnummer\",\n \"IdNr\",\n \"Steuer-ID\",\n ] as const,\n candidatePattern: \"\\\\d{2}\\\\s?\\\\d{3}\\\\s?\\\\d{3}\\\\s?\\\\d{3}\",\n scope: \"country\",\n country: \"DE\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.bzst.de/DE/Privatpersonen/SteuerlicheIdentifikationsnummer/steuerlicheidentifikationsnummer_node.html\",\n examples: [\"36574261809\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default idnr;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AA0BA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;;;;;;AAOpB,MAAM,qBAAqB,UAA2B;CACpD,MAAM,SAAS,MAAM,KAAa,EAAE,QAAQ,GAAG,CAAC,EAAE,KAAK,CAAC;CACxD,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;EAC3B,MAAM,MAAM,OAAO,MAAM,OAAO,CAAC,CAAC;EAClC,MAAM,OAAO,OAAO;EACpB,IAAI,SAAS,KAAA,GAAW,OAAO,OAAO,OAAO;CAC/C;CACA,IAAI,UAAU;CACd,IAAI,UAAU;CACd,KAAK,MAAM,KAAK,QAAQ;EACtB,IAAI,MAAM,GAAG;EACb,IAAI,MAAM,GAAG;EACb,IAAI,IAAI,GAAG,OAAO;CACpB;CAEA,OACG,YAAY,KAAK,YAAY,KAC7B,YAAY,KAAK,YAAY;AAElC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,sCACF;CAEF,IAAI,EAAE,OAAO,KACX,OAAO,IACL,qBACA,iCACF;CAEF,IAAI,CAAC,kBAAkB,CAAC,GACtB,OAAO,IACL,qBACA,wCACF;CAEF,IAAI,CAAC,gBAAgB,CAAC,GACpB,OAAO,IACL,oBACA,kCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;AACxE;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,WAAW,UAAU,GAAG,CAAC;EAC/B,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAM,IAAI;EACxC,MAAM,OAAiB,CAAC;EACxB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;GAC3B,MAAM,QAAQ,MAAM,WAAW,QAAQ;GACvC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK,KAAK,KAAK,CAAC;EAC7C;EACA,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,GAAG,CAAC,CAAC;EAClD,KAAK,IAAI,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK;GACxC,MAAM,IAAI,UAAU,GAAG,CAAC;GAIxB,CAAC,KAAK,IAAI,KAAK,MAAM,CAAC,KAAK,IAAK,KAAK,EAAG;EAC1C;EACA,IAAI,KAAK,OAAO,GAAG;EACnB,MAAM,UAAU,KAAK,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE;EACzC,IAAI,CAAC,kBAAkB,OAAO,GAAG;EACjC,MAAM,QAAQ,kBAAkB,OAAO;EACvC,MAAM,IAAI,UAAU,OAAO,KAAK;EAChC,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,OAA+B;CACnC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
|
package/dist/de/stnr.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/de/stnr.d.ts
|
|
4
4
|
/**
|
|
@@ -6,6 +6,21 @@ import { ValidateResult, Validator } from "../types.js";
|
|
|
6
6
|
* Uses Berlin regional format (FFBBBUUUUP, 10 digits).
|
|
7
7
|
*/
|
|
8
8
|
declare const generate: () => string;
|
|
9
|
+
/**
|
|
10
|
+
* StNr (Steuernummer).
|
|
11
|
+
*
|
|
12
|
+
* German tax number assigned by the local tax office.
|
|
13
|
+
* Regional format: 10 or 11 digits. Unified federal
|
|
14
|
+
* format: 13 digits (prefixed with a 2–4 digit BUFA
|
|
15
|
+
* code). Structure varies by federal state.
|
|
16
|
+
*
|
|
17
|
+
* The number encodes: BUFA (Bundesfinanzamtsnummer),
|
|
18
|
+
* district code, serial number, and check digit. No
|
|
19
|
+
* algorithmic check digit validation is standardised
|
|
20
|
+
* across all states; validation is format-only.
|
|
21
|
+
*
|
|
22
|
+
* @see https://de.wikipedia.org/wiki/Steuernummer
|
|
23
|
+
*/
|
|
9
24
|
declare const compact: (value: string) => string;
|
|
10
25
|
declare const validate: (value: string) => ValidateResult;
|
|
11
26
|
/**
|
|
@@ -15,7 +30,7 @@ declare const validate: (value: string) => ValidateResult;
|
|
|
15
30
|
*/
|
|
16
31
|
declare const format: (value: string) => string;
|
|
17
32
|
/** German Tax Number (Steuernummer). */
|
|
18
|
-
declare const stnr:
|
|
33
|
+
declare const stnr: CountryValidator<"DE">;
|
|
19
34
|
//#endregion
|
|
20
35
|
export { compact, stnr as default, format, generate, validate };
|
|
21
36
|
//# sourceMappingURL=stnr.d.ts.map
|
package/dist/de/stnr.js
CHANGED
|
@@ -4,21 +4,6 @@ import { err } from "../_util/result.js";
|
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/de/stnr.ts
|
|
6
6
|
/**
|
|
7
|
-
* StNr (Steuernummer).
|
|
8
|
-
*
|
|
9
|
-
* German tax number assigned by the local tax office.
|
|
10
|
-
* Regional format: 10 or 11 digits. Unified federal
|
|
11
|
-
* format: 13 digits (prefixed with a 2–4 digit BUFA
|
|
12
|
-
* code). Structure varies by federal state.
|
|
13
|
-
*
|
|
14
|
-
* The number encodes: BUFA (Bundesfinanzamtsnummer),
|
|
15
|
-
* district code, serial number, and check digit. No
|
|
16
|
-
* algorithmic check digit validation is standardised
|
|
17
|
-
* across all states; validation is format-only.
|
|
18
|
-
*
|
|
19
|
-
* @see https://de.wikipedia.org/wiki/Steuernummer
|
|
20
|
-
*/
|
|
21
|
-
/**
|
|
22
7
|
* Generate a random valid Steuernummer.
|
|
23
8
|
* Uses Berlin regional format (FFBBBUUUUP, 10 digits).
|
|
24
9
|
*/
|
|
@@ -123,6 +108,7 @@ const stnr = {
|
|
|
123
108
|
abbreviation: "StNr",
|
|
124
109
|
aliases: ["Steuernummer", "St.Nr."],
|
|
125
110
|
candidatePattern: "\\d{2,4}/\\d{3,4}/\\d{4,5}",
|
|
111
|
+
scope: "country",
|
|
126
112
|
country: "DE",
|
|
127
113
|
entityType: "any",
|
|
128
114
|
description: "German tax number assigned by the local tax office, varies by federal state",
|
package/dist/de/stnr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stnr.js","names":[],"sources":["../../src/de/stnr.ts"],"sourcesContent":["/**\n * Generate a random valid Steuernummer.\n * Uses Berlin regional format (FFBBBUUUUP, 10 digits).\n */\nconst generate = (): string => {\n const ff = randomDigits(2);\n const bbb = randomDigits(3);\n const uuuu = randomDigits(4);\n const p = randomDigits(1);\n return `${ff}${bbb}${uuuu}${p}`;\n};\n\n/**\n * StNr (Steuernummer).\n *\n * German tax number assigned by the local tax office.\n * Regional format: 10 or 11 digits. Unified federal\n * format: 13 digits (prefixed with a 2–4 digit BUFA\n * code). Structure varies by federal state.\n *\n * The number encodes: BUFA (Bundesfinanzamtsnummer),\n * district code, serial number, and check digit. No\n * algorithmic check digit validation is standardised\n * across all states; validation is format-only.\n *\n * @see https://de.wikipedia.org/wiki/Steuernummer\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"stnr.js","names":[],"sources":["../../src/de/stnr.ts"],"sourcesContent":["/**\n * Generate a random valid Steuernummer.\n * Uses Berlin regional format (FFBBBUUUUP, 10 digits).\n */\nconst generate = (): string => {\n const ff = randomDigits(2);\n const bbb = randomDigits(3);\n const uuuu = randomDigits(4);\n const p = randomDigits(1);\n return `${ff}${bbb}${uuuu}${p}`;\n};\n\n/**\n * StNr (Steuernummer).\n *\n * German tax number assigned by the local tax office.\n * Regional format: 10 or 11 digits. Unified federal\n * format: 13 digits (prefixed with a 2–4 digit BUFA\n * code). Structure varies by federal state.\n *\n * The number encodes: BUFA (Bundesfinanzamtsnummer),\n * district code, serial number, and check digit. No\n * algorithmic check digit validation is standardised\n * across all states; validation is format-only.\n *\n * @see https://de.wikipedia.org/wiki/Steuernummer\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\n/**\n * Format patterns per federal state.\n * [0] = regional format, [1] = unified (federal) format.\n *\n * Legend: F = finance office, B = district,\n * U = serial, P = check digit,\n * leading digits are literal.\n */\nconst STATES = {\n \"Baden-Württemberg\": [\"FFBBBUUUUP\", \"28FF0BBBUUUUP\"],\n Bayern: [\"FFFBBBUUUUP\", \"9FFF0BBBUUUUP\"],\n Berlin: [\"FFBBBUUUUP\", \"11FF0BBBUUUUP\"],\n Brandenburg: [\"0FFBBBUUUUP\", \"30FF0BBBUUUUP\"],\n Bremen: [\"FFBBBUUUUP\", \"24FF0BBBUUUUP\"],\n Hamburg: [\"FFBBBUUUUP\", \"22FF0BBBUUUUP\"],\n Hessen: [\"0FFBBBUUUUP\", \"26FF0BBBUUUUP\"],\n \"Mecklenburg-Vorpommern\": [\n \"0FFBBBUUUUP\",\n \"40FF0BBBUUUUP\",\n ],\n Niedersachsen: [\"FFBBBUUUUP\", \"23FF0BBBUUUUP\"],\n \"Nordrhein-Westfalen\": [\"FFFBBBBUUUP\", \"5FFF0BBBBUUUP\"],\n \"Rheinland-Pfalz\": [\"FFBBBUUUUP\", \"27FF0BBBUUUUP\"],\n Saarland: [\"0FFBBBUUUUP\", \"10FF0BBBUUUUP\"],\n Sachsen: [\"2FFBBBUUUUP\", \"32FF0BBBUUUUP\"],\n \"Sachsen-Anhalt\": [\"1FFBBBUUUUP\", \"31FF0BBBUUUUP\"],\n \"Schleswig-Holstein\": [\"FFBBBUUUUP\", \"21FF0BBBUUUUP\"],\n Thüringen: [\"1FFBBBUUUUP\", \"41FF0BBBUUUUP\"],\n} as const;\n\ntype StateName = keyof typeof STATES;\n\n/**\n * Convert a format pattern to a regex.\n * Literal digits match themselves; F/B/U match any\n * digit; P (check digit) matches any digit.\n */\nconst patternToRegex = (pattern: string): RegExp => {\n let re = \"^\";\n for (const ch of pattern) {\n if (ch >= \"0\" && ch <= \"9\") {\n re += ch;\n } else {\n re += \"\\\\d\";\n }\n }\n re += \"$\";\n return new RegExp(re);\n};\n\n/** Pre-compiled regexes for each state + format. */\nconst COMPILED: Array<{\n state: StateName;\n regional: RegExp;\n regionalFmt: string;\n federal: RegExp;\n federalFmt: string;\n}> = (\n Object.entries(STATES) as Array<\n [StateName, readonly [string, string]]\n >\n).map(([state, [regionalFmt, federalFmt]]) => ({\n state,\n regional: patternToRegex(regionalFmt),\n regionalFmt,\n federal: patternToRegex(federalFmt),\n federalFmt,\n}));\n\nconst compact = (value: string): string =>\n clean(value, \" -/.\");\n\nconst matchesAnyPattern = (v: string): boolean => {\n for (const { regional, federal } of COMPILED) {\n if (regional.test(v) || federal.test(v)) return true;\n }\n return false;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"German Steuernummer must contain only digits\",\n );\n }\n\n if (\n v.length !== 10 &&\n v.length !== 11 &&\n v.length !== 13\n ) {\n return err(\n \"INVALID_LENGTH\",\n \"German Steuernummer must be 10, 11, or 13 digits\",\n );\n }\n\n if (!matchesAnyPattern(v)) {\n return err(\n \"INVALID_COMPONENT\",\n \"German Steuernummer does not match any \" +\n \"known state format\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\n/**\n * Format with slashes at segment boundaries.\n * Uses the first matching state pattern to determine\n * segment positions.\n */\nconst format = (value: string): string => {\n const v = compact(value);\n\n for (const entry of COMPILED) {\n const pattern =\n v.length === 13 ? entry.federal : entry.regional;\n if (!pattern.test(v)) continue;\n\n const fmt =\n v.length === 13\n ? entry.federalFmt\n : entry.regionalFmt;\n\n // Group by consecutive runs of the same letter\n // category: literal digits, F, B, U, P\n const segments: string[] = [];\n let segStart = 0;\n // SAFETY: fmt is a non-empty literal from COMPILED.\n // eslint-disable-next-line no-non-null-assertion\n let prevCat = charCat(fmt[0]!);\n\n for (let i = 1; i < fmt.length; i++) {\n // SAFETY: i < fmt.length.\n // eslint-disable-next-line no-non-null-assertion\n const cat = charCat(fmt[i]!);\n if (cat !== prevCat) {\n segments.push(v.slice(segStart, i));\n segStart = i;\n prevCat = cat;\n }\n }\n segments.push(v.slice(segStart));\n\n return segments.join(\"/\");\n }\n\n return v;\n};\n\nconst charCat = (ch: string): string => {\n if (ch >= \"0\" && ch <= \"9\") return \"L\"; // literal\n return ch; // F, B, U, P\n};\n\n/** German Tax Number (Steuernummer). */\nconst stnr: CountryValidator<\"DE\"> = {\n name: \"German Tax Number\",\n localName: \"Steuernummer\",\n abbreviation: \"StNr\",\n aliases: [\"Steuernummer\", \"St.Nr.\"] as const,\n candidatePattern: \"\\\\d{2,4}/\\\\d{3,4}/\\\\d{4,5}\",\n scope: \"country\",\n country: \"DE\",\n entityType: \"any\",\n description:\n \"German tax number assigned by the local \" +\n \"tax office, varies by federal state\",\n sourceUrl: \"https://de.wikipedia.org/wiki/Steuernummer\",\n lengths: [10, 11, 13] as const,\n examples: [\"2181508150\", \"18181508155\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default stnr;\nexport { compact, format, validate, generate };\n"],"mappings":"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"}
|
package/dist/de/svnr.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/de/svnr.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -7,7 +7,7 @@ declare const format: (value: string) => string;
|
|
|
7
7
|
/** Generate a random valid German SVNR. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** German Social Insurance Number. */
|
|
10
|
-
declare const svnr:
|
|
10
|
+
declare const svnr: CountryValidator<"DE">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, svnr as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=svnr.d.ts.map
|
package/dist/de/svnr.js
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { isValidDate, resolveTwoDigitYear } from "../_util/date.js";
|
|
2
3
|
import { randomInt } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
|
-
import { isValidDate, resolveTwoDigitYear } from "../_util/date.js";
|
|
5
5
|
//#region src/de/svnr.ts
|
|
6
|
-
/**
|
|
7
|
-
* SVNR (Sozialversicherungsnummer).
|
|
8
|
-
*
|
|
9
|
-
* German social insurance number. 12 characters:
|
|
10
|
-
* area number (2 digits) + date of birth (DDMMYY)
|
|
11
|
-
* + initial letter of birth name (1 letter) +
|
|
12
|
-
* serial number (2 digits) + check digit (1 digit).
|
|
13
|
-
*
|
|
14
|
-
* @see https://de.wikipedia.org/wiki/Sozialversicherungsnummer
|
|
15
|
-
*/
|
|
16
6
|
const letterValue = (ch) => {
|
|
17
7
|
const code = ch.charCodeAt(0);
|
|
18
8
|
if (code >= 65 && code <= 90) return code - 64;
|
|
@@ -91,6 +81,7 @@ const svnr = {
|
|
|
91
81
|
"Versicherungsnummer"
|
|
92
82
|
],
|
|
93
83
|
candidatePattern: "\\d{2}\\s?\\d{6}\\s?[A-Z]\\s?\\d{3}",
|
|
84
|
+
scope: "country",
|
|
94
85
|
country: "DE",
|
|
95
86
|
entityType: "person",
|
|
96
87
|
description: "German social insurance number encoding birth date and name initial",
|
package/dist/de/svnr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svnr.js","names":[],"sources":["../../src/de/svnr.ts"],"sourcesContent":["/**\n * SVNR (Sozialversicherungsnummer).\n *\n * German social insurance number. 12 characters:\n * area number (2 digits) + date of birth (DDMMYY)\n * + initial letter of birth name (1 letter) +\n * serial number (2 digits) + check digit (1 digit).\n *\n * @see https://de.wikipedia.org/wiki/Sozialversicherungsnummer\n */\n\nimport { clean } from \"#util/clean\";\nimport {\n isValidDate,\n resolveTwoDigitYear,\n} from \"#util/date\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\
|
|
1
|
+
{"version":3,"file":"svnr.js","names":[],"sources":["../../src/de/svnr.ts"],"sourcesContent":["/**\n * SVNR (Sozialversicherungsnummer).\n *\n * German social insurance number. 12 characters:\n * area number (2 digits) + date of birth (DDMMYY)\n * + initial letter of birth name (1 letter) +\n * serial number (2 digits) + check digit (1 digit).\n *\n * @see https://de.wikipedia.org/wiki/Sozialversicherungsnummer\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport {\n isValidDate,\n resolveTwoDigitYear,\n} from \"#util/date\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nconst letterValue = (ch: string): number => {\n const code = ch.charCodeAt(0);\n if (code >= 65 && code <= 90) return code - 64;\n return -1;\n};\n\nconst WEIGHTS = [\n 2, 1, 2, 5, 7, 1, 2, 1, 2, 1, 2, 1,\n] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -/\").toUpperCase();\n\nconst computeCheck = (v: string): number => {\n const digits: number[] = [];\n\n for (let i = 0; i < 8; i++) {\n digits.push(Number(v[i]));\n }\n\n // SAFETY: caller guarantees v.length === 12.\n // eslint-disable-next-line no-non-null-assertion\n const lv = letterValue(v[8]!);\n digits.push(Math.floor(lv / 10));\n digits.push(lv % 10);\n\n digits.push(Number(v[9]));\n digits.push(Number(v[10]));\n\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n // SAFETY: WEIGHTS.length === 12 and we just pushed\n // 12 entries onto `digits`.\n // eslint-disable-next-line no-non-null-assertion\n const product = digits[i]! * weight;\n if (product >= 10) {\n sum += Math.floor(product / 10) + (product % 10);\n } else {\n sum += product;\n }\n }\n\n return sum % 10;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"German SVNR must be 12 characters\",\n );\n }\n\n if (!/^\\d{8}[A-Z]\\d{3}$/.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"German SVNR must be 8 digits, 1 letter, \" +\n \"3 digits\",\n );\n }\n\n const dd = Number(v.slice(2, 4));\n const mm = Number(v.slice(4, 6));\n const yy = Number(v.slice(6, 8));\n\n const year = resolveTwoDigitYear(yy);\n\n if (!isValidDate(year, mm, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"German SVNR contains an invalid birth date\",\n );\n }\n\n const expected = computeCheck(v);\n const actual = Number(v[11]);\n\n if (expected !== actual) {\n return err(\n \"INVALID_CHECKSUM\",\n \"German SVNR 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 (\n `${v.slice(0, 2)} ${v.slice(2, 8)}` +\n ` ${v.slice(8, 9)} ${v.slice(9, 11)}` +\n ` ${v.slice(11)}`\n );\n};\n\n/** Generate a random valid German SVNR. */\nconst generate = (): string => {\n for (;;) {\n const area = String(randomInt(1, 99)).padStart(2, \"0\");\n const dd = String(randomInt(1, 28)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n const yy = String(randomInt(40, 99)).padStart(2, \"0\");\n const letter = String.fromCharCode(\n 65 + randomInt(0, 25),\n );\n const serial = String(randomInt(0, 49)).padStart(\n 2,\n \"0\",\n );\n const partial = area + dd + mm + yy + letter + serial;\n const c = partial + String(computeCheck(partial));\n if (validate(c).valid) return c;\n }\n};\n\n/** German Social Insurance Number. */\nconst svnr: CountryValidator<\"DE\"> = {\n name: \"German Social Insurance Number\",\n localName: \"Sozialversicherungsnummer\",\n abbreviation: \"SVNR\",\n aliases: [\n \"Sozialversicherungsnummer\",\n \"SVNR\",\n \"Versicherungsnummer\",\n ] as const,\n candidatePattern: \"\\\\d{2}\\\\s?\\\\d{6}\\\\s?[A-Z]\\\\s?\\\\d{3}\",\n scope: \"country\",\n country: \"DE\",\n entityType: \"person\",\n description:\n \"German social insurance number encoding \" +\n \"birth date and name initial\",\n sourceUrl:\n \"https://de.wikipedia.org/wiki/\" +\n \"Sozialversicherungsnummer\",\n lengths: [12] as const,\n examples: [\"12010188M011\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default svnr;\nexport { compact, format, validate, generate };\n"],"mappings":"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"}
|
package/dist/de/vat.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/de/vat.d.ts
|
|
4
4
|
declare const compact: (value: string) => string;
|
|
@@ -7,7 +7,7 @@ declare const format: (value: string) => string;
|
|
|
7
7
|
/** Generate a random valid German VAT number. */
|
|
8
8
|
declare const generate: () => string;
|
|
9
9
|
/** German VAT Identification Number. */
|
|
10
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"DE">;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { compact, vat as default, format, generate, validate };
|
|
13
13
|
//# sourceMappingURL=vat.d.ts.map
|