@stll/stdnum 0.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -5
- package/README.md +28 -4
- package/dist/_checksums/luhn.js.map +1 -1
- package/dist/_checksums/mod1110.js +1 -1
- package/dist/_checksums/mod1110.js.map +1 -1
- package/dist/_checksums/mod112.js +5 -5
- package/dist/_checksums/mod112.js.map +1 -1
- package/dist/_checksums/mod97.js.map +1 -1
- package/dist/_checksums/verhoeff.js.map +1 -1
- package/dist/_checksums/weighted-sum.js.map +1 -1
- package/dist/_util/arabic.js.map +1 -1
- package/dist/_util/clean.js.map +1 -1
- package/dist/_util/date.js.map +1 -1
- package/dist/_util/generate.d.ts +13 -1
- package/dist/_util/generate.js +23 -1
- package/dist/_util/generate.js.map +1 -1
- package/dist/_util/result.js.map +1 -1
- package/dist/_util/strings.js.map +1 -1
- package/dist/ad/mod.d.ts +3 -2
- package/dist/ad/nrt.d.ts +16 -2
- package/dist/ad/nrt.js +4 -16
- package/dist/ad/nrt.js.map +1 -1
- package/dist/ae/eid.d.ts +2 -3
- package/dist/ae/eid.js +2 -12
- package/dist/ae/eid.js.map +1 -1
- package/dist/ae/mod.d.ts +3 -2
- package/dist/ai/mod.d.ts +3 -2
- package/dist/ai/tin.d.ts +20 -2
- package/dist/ai/tin.js +1 -18
- package/dist/ai/tin.js.map +1 -1
- package/dist/al/mod.d.ts +3 -2
- package/dist/al/nipt.d.ts +13 -2
- package/dist/al/nipt.js +1 -11
- package/dist/al/nipt.js.map +1 -1
- package/dist/am/mod.d.ts +3 -2
- package/dist/am/tin.d.ts +16 -2
- package/dist/am/tin.js +1 -14
- package/dist/am/tin.js.map +1 -1
- package/dist/ar/cbu.d.ts +2 -3
- package/dist/ar/cbu.js +2 -10
- package/dist/ar/cbu.js.map +1 -1
- package/dist/ar/cuit.d.ts +2 -3
- package/dist/ar/cuit.js +13 -29
- package/dist/ar/cuit.js.map +1 -1
- package/dist/ar/dni.d.ts +11 -2
- package/dist/ar/dni.js +1 -9
- package/dist/ar/dni.js.map +1 -1
- package/dist/ar/mod.d.ts +3 -2
- package/dist/at/businessid.d.ts +10 -2
- package/dist/at/businessid.js +1 -8
- package/dist/at/businessid.js.map +1 -1
- package/dist/at/mod.d.ts +3 -2
- package/dist/at/tin.d.ts +2 -3
- package/dist/at/tin.js +1 -11
- package/dist/at/tin.js.map +1 -1
- package/dist/at/uid.d.ts +2 -3
- package/dist/at/uid.js +2 -10
- package/dist/at/uid.js.map +1 -1
- package/dist/at/vnr.d.ts +5 -4
- package/dist/at/vnr.js +23 -16
- package/dist/at/vnr.js.map +1 -1
- package/dist/au/abn.d.ts +2 -3
- package/dist/au/abn.js +1 -10
- package/dist/au/abn.js.map +1 -1
- package/dist/au/acn.d.ts +2 -3
- package/dist/au/acn.js +1 -10
- package/dist/au/acn.js.map +1 -1
- package/dist/au/mod.d.ts +3 -2
- package/dist/au/tfn.d.ts +2 -3
- package/dist/au/tfn.js +1 -10
- package/dist/au/tfn.js.map +1 -1
- package/dist/az/mod.d.ts +3 -2
- package/dist/az/voen.d.ts +2 -3
- package/dist/az/voen.js +1 -14
- package/dist/az/voen.js.map +1 -1
- package/dist/ba/jmbg.d.ts +2 -3
- package/dist/ba/jmbg.js +4 -11
- package/dist/ba/jmbg.js.map +1 -1
- package/dist/ba/mod.d.ts +3 -2
- package/dist/bd/mod.d.ts +3 -2
- package/dist/bd/nid.d.ts +23 -2
- package/dist/bd/nid.js +11 -32
- package/dist/bd/nid.js.map +1 -1
- package/dist/be/bis.d.ts +2 -3
- package/dist/be/bis.js +1 -11
- package/dist/be/bis.js.map +1 -1
- package/dist/be/mod.d.ts +3 -2
- package/dist/be/nn.d.ts +2 -3
- package/dist/be/nn.js +1 -11
- package/dist/be/nn.js.map +1 -1
- package/dist/be/vat.d.ts +2 -3
- package/dist/be/vat.js +1 -9
- package/dist/be/vat.js.map +1 -1
- package/dist/bg/egn.d.ts +2 -3
- package/dist/bg/egn.js +5 -13
- package/dist/bg/egn.js.map +1 -1
- package/dist/bg/mod.d.ts +3 -2
- package/dist/bg/pnf.d.ts +2 -3
- package/dist/bg/pnf.js +1 -8
- package/dist/bg/pnf.js.map +1 -1
- package/dist/bg/vat.d.ts +2 -3
- package/dist/bg/vat.js +3 -9
- package/dist/bg/vat.js.map +1 -1
- package/dist/bh/cpr.d.ts +5 -4
- package/dist/bh/cpr.js +9 -19
- package/dist/bh/cpr.js.map +1 -1
- package/dist/bh/mod.d.ts +3 -2
- package/dist/bic.d.ts +13 -2
- package/dist/bic.js +14 -26
- package/dist/bic.js.map +1 -1
- package/dist/br/cnpj.d.ts +2 -3
- package/dist/br/cnpj.js +1 -20
- package/dist/br/cnpj.js.map +1 -1
- package/dist/br/cpf.d.ts +2 -3
- package/dist/br/cpf.js +1 -14
- package/dist/br/cpf.js.map +1 -1
- package/dist/br/mod.d.ts +3 -2
- package/dist/by/mod.d.ts +3 -2
- package/dist/by/unp.d.ts +2 -3
- package/dist/by/unp.js +9 -17
- package/dist/by/unp.js.map +1 -1
- package/dist/bz/mod.d.ts +3 -2
- package/dist/bz/tin.d.ts +5 -4
- package/dist/bz/tin.js +10 -27
- package/dist/bz/tin.js.map +1 -1
- package/dist/ca/bn.d.ts +2 -3
- package/dist/ca/bn.js +2 -10
- package/dist/ca/bn.js.map +1 -1
- package/dist/ca/mod.d.ts +3 -2
- package/dist/ca/sin.d.ts +2 -3
- package/dist/ca/sin.js +2 -10
- package/dist/ca/sin.js.map +1 -1
- package/dist/ch/mod.d.ts +3 -2
- package/dist/ch/ssn.d.ts +2 -3
- package/dist/ch/ssn.js +1 -9
- package/dist/ch/ssn.js.map +1 -1
- package/dist/ch/uid.d.ts +2 -3
- package/dist/ch/uid.js +1 -9
- package/dist/ch/uid.js.map +1 -1
- package/dist/ch/vat.d.ts +2 -3
- package/dist/ch/vat.js +1 -9
- package/dist/ch/vat.js.map +1 -1
- package/dist/cl/mod.d.ts +3 -2
- package/dist/cl/rut.d.ts +2 -3
- package/dist/cl/rut.js +2 -15
- package/dist/cl/rut.js.map +1 -1
- package/dist/cn/mod.d.ts +3 -2
- package/dist/cn/ric.d.ts +2 -3
- package/dist/cn/ric.js +4 -14
- package/dist/cn/ric.js.map +1 -1
- package/dist/cn/uscc.d.ts +2 -3
- package/dist/cn/uscc.js +8 -16
- package/dist/cn/uscc.js.map +1 -1
- package/dist/co/mod.d.ts +3 -2
- package/dist/co/nit.d.ts +2 -3
- package/dist/co/nit.js +6 -13
- package/dist/co/nit.js.map +1 -1
- package/dist/cr/cpf.d.ts +18 -2
- package/dist/cr/cpf.js +5 -19
- package/dist/cr/cpf.js.map +1 -1
- package/dist/cr/mod.d.ts +3 -2
- package/dist/creditcard.d.ts +2 -3
- package/dist/creditcard.js +5 -14
- package/dist/creditcard.js.map +1 -1
- package/dist/cu/mod.d.ts +3 -2
- package/dist/cu/ni.d.ts +5 -4
- package/dist/cu/ni.js +13 -18
- package/dist/cu/ni.js.map +1 -1
- package/dist/cy/mod.d.ts +3 -2
- package/dist/cy/vat.d.ts +2 -3
- package/dist/cy/vat.js +1 -8
- package/dist/cy/vat.js.map +1 -1
- package/dist/cz/dic.d.ts +2 -3
- package/dist/cz/dic.js +7 -13
- package/dist/cz/dic.js.map +1 -1
- package/dist/cz/ico.d.ts +2 -3
- package/dist/cz/ico.js +2 -10
- package/dist/cz/ico.js.map +1 -1
- package/dist/cz/mod.d.ts +3 -2
- package/dist/cz/rc.d.ts +2 -3
- package/dist/cz/rc.js +22 -21
- package/dist/cz/rc.js.map +1 -1
- package/dist/de/handelsreg.d.ts +19 -2
- package/dist/de/handelsreg.js +10 -26
- package/dist/de/handelsreg.js.map +1 -1
- package/dist/de/idnr.d.ts +2 -3
- package/dist/de/idnr.js +2 -12
- package/dist/de/idnr.js.map +1 -1
- package/dist/de/mod.d.ts +3 -2
- package/dist/de/stnr.d.ts +17 -3
- package/dist/de/stnr.js +1 -15
- package/dist/de/stnr.js.map +1 -1
- package/dist/de/svnr.d.ts +2 -3
- package/dist/de/svnr.js +4 -13
- package/dist/de/svnr.js.map +1 -1
- package/dist/de/vat.d.ts +2 -3
- package/dist/de/vat.js +2 -11
- package/dist/de/vat.js.map +1 -1
- package/dist/dk/cpr.d.ts +5 -4
- package/dist/dk/cpr.js +14 -12
- package/dist/dk/cpr.js.map +1 -1
- package/dist/dk/cvr.d.ts +2 -3
- package/dist/dk/cvr.js +2 -15
- package/dist/dk/cvr.js.map +1 -1
- package/dist/dk/mod.d.ts +3 -2
- package/dist/dk/vat.d.ts +2 -3
- package/dist/dk/vat.js +3 -13
- package/dist/dk/vat.js.map +1 -1
- package/dist/do/mod.d.ts +3 -2
- package/dist/do/rnc.d.ts +2 -3
- package/dist/do/rnc.js +3 -17
- package/dist/do/rnc.js.map +1 -1
- package/dist/ec/mod.d.ts +3 -2
- package/dist/ec/ruc.d.ts +2 -3
- package/dist/ec/ruc.js +2 -19
- package/dist/ec/ruc.js.map +1 -1
- package/dist/ee/ik.d.ts +2 -3
- package/dist/ee/ik.js +6 -15
- package/dist/ee/ik.js.map +1 -1
- package/dist/ee/mod.d.ts +3 -2
- package/dist/ee/registrikood.d.ts +2 -3
- package/dist/ee/registrikood.js +9 -15
- package/dist/ee/registrikood.js.map +1 -1
- package/dist/ee/vat.d.ts +2 -3
- package/dist/ee/vat.js +2 -10
- package/dist/ee/vat.js.map +1 -1
- package/dist/eg/mod.d.ts +3 -2
- package/dist/eg/tn.d.ts +11 -2
- package/dist/eg/tn.js +1 -9
- package/dist/eg/tn.js.map +1 -1
- package/dist/es/cif.d.ts +2 -3
- package/dist/es/cif.js +3 -12
- package/dist/es/cif.js.map +1 -1
- package/dist/es/dni.d.ts +2 -3
- package/dist/es/dni.js +1 -9
- package/dist/es/dni.js.map +1 -1
- package/dist/es/mod.d.ts +3 -2
- package/dist/es/nie.d.ts +2 -3
- package/dist/es/nie.js +14 -22
- package/dist/es/nie.js.map +1 -1
- package/dist/es/nss.d.ts +2 -3
- package/dist/es/nss.js +1 -16
- package/dist/es/nss.js.map +1 -1
- package/dist/es/vat.d.ts +2 -3
- package/dist/es/vat.js +5 -10
- package/dist/es/vat.js.map +1 -1
- package/dist/eu/mod.d.ts +3 -2
- package/dist/eu/vat.d.ts +5 -4
- package/dist/eu/vat.js +44 -2
- package/dist/eu/vat.js.map +1 -1
- package/dist/fi/hetu.d.ts +5 -4
- package/dist/fi/hetu.js +19 -12
- package/dist/fi/hetu.js.map +1 -1
- package/dist/fi/mod.d.ts +3 -2
- package/dist/fi/vat.d.ts +2 -3
- package/dist/fi/vat.js +3 -10
- package/dist/fi/vat.js.map +1 -1
- package/dist/fi/ytunnus.d.ts +2 -3
- package/dist/fi/ytunnus.js +2 -10
- package/dist/fi/ytunnus.js.map +1 -1
- package/dist/fr/mod.d.ts +3 -2
- package/dist/fr/nif.d.ts +2 -3
- package/dist/fr/nif.js +1 -9
- package/dist/fr/nif.js.map +1 -1
- package/dist/fr/nir.d.ts +2 -3
- package/dist/fr/nir.js +3 -14
- package/dist/fr/nir.js.map +1 -1
- package/dist/fr/siren.d.ts +2 -3
- package/dist/fr/siren.js +2 -10
- package/dist/fr/siren.js.map +1 -1
- package/dist/fr/siret.d.ts +2 -3
- package/dist/fr/siret.js +2 -11
- package/dist/fr/siret.js.map +1 -1
- package/dist/fr/tva.d.ts +2 -3
- package/dist/fr/tva.js +2 -12
- package/dist/fr/tva.js.map +1 -1
- package/dist/gb/mod.d.ts +3 -2
- package/dist/gb/nino.d.ts +12 -2
- package/dist/gb/nino.js +8 -17
- package/dist/gb/nino.js.map +1 -1
- package/dist/gb/sedol.d.ts +2 -3
- package/dist/gb/sedol.js +9 -18
- package/dist/gb/sedol.js.map +1 -1
- package/dist/gb/utr.d.ts +2 -3
- package/dist/gb/utr.js +2 -10
- package/dist/gb/utr.js.map +1 -1
- package/dist/gb/vat.d.ts +2 -3
- package/dist/gb/vat.js +2 -11
- package/dist/gb/vat.js.map +1 -1
- package/dist/ge/mod.d.ts +3 -2
- package/dist/ge/pin.d.ts +14 -2
- package/dist/ge/pin.js +1 -12
- package/dist/ge/pin.js.map +1 -1
- package/dist/gh/mod.d.ts +3 -2
- package/dist/gh/tin.d.ts +2 -3
- package/dist/gh/tin.js +10 -24
- package/dist/gh/tin.js.map +1 -1
- package/dist/gr/amka.d.ts +2 -3
- package/dist/gr/amka.js +3 -11
- package/dist/gr/amka.js.map +1 -1
- package/dist/gr/mod.d.ts +3 -2
- package/dist/gr/vat.d.ts +2 -3
- package/dist/gr/vat.js +1 -10
- package/dist/gr/vat.js.map +1 -1
- package/dist/gt/mod.d.ts +3 -2
- package/dist/gt/nit.d.ts +2 -3
- package/dist/gt/nit.js +6 -14
- package/dist/gt/nit.js.map +1 -1
- package/dist/hk/hkid.d.ts +2 -3
- package/dist/hk/hkid.js +2 -10
- package/dist/hk/hkid.js.map +1 -1
- package/dist/hk/mod.d.ts +3 -2
- package/dist/hr/mod.d.ts +3 -2
- package/dist/hr/vat.d.ts +2 -3
- package/dist/hr/vat.js +2 -9
- package/dist/hr/vat.js.map +1 -1
- package/dist/hu/mod.d.ts +3 -2
- package/dist/hu/vat.d.ts +2 -3
- package/dist/hu/vat.js +3 -10
- package/dist/hu/vat.js.map +1 -1
- package/dist/iban.d.ts +2 -3
- package/dist/iban.js +2 -8
- package/dist/iban.js.map +1 -1
- package/dist/id/mod.d.ts +3 -2
- package/dist/id/npwp.d.ts +2 -3
- package/dist/id/npwp.js +3 -13
- package/dist/id/npwp.js.map +1 -1
- package/dist/ie/mod.d.ts +3 -2
- package/dist/ie/pps.d.ts +2 -3
- package/dist/ie/pps.js +1 -10
- package/dist/ie/pps.js.map +1 -1
- package/dist/ie/vat.d.ts +2 -3
- package/dist/ie/vat.js +1 -9
- package/dist/ie/vat.js.map +1 -1
- package/dist/il/idnr.d.ts +2 -3
- package/dist/il/idnr.js +2 -9
- package/dist/il/idnr.js.map +1 -1
- package/dist/il/mod.d.ts +3 -2
- package/dist/in/aadhaar.d.ts +2 -3
- package/dist/in/aadhaar.js +2 -12
- package/dist/in/aadhaar.js.map +1 -1
- package/dist/in/gstin.d.ts +2 -3
- package/dist/in/gstin.js +4 -11
- package/dist/in/gstin.js.map +1 -1
- package/dist/in/mod.d.ts +3 -2
- package/dist/in/pan.d.ts +15 -2
- package/dist/in/pan.js +3 -15
- package/dist/in/pan.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/iq/mod.d.ts +3 -2
- package/dist/iq/nid.d.ts +16 -2
- package/dist/iq/nid.js +2 -15
- package/dist/iq/nid.js.map +1 -1
- package/dist/ir/mod.d.ts +3 -2
- package/dist/ir/nid.d.ts +2 -3
- package/dist/ir/nid.js +2 -24
- package/dist/ir/nid.js.map +1 -1
- package/dist/is/kennitala.d.ts +2 -3
- package/dist/is/kennitala.js +2 -13
- package/dist/is/kennitala.js.map +1 -1
- package/dist/is/mod.d.ts +3 -2
- package/dist/is/vsk.d.ts +9 -2
- package/dist/is/vsk.js +1 -7
- package/dist/is/vsk.js.map +1 -1
- package/dist/isin.d.ts +2 -3
- package/dist/isin.js +11 -21
- package/dist/isin.js.map +1 -1
- package/dist/it/codicefiscale.d.ts +5 -4
- package/dist/it/codicefiscale.js +27 -23
- package/dist/it/codicefiscale.js.map +1 -1
- package/dist/it/iva.d.ts +2 -3
- package/dist/it/iva.js +2 -9
- package/dist/it/iva.js.map +1 -1
- package/dist/it/mod.d.ts +3 -2
- package/dist/jp/cn.d.ts +2 -3
- package/dist/jp/cn.js +1 -9
- package/dist/jp/cn.js.map +1 -1
- package/dist/jp/mod.d.ts +3 -2
- package/dist/jp/mynumber.d.ts +2 -3
- package/dist/jp/mynumber.js +1 -10
- package/dist/jp/mynumber.js.map +1 -1
- package/dist/kr/brn.d.ts +11 -2
- package/dist/kr/brn.js +1 -9
- package/dist/kr/brn.js.map +1 -1
- package/dist/kr/mod.d.ts +3 -2
- package/dist/kr/rrn.d.ts +5 -4
- package/dist/kr/rrn.js +15 -13
- package/dist/kr/rrn.js.map +1 -1
- package/dist/kw/civil.d.ts +6 -5
- package/dist/kw/civil.js +20 -17
- package/dist/kw/civil.js.map +1 -1
- package/dist/kw/mod.d.ts +3 -2
- package/dist/kz/iin.d.ts +2 -3
- package/dist/kz/iin.js +4 -18
- package/dist/kz/iin.js.map +1 -1
- package/dist/kz/mod.d.ts +3 -2
- package/dist/lei.d.ts +2 -3
- package/dist/lei.js +2 -11
- package/dist/lei.js.map +1 -1
- package/dist/li/mod.d.ts +3 -2
- package/dist/li/peid.d.ts +11 -2
- package/dist/li/peid.js +1 -9
- package/dist/li/peid.js.map +1 -1
- package/dist/lk/mod.d.ts +3 -2
- package/dist/lk/nic.d.ts +5 -4
- package/dist/lk/nic.js +16 -16
- package/dist/lk/nic.js.map +1 -1
- package/dist/lt/asmens.d.ts +2 -3
- package/dist/lt/asmens.js +2 -1
- package/dist/lt/asmens.js.map +1 -1
- package/dist/lt/mod.d.ts +3 -2
- package/dist/lt/vat.d.ts +2 -3
- package/dist/lt/vat.js +2 -10
- package/dist/lt/vat.js.map +1 -1
- package/dist/lu/mod.d.ts +3 -2
- package/dist/lu/vat.d.ts +2 -3
- package/dist/lu/vat.js +2 -8
- package/dist/lu/vat.js.map +1 -1
- package/dist/luhn.d.ts +2 -3
- package/dist/luhn.js +9 -9
- package/dist/luhn.js.map +1 -1
- package/dist/lv/mod.d.ts +3 -2
- package/dist/lv/vat.d.ts +2 -3
- package/dist/lv/vat.js +19 -18
- package/dist/lv/vat.js.map +1 -1
- package/dist/ma/ice.d.ts +2 -3
- package/dist/ma/ice.js +2 -11
- package/dist/ma/ice.js.map +1 -1
- package/dist/ma/mod.d.ts +3 -2
- package/dist/mc/mod.d.ts +3 -2
- package/dist/mc/tva.d.ts +2 -3
- package/dist/mc/tva.js +1 -0
- package/dist/mc/tva.js.map +1 -1
- package/dist/md/idno.d.ts +2 -3
- package/dist/md/idno.js +1 -10
- package/dist/md/idno.js.map +1 -1
- package/dist/md/mod.d.ts +3 -2
- package/dist/me/mod.d.ts +3 -2
- package/dist/me/pib.d.ts +2 -3
- package/dist/me/pib.js +2 -10
- package/dist/me/pib.js.map +1 -1
- package/dist/mk/edb.d.ts +2 -3
- package/dist/mk/edb.js +2 -11
- package/dist/mk/edb.js.map +1 -1
- package/dist/mk/mod.d.ts +3 -2
- package/dist/mt/mod.d.ts +3 -2
- package/dist/mt/vat.d.ts +2 -3
- package/dist/mt/vat.js +3 -10
- package/dist/mt/vat.js.map +1 -1
- package/dist/mu/brn.d.ts +23 -2
- package/dist/mu/brn.js +1 -21
- package/dist/mu/brn.js.map +1 -1
- package/dist/mu/mod.d.ts +3 -2
- package/dist/mx/clabe.d.ts +2 -3
- package/dist/mx/clabe.js +1 -14
- package/dist/mx/clabe.js.map +1 -1
- package/dist/mx/curp.d.ts +5 -4
- package/dist/mx/curp.js +27 -19
- package/dist/mx/curp.js.map +1 -1
- package/dist/mx/mod.d.ts +3 -2
- package/dist/mx/rfc.d.ts +5 -4
- package/dist/mx/rfc.js +23 -20
- package/dist/mx/rfc.js.map +1 -1
- package/dist/my/mod.d.ts +3 -2
- package/dist/my/nric.d.ts +5 -4
- package/dist/my/nric.js +18 -16
- package/dist/my/nric.js.map +1 -1
- package/dist/ng/mod.d.ts +3 -2
- package/dist/ng/nin.d.ts +13 -2
- package/dist/ng/nin.js +1 -11
- package/dist/ng/nin.js.map +1 -1
- package/dist/ni/mod.d.ts +3 -2
- package/dist/ni/ruc.d.ts +2 -3
- package/dist/ni/ruc.js +1 -23
- package/dist/ni/ruc.js.map +1 -1
- package/dist/nl/bsn.d.ts +2 -3
- package/dist/nl/bsn.js +2 -10
- package/dist/nl/bsn.js.map +1 -1
- package/dist/nl/kvk.d.ts +9 -2
- package/dist/nl/kvk.js +1 -7
- package/dist/nl/kvk.js.map +1 -1
- package/dist/nl/mod.d.ts +3 -2
- package/dist/nl/vat.d.ts +2 -3
- package/dist/nl/vat.js +4 -50
- package/dist/nl/vat.js.map +1 -1
- package/dist/no/fodselsnummer.d.ts +2 -3
- package/dist/no/fodselsnummer.js +3 -10
- package/dist/no/fodselsnummer.js.map +1 -1
- package/dist/no/mod.d.ts +3 -2
- package/dist/no/mva.d.ts +2 -3
- package/dist/no/mva.js +1 -8
- package/dist/no/mva.js.map +1 -1
- package/dist/no/orgnr.d.ts +2 -3
- package/dist/no/orgnr.js +2 -8
- package/dist/no/orgnr.js.map +1 -1
- package/dist/nz/ird.d.ts +2 -3
- package/dist/nz/ird.js +4 -13
- package/dist/nz/ird.js.map +1 -1
- package/dist/nz/mod.d.ts +3 -2
- package/dist/pa/mod.d.ts +3 -2
- package/dist/pa/ruc.d.ts +2 -3
- package/dist/pa/ruc.js +4 -19
- package/dist/pa/ruc.js.map +1 -1
- package/dist/patterns.d.ts +8 -10
- package/dist/patterns.js +83 -28
- package/dist/patterns.js.map +1 -1
- package/dist/pe/mod.d.ts +3 -2
- package/dist/pe/ruc.d.ts +2 -3
- package/dist/pe/ruc.js +10 -24
- package/dist/pe/ruc.js.map +1 -1
- package/dist/ph/mod.d.ts +3 -2
- package/dist/ph/philid.d.ts +14 -2
- package/dist/ph/philid.js +1 -12
- package/dist/ph/philid.js.map +1 -1
- package/dist/pk/cnic.d.ts +14 -2
- package/dist/pk/cnic.js +1 -12
- package/dist/pk/cnic.js.map +1 -1
- package/dist/pk/mod.d.ts +3 -2
- package/dist/pl/mod.d.ts +3 -2
- package/dist/pl/nip.d.ts +2 -3
- package/dist/pl/nip.js +2 -10
- package/dist/pl/nip.js.map +1 -1
- package/dist/pl/pesel.d.ts +2 -3
- package/dist/pl/pesel.js +4 -13
- package/dist/pl/pesel.js.map +1 -1
- package/dist/pl/regon.d.ts +2 -3
- package/dist/pl/regon.js +2 -11
- package/dist/pl/regon.js.map +1 -1
- package/dist/pt/cc.d.ts +2 -3
- package/dist/pt/cc.js +7 -13
- package/dist/pt/cc.js.map +1 -1
- package/dist/pt/mod.d.ts +3 -2
- package/dist/pt/vat.d.ts +2 -3
- package/dist/pt/vat.js +3 -11
- package/dist/pt/vat.js.map +1 -1
- package/dist/ro/cnp.d.ts +2 -3
- package/dist/ro/cnp.js +5 -14
- package/dist/ro/cnp.js.map +1 -1
- package/dist/ro/mod.d.ts +3 -2
- package/dist/ro/vat.d.ts +2 -3
- package/dist/ro/vat.js +13 -11
- package/dist/ro/vat.js.map +1 -1
- package/dist/rs/mod.d.ts +3 -2
- package/dist/rs/pib.d.ts +2 -3
- package/dist/rs/pib.js +1 -9
- package/dist/rs/pib.js.map +1 -1
- package/dist/ru/inn.d.ts +2 -3
- package/dist/ru/inn.js +2 -12
- package/dist/ru/inn.js.map +1 -1
- package/dist/ru/mod.d.ts +3 -2
- package/dist/se/mod.d.ts +3 -2
- package/dist/se/orgnr.d.ts +2 -3
- package/dist/se/orgnr.js +2 -9
- package/dist/se/orgnr.js.map +1 -1
- package/dist/se/personnummer.d.ts +2 -3
- package/dist/se/personnummer.js +8 -15
- package/dist/se/personnummer.js.map +1 -1
- package/dist/se/vat.d.ts +2 -3
- package/dist/se/vat.js +3 -10
- package/dist/se/vat.js.map +1 -1
- package/dist/sg/mod.d.ts +3 -2
- package/dist/sg/uen.d.ts +2 -3
- package/dist/sg/uen.js +47 -70
- package/dist/sg/uen.js.map +1 -1
- package/dist/si/emso.d.ts +2 -3
- package/dist/si/emso.js +12 -14
- package/dist/si/emso.js.map +1 -1
- package/dist/si/mod.d.ts +3 -2
- package/dist/si/vat.d.ts +2 -3
- package/dist/si/vat.js +3 -12
- package/dist/si/vat.js.map +1 -1
- package/dist/sk/dic.d.ts +2 -3
- package/dist/sk/dic.js +1 -0
- package/dist/sk/dic.js.map +1 -1
- package/dist/sk/ico.d.ts +2 -3
- package/dist/sk/ico.js +1 -0
- package/dist/sk/ico.js.map +1 -1
- package/dist/sk/mod.d.ts +3 -2
- package/dist/sk/rc.d.ts +4 -5
- package/dist/sk/rc.js +6 -2
- package/dist/sk/rc.js.map +1 -1
- package/dist/th/mod.d.ts +3 -2
- package/dist/th/tin.d.ts +2 -3
- package/dist/th/tin.js +1 -11
- package/dist/th/tin.js.map +1 -1
- package/dist/tr/mod.d.ts +3 -2
- package/dist/tr/tckimlik.d.ts +2 -3
- package/dist/tr/tckimlik.js +1 -20
- package/dist/tr/tckimlik.js.map +1 -1
- package/dist/tr/vkn.d.ts +2 -3
- package/dist/tr/vkn.js +1 -20
- package/dist/tr/vkn.js.map +1 -1
- package/dist/tw/mod.d.ts +3 -2
- package/dist/tw/ubn.d.ts +2 -3
- package/dist/tw/ubn.js +2 -12
- package/dist/tw/ubn.js.map +1 -1
- package/dist/types.d.ts +56 -21
- package/dist/ua/edrpou.d.ts +2 -3
- package/dist/ua/edrpou.js +5 -12
- package/dist/ua/edrpou.js.map +1 -1
- package/dist/ua/mod.d.ts +3 -2
- package/dist/us/ein.d.ts +12 -2
- package/dist/us/ein.js +88 -97
- package/dist/us/ein.js.map +1 -1
- package/dist/us/itin.d.ts +13 -2
- package/dist/us/itin.js +4 -15
- package/dist/us/itin.js.map +1 -1
- package/dist/us/mod.d.ts +3 -2
- package/dist/us/rtn.d.ts +2 -3
- package/dist/us/rtn.js +11 -23
- package/dist/us/rtn.js.map +1 -1
- package/dist/us/ssn.d.ts +13 -2
- package/dist/us/ssn.js +1 -11
- package/dist/us/ssn.js.map +1 -1
- package/dist/uy/mod.d.ts +3 -2
- package/dist/uy/rut.d.ts +2 -3
- package/dist/uy/rut.js +2 -15
- package/dist/uy/rut.js.map +1 -1
- package/dist/ve/mod.d.ts +3 -2
- package/dist/ve/rif.d.ts +2 -3
- package/dist/ve/rif.js +13 -26
- package/dist/ve/rif.js.map +1 -1
- package/dist/vn/mod.d.ts +3 -2
- package/dist/vn/mst.d.ts +2 -3
- package/dist/vn/mst.js +1 -12
- package/dist/vn/mst.js.map +1 -1
- package/dist/za/idnr.d.ts +2 -3
- package/dist/za/idnr.js +4 -16
- package/dist/za/idnr.js.map +1 -1
- package/dist/za/mod.d.ts +3 -2
- package/package.json +34 -21
- package/src/_checksums/mod1110.ts +1 -1
- package/src/_checksums/mod112.ts +7 -6
- package/src/_util/generate.ts +38 -0
- package/src/ad/nrt.ts +19 -7
- package/src/ae/eid.ts +7 -3
- package/src/ai/tin.ts +7 -3
- package/src/al/nipt.ts +7 -3
- package/src/am/tin.ts +7 -3
- package/src/ar/cbu.ts +9 -5
- package/src/ar/cuit.ts +22 -10
- package/src/ar/dni.ts +7 -3
- package/src/at/businessid.ts +7 -3
- package/src/at/tin.ts +7 -3
- package/src/at/uid.ts +7 -3
- package/src/at/vnr.ts +62 -12
- package/src/au/abn.ts +7 -3
- package/src/au/acn.ts +7 -3
- package/src/au/tfn.ts +7 -3
- package/src/az/voen.ts +9 -3
- package/src/ba/jmbg.ts +9 -7
- package/src/bd/nid.ts +11 -7
- package/src/be/bis.ts +8 -4
- package/src/be/nn.ts +7 -3
- package/src/be/vat.ts +7 -3
- package/src/bg/egn.ts +19 -10
- package/src/bg/pnf.ts +7 -3
- package/src/bg/vat.ts +8 -3
- package/src/bh/cpr.ts +17 -4
- package/src/bic.ts +26 -20
- package/src/br/cnpj.ts +7 -3
- package/src/br/cpf.ts +7 -3
- package/src/by/unp.ts +19 -9
- package/src/bz/tin.ts +19 -4
- package/src/ca/bn.ts +7 -3
- package/src/ca/sin.ts +7 -3
- package/src/ch/ssn.ts +7 -3
- package/src/ch/uid.ts +7 -3
- package/src/ch/vat.ts +9 -5
- package/src/cl/rut.ts +11 -5
- package/src/cn/ric.ts +11 -7
- package/src/cn/uscc.ts +27 -11
- package/src/co/nit.ts +14 -6
- package/src/cr/cpf.ts +11 -6
- package/src/creditcard.ts +10 -6
- package/src/cu/ni.ts +28 -7
- package/src/cy/vat.ts +7 -3
- package/src/cz/dic.ts +9 -4
- package/src/cz/ico.ts +7 -3
- package/src/cz/rc.ts +61 -29
- package/src/de/handelsreg.ts +21 -6
- package/src/de/idnr.ts +10 -3
- package/src/de/stnr.ts +11 -3
- package/src/de/svnr.ts +14 -5
- package/src/de/vat.ts +7 -3
- package/src/dk/cpr.ts +23 -8
- package/src/dk/cvr.ts +7 -3
- package/src/dk/vat.ts +8 -3
- package/src/do/rnc.ts +9 -5
- package/src/ec/ruc.ts +9 -5
- package/src/ee/ik.ts +21 -10
- package/src/ee/registrikood.ts +12 -7
- package/src/ee/vat.ts +7 -3
- package/src/eg/tn.ts +7 -3
- package/src/es/cif.ts +10 -7
- package/src/es/dni.ts +7 -3
- package/src/es/nie.ts +18 -9
- package/src/es/nss.ts +7 -3
- package/src/es/vat.ts +13 -5
- package/src/eu/vat.ts +55 -6
- package/src/fi/hetu.ts +26 -8
- package/src/fi/vat.ts +8 -3
- package/src/fi/ytunnus.ts +7 -3
- package/src/fr/nif.ts +7 -3
- package/src/fr/nir.ts +9 -7
- package/src/fr/siren.ts +7 -3
- package/src/fr/siret.ts +7 -3
- package/src/fr/tva.ts +7 -3
- package/src/gb/nino.ts +18 -13
- package/src/gb/sedol.ts +21 -15
- package/src/gb/utr.ts +7 -3
- package/src/gb/vat.ts +7 -3
- package/src/ge/pin.ts +7 -3
- package/src/gh/tin.ts +11 -6
- package/src/gr/amka.ts +7 -3
- package/src/gr/vat.ts +7 -3
- package/src/gt/nit.ts +13 -6
- package/src/hk/hkid.ts +9 -4
- package/src/hr/vat.ts +7 -3
- package/src/hu/vat.ts +8 -3
- package/src/iban.ts +7 -3
- package/src/id/npwp.ts +7 -3
- package/src/ie/pps.ts +7 -3
- package/src/ie/vat.ts +7 -3
- package/src/il/idnr.ts +7 -3
- package/src/in/aadhaar.ts +7 -3
- package/src/in/gstin.ts +10 -4
- package/src/in/pan.ts +15 -6
- package/src/index.ts +6 -0
- package/src/iq/nid.ts +7 -3
- package/src/ir/nid.ts +7 -3
- package/src/is/kennitala.ts +7 -3
- package/src/is/vsk.ts +7 -3
- package/src/isin.ts +17 -7
- package/src/it/codicefiscale.ts +49 -7
- package/src/it/iva.ts +7 -3
- package/src/jp/cn.ts +7 -3
- package/src/jp/mynumber.ts +7 -3
- package/src/kr/brn.ts +7 -3
- package/src/kr/rrn.ts +27 -8
- package/src/kw/civil.ts +31 -14
- package/src/kz/iin.ts +9 -8
- package/src/lei.ts +7 -3
- package/src/li/peid.ts +7 -3
- package/src/lk/nic.ts +31 -8
- package/src/lt/asmens.ts +8 -4
- package/src/lt/vat.ts +8 -3
- package/src/lu/vat.ts +8 -3
- package/src/luhn.ts +10 -3
- package/src/lv/vat.ts +53 -23
- package/src/ma/ice.ts +7 -3
- package/src/mc/tva.ts +9 -5
- package/src/md/idno.ts +7 -3
- package/src/me/pib.ts +7 -3
- package/src/mk/edb.ts +7 -3
- package/src/mt/vat.ts +8 -3
- package/src/mu/brn.ts +7 -3
- package/src/mx/clabe.ts +7 -3
- package/src/mx/curp.ts +47 -10
- package/src/mx/rfc.ts +42 -7
- package/src/my/nric.ts +33 -8
- package/src/ng/nin.ts +7 -3
- package/src/ni/ruc.ts +7 -3
- package/src/nl/bsn.ts +7 -3
- package/src/nl/kvk.ts +7 -3
- package/src/nl/vat.ts +18 -69
- package/src/no/fodselsnummer.ts +12 -7
- package/src/no/mva.ts +9 -5
- package/src/no/orgnr.ts +7 -3
- package/src/nz/ird.ts +12 -8
- package/src/pa/ruc.ts +39 -11
- package/src/patterns.ts +184 -46
- package/src/pe/ruc.ts +13 -10
- package/src/ph/philid.ts +7 -3
- package/src/pk/cnic.ts +9 -3
- package/src/pl/nip.ts +7 -3
- package/src/pl/pesel.ts +9 -7
- package/src/pl/regon.ts +7 -3
- package/src/pt/cc.ts +13 -7
- package/src/pt/vat.ts +8 -3
- package/src/ro/cnp.ts +16 -8
- package/src/ro/vat.ts +8 -3
- package/src/rs/pib.ts +7 -3
- package/src/ru/inn.ts +9 -5
- package/src/se/orgnr.ts +7 -3
- package/src/se/personnummer.ts +35 -32
- package/src/se/vat.ts +8 -3
- package/src/sg/uen.ts +44 -23
- package/src/si/emso.ts +37 -11
- package/src/si/vat.ts +8 -3
- package/src/sk/dic.ts +8 -4
- package/src/sk/ico.ts +3 -2
- package/src/sk/rc.ts +17 -4
- package/src/th/tin.ts +7 -3
- package/src/tr/tckimlik.ts +7 -3
- package/src/tr/vkn.ts +7 -3
- package/src/tw/ubn.ts +9 -5
- package/src/types.ts +69 -7
- package/src/ua/edrpou.ts +10 -5
- package/src/us/ein.ts +95 -91
- package/src/us/itin.ts +14 -11
- package/src/us/rtn.ts +32 -19
- package/src/us/ssn.ts +7 -3
- package/src/uy/rut.ts +9 -5
- package/src/ve/rif.ts +19 -12
- package/src/vn/mst.ts +7 -3
- package/src/za/idnr.ts +9 -7
package/dist/ni/ruc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruc.js","names":[],"sources":["../../src/ni/ruc.ts"],"sourcesContent":["/**\n * RUC (Registro Único de Contribuyente, Nicaragua\n * tax number).\n *\n * For natural persons the RUC is the cédula de\n * identidad: 14 characters structured as\n * MMM-DDMMYY-NNNNL where:\n * - MMM = municipality code (001–999)\n * - DDMMYY = birth date\n * - NNNN = sequential number\n * - L = check letter (mod 23, ISO 7064)\n *\n * For legal entities (Personas Jurídicas) the RUC\n * starts with \"J\" followed by 13 digits. No public\n * check-digit algorithm is documented for the \"J\"\n * format, so validation is format-only.\n *\n * The check letter for natural persons uses modulo 23\n * with a 23-letter alphabet that excludes I, O, and Z\n * to avoid confusion with digits.\n *\n * @see https://www.dgi.gob.ni/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"ruc.js","names":[],"sources":["../../src/ni/ruc.ts"],"sourcesContent":["/**\n * RUC (Registro Único de Contribuyente, Nicaragua\n * tax number).\n *\n * For natural persons the RUC is the cédula de\n * identidad: 14 characters structured as\n * MMM-DDMMYY-NNNNL where:\n * - MMM = municipality code (001–999)\n * - DDMMYY = birth date\n * - NNNN = sequential number\n * - L = check letter (mod 23, ISO 7064)\n *\n * For legal entities (Personas Jurídicas) the RUC\n * starts with \"J\" followed by 13 digits. No public\n * check-digit algorithm is documented for the \"J\"\n * format, so validation is format-only.\n *\n * The check letter for natural persons uses modulo 23\n * with a 23-letter alphabet that excludes I, O, and Z\n * to avoid confusion with digits.\n *\n * @see https://www.dgi.gob.ni/\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 * Check letter alphabet (mod 23). Excludes I, O, Z\n * to prevent transcription errors.\n */\nconst CHECK_ALPHABET = \"ABCDEFGHJKLMNPQRSTUVWXY\";\n\n/**\n * Compact: strip spaces, hyphens, and uppercase.\n */\nconst compact = (value: string): string =>\n clean(value, \" -\").trim().toUpperCase();\n\n/**\n * Validate a birth date encoded as DDMMYY.\n * Returns true if the date components are plausible.\n */\nconst isValidDate = (ddmmyy: string): boolean => {\n const day = Number(ddmmyy.slice(0, 2));\n const month = Number(ddmmyy.slice(2, 4));\n\n if (month < 1 || month > 12) return false;\n if (day < 1 || day > 31) return false;\n\n return true;\n};\n\n/**\n * Calculate the check letter for a 13-digit body\n * using modulo 23.\n */\nconst calcCheckLetter = (body: string): string => {\n let n = 0n;\n for (const ch of body) {\n n = n * 10n + BigInt(ch);\n }\n const idx = Number(n % 23n);\n // SAFETY: idx is always 0–22 (mod 23), and\n // CHECK_ALPHABET has exactly 23 characters.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return CHECK_ALPHABET[idx]!;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 14) {\n return err(\n \"INVALID_LENGTH\",\n \"Nicaragua RUC must be 14 characters\",\n );\n }\n\n // Legal entity: starts with J + 13 digits\n if (v[0] === \"J\") {\n if (!isdigits(v.slice(1))) {\n return err(\n \"INVALID_FORMAT\",\n \"Nicaragua legal entity RUC must be \" +\n \"J followed by 13 digits\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // Natural person: 13 digits + 1 letter\n const body = v.slice(0, 13);\n // SAFETY: length is validated as exactly 14 above.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const check = v[13]!;\n\n if (!isdigits(body)) {\n return err(\n \"INVALID_FORMAT\",\n \"Nicaragua RUC body must contain only digits\",\n );\n }\n\n if (!CHECK_ALPHABET.includes(check)) {\n return err(\n \"INVALID_FORMAT\",\n \"Nicaragua RUC check letter is invalid\",\n );\n }\n\n // Validate date portion (positions 3–8: DDMMYY)\n const datePart = body.slice(3, 9);\n if (!isValidDate(datePart)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Nicaragua RUC contains an invalid \" + \"birth date\",\n );\n }\n\n // Verify check letter\n const expected = calcCheckLetter(body);\n if (check !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Nicaragua RUC check letter does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\n/**\n * Format: insert hyphens as MMM-DDMMYY-NNNNL\n * for natural persons. Legal entities are returned\n * in compact form (JNNNNNNNNNNNNN); no documented\n * segmentation exists for the J-prefix format.\n */\nconst format = (value: string): string => {\n const v = compact(value);\n if (v[0] === \"J\") {\n return `J-${v.slice(1)}`;\n }\n return (\n `${v.slice(0, 3)}-${v.slice(3, 9)}` + `-${v.slice(9)}`\n );\n};\n\n/** Generate a random valid Nicaraguan RUC (legal entity). */\nconst generate = (): string => \"J\" + randomDigits(13);\n\n/** Nicaragua tax identification number. */\nconst ruc: CountryValidator<\"NI\"> = {\n name: \"Tax Identification Number\",\n localName: \"Registro Único de Contribuyente\",\n abbreviation: \"RUC\",\n aliases: [\"RUC\"] as const,\n candidatePattern: \"[JKME]\\\\d{13}\",\n scope: \"country\",\n country: \"NI\",\n entityType: \"any\",\n description: \"Tax identifier issued by Nicaragua's DGI\",\n sourceUrl: \"https://www.dgi.gob.ni/\",\n lengths: [14] as const,\n examples: [\"6071904680001F\", \"2811505850012D\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ruc;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;AAsCA,MAAM,iBAAiB;;;;AAKvB,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,EAAE,KAAK,EAAE,YAAY;;;;;AAMxC,MAAM,eAAe,WAA4B;CAC/C,MAAM,MAAM,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC;CACrC,MAAM,QAAQ,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC;CAEvC,IAAI,QAAQ,KAAK,QAAQ,IAAI,OAAO;CACpC,IAAI,MAAM,KAAK,MAAM,IAAI,OAAO;CAEhC,OAAO;AACT;;;;;AAMA,MAAM,mBAAmB,SAAyB;CAChD,IAAI,IAAI;CACR,KAAK,MAAM,MAAM,MACf,IAAI,IAAI,MAAM,OAAO,EAAE;CAMzB,OAAO,eAJK,OAAO,IAAI,GAIC;AAC1B;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,qCACF;CAIF,IAAI,EAAE,OAAO,KAAK;EAChB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,GACtB,OAAO,IACL,kBACA,4DAEF;EAEF,OAAO;GAAE,OAAO;GAAM,SAAS;EAAE;CACnC;CAGA,MAAM,OAAO,EAAE,MAAM,GAAG,EAAE;CAG1B,MAAM,QAAQ,EAAE;CAEhB,IAAI,CAAC,SAAS,IAAI,GAChB,OAAO,IACL,kBACA,6CACF;CAGF,IAAI,CAAC,eAAe,SAAS,KAAK,GAChC,OAAO,IACL,kBACA,uCACF;CAKF,IAAI,CAAC,YADY,KAAK,MAAM,GAAG,CACP,CAAC,GACvB,OAAO,IACL,qBACA,8CACF;CAKF,IAAI,UADa,gBAAgB,IACZ,GACnB,OAAO,IACL,oBACA,2CACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;;;;;;;AAQA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,OAAO,KACX,OAAO,KAAK,EAAE,MAAM,CAAC;CAEvB,OACE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAA,GAAU,EAAE,MAAM,CAAC;AAEvD;;AAGA,MAAM,iBAAyB,MAAM,aAAa,EAAE;;AAGpD,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,KAAK;CACf,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aAAa;CACb,WAAW;CACX,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,kBAAkB,gBAAgB;CAC7C;CACA;CACA;CACA;AACF"}
|
package/dist/nl/bsn.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/nl/bsn.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Dutch BSN. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Dutch Citizen Service Number. */
|
|
11
|
-
declare const bsn:
|
|
10
|
+
declare const bsn: CountryValidator<"NL">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, bsn as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=bsn.d.ts.map
|
package/dist/nl/bsn.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/nl/bsn.ts
|
|
7
|
-
/**
|
|
8
|
-
* BSN (Burgerservicenummer).
|
|
9
|
-
*
|
|
10
|
-
* Dutch citizen service number. 9 digits (zero-padded)
|
|
11
|
-
* with a weighted checksum where the last digit has
|
|
12
|
-
* weight -1.
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.government.nl/topics/personal-data/citizen-service-number-bsn
|
|
15
|
-
*/
|
|
16
7
|
const WEIGHTS = [
|
|
17
8
|
9,
|
|
18
9
|
8,
|
|
@@ -55,6 +46,7 @@ const bsn = {
|
|
|
55
46
|
"sofinummer"
|
|
56
47
|
],
|
|
57
48
|
candidatePattern: "\\d{9}",
|
|
49
|
+
scope: "country",
|
|
58
50
|
country: "NL",
|
|
59
51
|
entityType: "person",
|
|
60
52
|
sourceUrl: "https://www.government.nl/topics/personal-data/citizen-service-number-bsn",
|
package/dist/nl/bsn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bsn.js","names":[],"sources":["../../src/nl/bsn.ts"],"sourcesContent":["/**\n * BSN (Burgerservicenummer).\n *\n * Dutch citizen service number. 9 digits (zero-padded)\n * with a weighted checksum where the last digit has\n * weight -1.\n *\n * @see https://www.government.nl/topics/personal-data/citizen-service-number-bsn\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":"bsn.js","names":[],"sources":["../../src/nl/bsn.ts"],"sourcesContent":["/**\n * BSN (Burgerservicenummer).\n *\n * Dutch citizen service number. 9 digits (zero-padded)\n * with a weighted checksum where the last digit has\n * weight -1.\n *\n * @see https://www.government.nl/topics/personal-data/citizen-service-number-bsn\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 = [9, 8, 7, 6, 5, 4, 3, 2, -1] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").padStart(9, \"0\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"BSN must be exactly 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"BSN must contain only digits\",\n );\n }\n\n if (Number(v) === 0) {\n return err(\"INVALID_FORMAT\", \"BSN cannot be all zeros\");\n }\n\n const sum = weightedSum(v, WEIGHTS, 11);\n if (sum !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"BSN check does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Dutch BSN. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Dutch Citizen Service Number. */\nconst bsn: CountryValidator<\"NL\"> = {\n name: \"Dutch Citizen Service Number\",\n localName: \"Burgerservicenummer\",\n abbreviation: \"BSN\",\n aliases: [\n \"burgerservicenummer\",\n \"BSN\",\n \"sofinummer\",\n ] as const,\n candidatePattern: \"\\\\d{9}\",\n scope: \"country\",\n country: \"NL\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.government.nl/topics/personal-data/citizen-service-number-bsn\",\n examples: [\"111222333\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default bsn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAqBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAE;AAE3C,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG;AAErC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAGF,IAAI,OAAO,CAAC,MAAM,GAChB,OAAO,IAAI,kBAAkB,yBAAyB;CAIxD,IADY,YAAY,GAAG,SAAS,EAC9B,MAAM,GACV,OAAO,IACL,oBACA,0BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,CAAC;EACxB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/nl/kvk.d.ts
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/nl/kvk.d.ts
|
|
4
4
|
/** Generate a random valid Dutch KvK number. */
|
|
5
5
|
declare const generate: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* KvK-nummer (Dutch Chamber of Commerce number).
|
|
8
|
+
*
|
|
9
|
+
* 8 digits. Format-only validation; no checksum.
|
|
10
|
+
*
|
|
11
|
+
* @see https://www.kvk.nl/
|
|
12
|
+
*/
|
|
6
13
|
declare const compact: (value: string) => string;
|
|
7
14
|
declare const validate: (value: string) => ValidateResult;
|
|
8
15
|
declare const format: (value: string) => string;
|
|
9
16
|
/** Dutch Chamber of Commerce Number. */
|
|
10
|
-
declare const kvk:
|
|
17
|
+
declare const kvk: CountryValidator<"NL">;
|
|
11
18
|
//#endregion
|
|
12
19
|
export { compact, kvk as default, format, generate, validate };
|
|
13
20
|
//# sourceMappingURL=kvk.d.ts.map
|
package/dist/nl/kvk.js
CHANGED
|
@@ -3,13 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/nl/kvk.ts
|
|
6
|
-
/**
|
|
7
|
-
* KvK-nummer (Dutch Chamber of Commerce number).
|
|
8
|
-
*
|
|
9
|
-
* 8 digits. Format-only validation; no checksum.
|
|
10
|
-
*
|
|
11
|
-
* @see https://www.kvk.nl/
|
|
12
|
-
*/
|
|
13
6
|
/** Generate a random valid Dutch KvK number. */
|
|
14
7
|
const generate = () => randomDigits(8);
|
|
15
8
|
const compact = (value) => clean(value, " -/.");
|
|
@@ -30,6 +23,7 @@ const kvk = {
|
|
|
30
23
|
abbreviation: "KvK",
|
|
31
24
|
aliases: ["KVK-nummer", "Kamer van Koophandel"],
|
|
32
25
|
candidatePattern: "\\d{8}",
|
|
26
|
+
scope: "country",
|
|
33
27
|
country: "NL",
|
|
34
28
|
entityType: "company",
|
|
35
29
|
sourceUrl: "https://www.kvk.nl/",
|
package/dist/nl/kvk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kvk.js","names":[],"sources":["../../src/nl/kvk.ts"],"sourcesContent":["/** Generate a random valid Dutch KvK number. */\nconst generate = (): string => randomDigits(8);\n\n/**\n * KvK-nummer (Dutch Chamber of Commerce number).\n *\n * 8 digits. Format-only validation; no checksum.\n *\n * @see https://www.kvk.nl/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"kvk.js","names":[],"sources":["../../src/nl/kvk.ts"],"sourcesContent":["/** Generate a random valid Dutch KvK number. */\nconst generate = (): string => randomDigits(8);\n\n/**\n * KvK-nummer (Dutch Chamber of Commerce number).\n *\n * 8 digits. Format-only validation; no checksum.\n *\n * @see https://www.kvk.nl/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -/.\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"Dutch KvK number must be 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch KvK number must contain only digits\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Dutch Chamber of Commerce Number. */\nconst kvk: CountryValidator<\"NL\"> = {\n name: \"Dutch Chamber of Commerce Number\",\n localName: \"KvK-nummer\",\n abbreviation: \"KvK\",\n aliases: [\"KVK-nummer\", \"Kamer van Koophandel\"] as const,\n candidatePattern: \"\\\\d{8}\",\n scope: \"country\",\n country: \"NL\",\n entityType: \"company\",\n sourceUrl: \"https://www.kvk.nl/\",\n examples: [\"12345678\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default kvk;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AACA,MAAM,iBAAyB,aAAa,CAAC;AAoB7C,MAAM,WAAW,UACf,MAAM,OAAO,MAAM;AAErB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,mCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,2CACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,cAAc,sBAAsB;CAC9C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,UAAU;CACrB;CACA;CACA;CACA;AACF"}
|
package/dist/nl/mod.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import bsn from "./bsn.js";
|
|
3
2
|
import kvk from "./kvk.js";
|
|
4
3
|
import vat from "./vat.js";
|
|
5
4
|
|
|
6
5
|
//#region src/nl/mod.d.ts
|
|
7
|
-
|
|
6
|
+
declare namespace mod_d_exports {
|
|
7
|
+
export { bsn, kvk, vat };
|
|
8
|
+
}
|
|
8
9
|
//#endregion
|
|
9
10
|
export { bsn, kvk, mod_d_exports, vat };
|
|
10
11
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/nl/vat.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/nl/vat.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Dutch VAT number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Dutch VAT Number. */
|
|
11
|
-
declare const vat:
|
|
10
|
+
declare const vat: CountryValidator<"NL">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, vat as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=vat.d.ts.map
|
package/dist/nl/vat.js
CHANGED
|
@@ -3,16 +3,6 @@ import { randomDigits } from "../_util/generate.js";
|
|
|
3
3
|
import { err } from "../_util/result.js";
|
|
4
4
|
import { isdigits } from "../_util/strings.js";
|
|
5
5
|
//#region src/nl/vat.ts
|
|
6
|
-
/**
|
|
7
|
-
* BTW (Dutch VAT number).
|
|
8
|
-
*
|
|
9
|
-
* 12 characters: 9 digits + "B" + 2 digits.
|
|
10
|
-
* Mod 97 check: convert "NL" + number to numeric
|
|
11
|
-
* (N=23, L=21, B=11), mod 97 === 1.
|
|
12
|
-
*
|
|
13
|
-
* @see https://www.vatify.eu/netherlands-vat-number.html
|
|
14
|
-
* @see https://business.gov.nl/regulations/using-checking-vat-numbers/
|
|
15
|
-
*/
|
|
16
6
|
const compact = (value) => {
|
|
17
7
|
let v = clean(value, " -/.");
|
|
18
8
|
if (v.startsWith("NL") || v.startsWith("nl")) v = v.slice(2);
|
|
@@ -21,44 +11,12 @@ const compact = (value) => {
|
|
|
21
11
|
if (bIdx > 0 && bIdx < 9) v = v.slice(0, bIdx).padStart(9, "0") + v.slice(bIdx);
|
|
22
12
|
return v;
|
|
23
13
|
};
|
|
24
|
-
/**
|
|
25
|
-
* Compute mod 97 of a string containing digits and
|
|
26
|
-
* uppercase letters (A=10, B=11, ..., Z=35).
|
|
27
|
-
*/
|
|
28
|
-
const mod97 = (value) => {
|
|
29
|
-
let remainder = 0;
|
|
30
|
-
for (const ch of value) {
|
|
31
|
-
const code = ch.charCodeAt(0);
|
|
32
|
-
if (code >= 48 && code <= 57) remainder = (remainder * 10 + (code - 48)) % 97;
|
|
33
|
-
else if (code >= 65 && code <= 90) {
|
|
34
|
-
const num = code - 55;
|
|
35
|
-
remainder = (remainder * 100 + num) % 97;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return remainder;
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Check if a 9-digit string is a valid BSN (Dutch citizen
|
|
42
|
-
* identification number). Weights [9,8,7,6,5,4,3,2,-1],
|
|
43
|
-
* sum % 11 === 0.
|
|
44
|
-
*/
|
|
45
|
-
const bsnValid = (num) => {
|
|
46
|
-
if (!isdigits(num) || num.length !== 9) return false;
|
|
47
|
-
if (Number.parseInt(num, 10) <= 0) return false;
|
|
48
|
-
let sum = 0;
|
|
49
|
-
for (let i = 0; i < 8; i++) sum += (9 - i) * Number(num[i]);
|
|
50
|
-
sum -= Number(num[8]);
|
|
51
|
-
return sum % 11 === 0;
|
|
52
|
-
};
|
|
53
14
|
const validate = (value) => {
|
|
54
15
|
const v = compact(value);
|
|
55
16
|
if (v.length !== 12) return err("INVALID_LENGTH", "Dutch VAT number must be 12 characters");
|
|
56
17
|
if (!isdigits(v.slice(0, 9))) return err("INVALID_FORMAT", "Dutch VAT number must start with 9 digits");
|
|
57
18
|
if (v[9] !== "B") return err("INVALID_COMPONENT", "Dutch VAT number digit 10 must be B");
|
|
58
19
|
if (!isdigits(v.slice(10, 12))) return err("INVALID_FORMAT", "Dutch VAT number must end with 2 digits");
|
|
59
|
-
if (Number.parseInt(v.slice(0, 9), 10) <= 0) return err("INVALID_FORMAT", "Dutch VAT number first 9 digits must be > 0");
|
|
60
|
-
if (Number.parseInt(v.slice(10, 12), 10) <= 0) return err("INVALID_FORMAT", "Dutch VAT number last 2 digits must be > 0");
|
|
61
|
-
if (!bsnValid(v.slice(0, 9)) && mod97(`NL${v}`) !== 1) return err("INVALID_CHECKSUM", "Dutch VAT number checksum failed");
|
|
62
20
|
return {
|
|
63
21
|
valid: true,
|
|
64
22
|
compact: v
|
|
@@ -66,12 +24,7 @@ const validate = (value) => {
|
|
|
66
24
|
};
|
|
67
25
|
const format = (value) => `NL${compact(value)}`;
|
|
68
26
|
/** Generate a random valid Dutch VAT number. */
|
|
69
|
-
const generate = () => {
|
|
70
|
-
for (;;) {
|
|
71
|
-
const c = randomDigits(9) + "B" + randomDigits(2);
|
|
72
|
-
if (validate(c).valid) return c;
|
|
73
|
-
}
|
|
74
|
-
};
|
|
27
|
+
const generate = () => `${randomDigits(9)}B${randomDigits(2)}`;
|
|
75
28
|
/** Dutch VAT Number. */
|
|
76
29
|
const vat = {
|
|
77
30
|
name: "Dutch VAT Number",
|
|
@@ -79,10 +32,11 @@ const vat = {
|
|
|
79
32
|
abbreviation: "BTW",
|
|
80
33
|
aliases: ["BTW-nummer", "BTW-id"],
|
|
81
34
|
candidatePattern: "NL\\d{9}B\\d{2}",
|
|
35
|
+
scope: "country",
|
|
82
36
|
country: "NL",
|
|
83
37
|
entityType: "company",
|
|
84
|
-
sourceUrl: "https://
|
|
85
|
-
examples: ["
|
|
38
|
+
sourceUrl: "https://business.gov.nl/regulations/using-checking-vat-numbers/",
|
|
39
|
+
examples: ["000099998B57"],
|
|
86
40
|
compact,
|
|
87
41
|
format,
|
|
88
42
|
validate,
|
package/dist/nl/vat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat.js","names":[],"sources":["../../src/nl/vat.ts"],"sourcesContent":["/**\n * BTW (Dutch VAT number).\n *\n * 12 characters: 9 digits + \"B\" + 2 digits.\n *
|
|
1
|
+
{"version":3,"file":"vat.js","names":[],"sources":["../../src/nl/vat.ts"],"sourcesContent":["/**\n * BTW (Dutch VAT number).\n *\n * 12 characters: 9 digits + \"B\" + 2 digits.\n *\n * The current Dutch VAT identification number\n * (btw-id) format is structural: `NL` + 9 digits\n * + `B` + 2 digits. The official guidance explicitly\n * states that the 9 digits are not derived from BSN\n * and the final 2 digits are random.\n *\n * @see https://business.gov.nl/regulations/using-checking-vat-numbers/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"NL\") || v.startsWith(\"nl\")) {\n v = v.slice(2);\n }\n v = v.toUpperCase();\n // Zero-pad numeric part to 9 digits if B is found\n const bIdx = v.indexOf(\"B\");\n if (bIdx > 0 && bIdx < 9) {\n v = v.slice(0, bIdx).padStart(9, \"0\") + v.slice(bIdx);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"Dutch VAT number must be 12 characters\",\n );\n }\n if (!isdigits(v.slice(0, 9))) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number must start with 9 digits\",\n );\n }\n if (v[9] !== \"B\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Dutch VAT number digit 10 must be B\",\n );\n }\n if (!isdigits(v.slice(10, 12))) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number must end with 2 digits\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `NL${compact(value)}`;\n\n/** Generate a random valid Dutch VAT number. */\nconst generate = (): string =>\n `${randomDigits(9)}B${randomDigits(2)}`;\n\n/** Dutch VAT Number. */\nconst vat: CountryValidator<\"NL\"> = {\n name: \"Dutch VAT Number\",\n localName: \"BTW-identificatienummer\",\n abbreviation: \"BTW\",\n aliases: [\"BTW-nummer\", \"BTW-id\"] as const,\n candidatePattern: \"NL\\\\d{9}B\\\\d{2}\",\n scope: \"country\",\n country: \"NL\",\n entityType: \"company\",\n sourceUrl:\n \"https://business.gov.nl/regulations/using-checking-vat-numbers/\",\n examples: [\"000099998B57\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAwBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,MAAM;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,IAAI,EAAE,MAAM,CAAC;CAEf,IAAI,EAAE,YAAY;CAElB,MAAM,OAAO,EAAE,QAAQ,GAAG;CAC1B,IAAI,OAAO,KAAK,OAAO,GACrB,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,GAAG,GAAG,IAAI,EAAE,MAAM,IAAI;CAEtD,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,wCACF;CAEF,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,GACzB,OAAO,IACL,kBACA,2CACF;CAEF,IAAI,EAAE,OAAO,KACX,OAAO,IACL,qBACA,qCACF;CAEF,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC,GAC3B,OAAO,IACL,kBACA,yCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBACJ,GAAG,aAAa,CAAC,EAAE,GAAG,aAAa,CAAC;;AAGtC,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,cAAc,QAAQ;CAChC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,cAAc;CACzB;CACA;CACA;CACA;AACF"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { ParsedPersonId, ValidateResult
|
|
1
|
+
import { CountryValidator, ParsedPersonId, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/no/fodselsnummer.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;
|
|
@@ -14,7 +13,7 @@ declare const parse: (value: string) => ParsedPersonId | null;
|
|
|
14
13
|
/** Generate a random valid Norwegian birth number. */
|
|
15
14
|
declare const generate: () => string;
|
|
16
15
|
/** Norwegian Birth Number. */
|
|
17
|
-
declare const fodselsnummer:
|
|
16
|
+
declare const fodselsnummer: CountryValidator<"NO", ParsedPersonId>;
|
|
18
17
|
//#endregion
|
|
19
18
|
export { compact, fodselsnummer as default, format, generate, parse, validate };
|
|
20
19
|
//# sourceMappingURL=fodselsnummer.d.ts.map
|
package/dist/no/fodselsnummer.js
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
import { clean } from "../_util/clean.js";
|
|
2
|
+
import { isValidDate } from "../_util/date.js";
|
|
2
3
|
import { randomDigits, randomInt } from "../_util/generate.js";
|
|
3
4
|
import { err } from "../_util/result.js";
|
|
4
5
|
import { isdigits } from "../_util/strings.js";
|
|
5
|
-
import { isValidDate } from "../_util/date.js";
|
|
6
6
|
//#region src/no/fodselsnummer.ts
|
|
7
|
-
/**
|
|
8
|
-
* Fødselsnummer (Norwegian birth number).
|
|
9
|
-
*
|
|
10
|
-
* 11 digits: DDMMYY + 3-digit individual number + 2
|
|
11
|
-
* check digits. Supports D-numbers (day + 40) and
|
|
12
|
-
* H-numbers (month + 40).
|
|
13
|
-
*
|
|
14
|
-
* @see https://www.skatteetaten.no/
|
|
15
|
-
*/
|
|
16
7
|
const WEIGHTS_D1 = [
|
|
17
8
|
3,
|
|
18
9
|
7,
|
|
@@ -119,12 +110,14 @@ const fodselsnummer = {
|
|
|
119
110
|
abbreviation: "Fødselsnr",
|
|
120
111
|
aliases: ["fødselsnummer", "personnummer"],
|
|
121
112
|
candidatePattern: "\\d{11}",
|
|
113
|
+
scope: "country",
|
|
122
114
|
country: "NO",
|
|
123
115
|
entityType: "person",
|
|
124
116
|
sourceUrl: "https://www.skatteetaten.no/",
|
|
125
117
|
examples: ["15108695088"],
|
|
126
118
|
compact,
|
|
127
119
|
format,
|
|
120
|
+
parse,
|
|
128
121
|
validate,
|
|
129
122
|
generate
|
|
130
123
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fodselsnummer.js","names":[],"sources":["../../src/no/fodselsnummer.ts"],"sourcesContent":["/**\n * Fødselsnummer (Norwegian birth number).\n *\n * 11 digits: DDMMYY + 3-digit individual number + 2\n * check digits. Supports D-numbers (day + 40) and\n * H-numbers (month + 40).\n *\n * @see https://www.skatteetaten.no/\n */\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\
|
|
1
|
+
{"version":3,"file":"fodselsnummer.js","names":[],"sources":["../../src/no/fodselsnummer.ts"],"sourcesContent":["/**\n * Fødselsnummer (Norwegian birth number).\n *\n * 11 digits: DDMMYY + 3-digit individual number + 2\n * check digits. Supports D-numbers (day + 40) and\n * H-numbers (month + 40).\n *\n * @see https://www.skatteetaten.no/\n */\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS_D1 = [3, 7, 6, 1, 8, 9, 4, 5, 2] as const;\nconst WEIGHTS_D2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst getCentury = (\n yy: number,\n individual: number,\n): number | undefined => {\n if (individual >= 0 && individual <= 499) return 1900;\n if (individual >= 500 && individual <= 749 && yy >= 54) {\n return 1800;\n }\n if (individual >= 500 && individual <= 999 && yy < 40) {\n return 2000;\n }\n if (individual >= 900 && individual <= 999 && yy >= 40) {\n return 1900;\n }\n return undefined;\n};\n\nconst checkDigit = (\n v: string,\n weights: readonly number[],\n): number | undefined => {\n let sum = 0;\n for (let i = 0; i < weights.length; i++) {\n sum += Number(v.charAt(i)) * (weights[i] ?? 0);\n }\n const remainder = (11 - (sum % 11)) % 11;\n if (remainder === 10) return undefined;\n return remainder;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Norwegian birth number must be 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Norwegian birth number must contain only digits\",\n );\n }\n\n // Check digits\n const d1 = checkDigit(v, WEIGHTS_D1);\n if (d1 === undefined || d1 !== Number(v[9])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Norwegian birth number check digit 1 mismatch\",\n );\n }\n const d2 = checkDigit(v, WEIGHTS_D2);\n if (d2 === undefined || d2 !== Number(v[10])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Norwegian birth number check digit 2 mismatch\",\n );\n }\n\n // Parse date components\n let dd = Number(v.slice(0, 2));\n let mm = Number(v.slice(2, 4));\n const yy = Number(v.slice(4, 6));\n const individual = Number(v.slice(6, 9));\n\n // D-number: day > 40\n if (dd > 40) dd -= 40;\n // H-number: month > 40\n if (mm > 40) mm -= 40;\n\n const century = getCentury(yy, individual);\n if (century === undefined) {\n return err(\n \"INVALID_COMPONENT\",\n \"Norwegian birth number has invalid individual/century combination\",\n );\n }\n\n const year = century + yy;\n if (!isValidDate(year, mm, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Norwegian birth number contains an invalid date\",\n );\n }\n\n // Reject future birth dates\n if (new Date(year, mm - 1, dd) > new Date()) {\n return err(\n \"INVALID_COMPONENT\",\n \"Birth date is in the future\",\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 Norwegian\n * birth number. Returns null if the value is not\n * 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 let dd = Number(v.slice(0, 2));\n let mm = Number(v.slice(2, 4));\n const yy = Number(v.slice(4, 6));\n const individual = Number(v.slice(6, 9));\n\n if (dd > 40) dd -= 40;\n if (mm > 40) mm -= 40;\n\n const century = getCentury(yy, individual);\n if (century === undefined) return null;\n\n const year = century + yy;\n\n return {\n birthDate: new Date(year, mm - 1, dd),\n gender: individual % 2 === 0 ? \"female\" : \"male\",\n };\n};\n\n/** Generate a random valid Norwegian birth number. */\nconst generate = (): string => {\n for (;;) {\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(50, 99)).padStart(2, \"0\");\n const ind = String(randomInt(0, 499)).padStart(3, \"0\");\n const c = dd + mm + yy + ind + randomDigits(2);\n if (validate(c).valid) return c;\n }\n};\n\n/** Norwegian Birth Number. */\nconst fodselsnummer: CountryValidator<\n \"NO\",\n ParsedPersonId\n> = {\n name: \"Norwegian Birth Number\",\n localName: \"Fødselsnummer\",\n abbreviation: \"Fødselsnr\",\n aliases: [\"fødselsnummer\", \"personnummer\"] as const,\n candidatePattern: \"\\\\d{11}\",\n scope: \"country\",\n country: \"NO\",\n entityType: \"person\",\n sourceUrl: \"https://www.skatteetaten.no/\",\n examples: [\"15108695088\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default fodselsnummer;\nexport { compact, format, parse, validate, generate };\n"],"mappings":";;;;;;AAsBA,MAAM,aAAa;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAC7C,MAAM,aAAa;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEhD,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,cACJ,IACA,eACuB;CACvB,IAAI,cAAc,KAAK,cAAc,KAAK,OAAO;CACjD,IAAI,cAAc,OAAO,cAAc,OAAO,MAAM,IAClD,OAAO;CAET,IAAI,cAAc,OAAO,cAAc,OAAO,KAAK,IACjD,OAAO;CAET,IAAI,cAAc,OAAO,cAAc,OAAO,MAAM,IAClD,OAAO;AAGX;AAEA,MAAM,cACJ,GACA,YACuB;CACvB,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAClC,OAAO,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,QAAQ,MAAM;CAE9C,MAAM,aAAa,KAAM,MAAM,MAAO;CACtC,IAAI,cAAc,IAAI,OAAO,KAAA;CAC7B,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,0CACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,iDACF;CAIF,MAAM,KAAK,WAAW,GAAG,UAAU;CACnC,IAAI,OAAO,KAAA,KAAa,OAAO,OAAO,EAAE,EAAE,GACxC,OAAO,IACL,oBACA,+CACF;CAEF,MAAM,KAAK,WAAW,GAAG,UAAU;CACnC,IAAI,OAAO,KAAA,KAAa,OAAO,OAAO,EAAE,GAAG,GACzC,OAAO,IACL,oBACA,+CACF;CAIF,IAAI,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC7B,IAAI,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC7B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,aAAa,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAGvC,IAAI,KAAK,IAAI,MAAM;CAEnB,IAAI,KAAK,IAAI,MAAM;CAEnB,MAAM,UAAU,WAAW,IAAI,UAAU;CACzC,IAAI,YAAY,KAAA,GACd,OAAO,IACL,qBACA,mEACF;CAGF,MAAM,OAAO,UAAU;CACvB,IAAI,CAAC,YAAY,MAAM,IAAI,EAAE,GAC3B,OAAO,IACL,qBACA,iDACF;CAIF,IAAI,IAAI,KAAK,MAAM,KAAK,GAAG,EAAE,oBAAI,IAAI,KAAK,GACxC,OAAO,IACL,qBACA,6BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;AACtC;;;;;;AAOA,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,KAAK;CAC7B,IAAI,CAAC,OAAO,OAAO,OAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,IAAI,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC7B,IAAI,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC7B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,aAAa,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAEvC,IAAI,KAAK,IAAI,MAAM;CACnB,IAAI,KAAK,IAAI,MAAM;CAEnB,MAAM,UAAU,WAAW,IAAI,UAAU;CACzC,IAAI,YAAY,KAAA,GAAW,OAAO;CAElC,MAAM,OAAO,UAAU;CAEvB,OAAO;EACL,WAAW,IAAI,KAAK,MAAM,KAAK,GAAG,EAAE;EACpC,QAAQ,aAAa,MAAM,IAAI,WAAW;CAC5C;AACF;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,IAAI,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACpD,MAAM,MAAM,OAAO,UAAU,GAAG,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG;EACrD,MAAM,IAAI,KAAK,KAAK,KAAK,MAAM,aAAa,CAAC;EAC7C,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,gBAGF;CACF,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,iBAAiB,cAAc;CACzC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;CACA;AACF"}
|
package/dist/no/mod.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import orgnr from "./orgnr.js";
|
|
3
2
|
import mva from "./mva.js";
|
|
4
3
|
import fodselsnummer from "./fodselsnummer.js";
|
|
5
4
|
|
|
6
5
|
//#region src/no/mod.d.ts
|
|
7
|
-
|
|
6
|
+
declare namespace mod_d_exports {
|
|
7
|
+
export { fodselsnummer, mva, orgnr };
|
|
8
|
+
}
|
|
8
9
|
//#endregion
|
|
9
10
|
export { fodselsnummer, mod_d_exports, mva, orgnr };
|
|
10
11
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/no/mva.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/no/mva.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Norwegian VAT number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Norwegian VAT Number. */
|
|
11
|
-
declare const mva:
|
|
10
|
+
declare const mva: CountryValidator<"NO">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, mva as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=mva.d.ts.map
|
package/dist/no/mva.js
CHANGED
|
@@ -2,14 +2,6 @@ import { clean } from "../_util/clean.js";
|
|
|
2
2
|
import { err } from "../_util/result.js";
|
|
3
3
|
import { generate as generate$1, validate as validate$1 } from "./orgnr.js";
|
|
4
4
|
//#region src/no/mva.ts
|
|
5
|
-
/**
|
|
6
|
-
* MVA (Merverdiavgift, Norwegian VAT number).
|
|
7
|
-
*
|
|
8
|
-
* Format: optional "NO" prefix + 9 digits + "MVA" suffix.
|
|
9
|
-
* The 9-digit part is validated as an Organisasjonsnummer.
|
|
10
|
-
*
|
|
11
|
-
* @see https://www.skatteetaten.no/
|
|
12
|
-
*/
|
|
13
5
|
const compact = (value) => {
|
|
14
6
|
let v = clean(value, " -").toUpperCase();
|
|
15
7
|
if (v.startsWith("NO")) v = v.slice(2);
|
|
@@ -39,6 +31,7 @@ const mva = {
|
|
|
39
31
|
abbreviation: "MVA",
|
|
40
32
|
aliases: ["MVA-nummer", "organisasjonsnummer"],
|
|
41
33
|
candidatePattern: "NO\\d{9}MVA",
|
|
34
|
+
scope: "country",
|
|
42
35
|
country: "NO",
|
|
43
36
|
entityType: "company",
|
|
44
37
|
sourceUrl: "https://www.skatteetaten.no/",
|
package/dist/no/mva.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mva.js","names":["validateOrgnr","generateOrgnr"],"sources":["../../src/no/mva.ts"],"sourcesContent":["/**\n * MVA (Merverdiavgift, Norwegian VAT number).\n *\n * Format: optional \"NO\" prefix + 9 digits + \"MVA\" suffix.\n * The 9-digit part is validated as an Organisasjonsnummer.\n *\n * @see https://www.skatteetaten.no/\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"mva.js","names":["validateOrgnr","generateOrgnr"],"sources":["../../src/no/mva.ts"],"sourcesContent":["/**\n * MVA (Merverdiavgift, Norwegian VAT number).\n *\n * Format: optional \"NO\" prefix + 9 digits + \"MVA\" suffix.\n * The 9-digit part is validated as an Organisasjonsnummer.\n *\n * @see https://www.skatteetaten.no/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\nimport {\n validate as validateOrgnr,\n generate as generateOrgnr,\n} from \"./orgnr\";\n\nimport { clean } from \"#util/clean\";\nimport { err } from \"#util/result\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -\").toUpperCase();\n if (v.startsWith(\"NO\")) {\n v = v.slice(2);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (!v.endsWith(\"MVA\")) {\n return err(\n \"INVALID_FORMAT\",\n \"Norwegian VAT must end with MVA\",\n );\n }\n\n const digits = v.slice(0, -3);\n const orgnrResult = validateOrgnr(digits);\n if (!orgnrResult.valid) {\n return orgnrResult;\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n const digits = v.endsWith(\"MVA\") ? v.slice(0, -3) : v;\n return `NO ${digits.slice(0, 3)} ${digits.slice(3, 6)} ${digits.slice(6)} MVA`;\n};\n\n/** Generate a random valid Norwegian VAT number. */\nconst generate = (): string => generateOrgnr() + \"MVA\";\n\n/** Norwegian VAT Number. */\nconst mva: CountryValidator<\"NO\"> = {\n name: \"Norwegian VAT Number\",\n localName: \"Merverdiavgift\",\n abbreviation: \"MVA\",\n aliases: [\"MVA-nummer\", \"organisasjonsnummer\"] as const,\n candidatePattern: \"NO\\\\d{9}MVA\",\n scope: \"country\",\n country: \"NO\",\n entityType: \"company\",\n sourceUrl: \"https://www.skatteetaten.no/\",\n examples: [\"995525828MVA\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default mva;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;AAqBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,IAAI,EAAE,YAAY;CACvC,IAAI,EAAE,WAAW,IAAI,GACnB,IAAI,EAAE,MAAM,CAAC;CAEf,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,CAAC,EAAE,SAAS,KAAK,GACnB,OAAO,IACL,kBACA,iCACF;CAIF,MAAM,cAAcA,WADL,EAAE,MAAM,GAAG,EACa,CAAC;CACxC,IAAI,CAAC,YAAY,OACf,OAAO;CAGT,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,MAAM,SAAS,EAAE,SAAS,KAAK,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI;CACpD,OAAO,MAAM,OAAO,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,MAAM,CAAC,EAAE;AAC3E;;AAGA,MAAM,iBAAyBC,WAAc,IAAI;;AAGjD,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,cAAc,qBAAqB;CAC7C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,cAAc;CACzB;CACA;CACA;CACA;AACF"}
|
package/dist/no/orgnr.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/no/orgnr.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid Norwegian org number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** Norwegian Organization Number. */
|
|
11
|
-
declare const orgnr:
|
|
10
|
+
declare const orgnr: CountryValidator<"NO">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, orgnr as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=orgnr.d.ts.map
|
package/dist/no/orgnr.js
CHANGED
|
@@ -1,16 +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/no/orgnr.ts
|
|
7
|
-
/**
|
|
8
|
-
* Organisasjonsnummer (Norwegian organization number).
|
|
9
|
-
*
|
|
10
|
-
* 9 digits. Weights [3,2,7,6,5,4,3,2,1], sum % 11 === 0.
|
|
11
|
-
*
|
|
12
|
-
* @see https://www.brreg.no/
|
|
13
|
-
*/
|
|
14
7
|
const WEIGHTS = [
|
|
15
8
|
3,
|
|
16
9
|
2,
|
|
@@ -51,6 +44,7 @@ const orgnr = {
|
|
|
51
44
|
abbreviation: "Orgnr",
|
|
52
45
|
aliases: ["organisasjonsnummer", "org.nr"],
|
|
53
46
|
candidatePattern: "\\d{9}",
|
|
47
|
+
scope: "country",
|
|
54
48
|
country: "NO",
|
|
55
49
|
entityType: "company",
|
|
56
50
|
sourceUrl: "https://www.brreg.no/",
|
package/dist/no/orgnr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgnr.js","names":[],"sources":["../../src/no/orgnr.ts"],"sourcesContent":["/**\n * Organisasjonsnummer (Norwegian organization number).\n *\n * 9 digits. Weights [3,2,7,6,5,4,3,2,1], sum % 11 === 0.\n *\n * @see https://www.brreg.no/\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":"orgnr.js","names":[],"sources":["../../src/no/orgnr.ts"],"sourcesContent":["/**\n * Organisasjonsnummer (Norwegian organization number).\n *\n * 9 digits. Weights [3,2,7,6,5,4,3,2,1], sum % 11 === 0.\n *\n * @see https://www.brreg.no/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [3, 2, 7, 6, 5, 4, 3, 2, 1] 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 !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Norwegian org number must be 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Norwegian org number must contain only digits\",\n );\n }\n\n const sum = weightedSum(v, WEIGHTS, 11);\n if (sum !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Norwegian org number 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, 3)} ${v.slice(3, 6)} ${v.slice(6)}`;\n};\n\n/** Generate a random valid Norwegian org number. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Norwegian Organization Number. */\nconst orgnr: CountryValidator<\"NO\"> = {\n name: \"Norwegian Organization Number\",\n localName: \"Organisasjonsnummer\",\n abbreviation: \"Orgnr\",\n aliases: [\"organisasjonsnummer\", \"org.nr\"] as const,\n candidatePattern: \"\\\\d{9}\",\n scope: \"country\",\n country: \"NO\",\n entityType: \"company\",\n sourceUrl: \"https://www.brreg.no/\",\n examples: [\"923609016\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default orgnr;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAmBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAE1C,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,uCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,+CACF;CAIF,IADY,YAAY,GAAG,SAAS,EAC9B,MAAM,GACV,OAAO,IACL,oBACA,2CACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;AACvD;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,CAAC;EACxB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,QAAgC;CACpC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,uBAAuB,QAAQ;CACzC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
|
package/dist/nz/ird.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CountryValidator, ValidateResult } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/nz/ird.d.ts
|
|
4
|
-
|
|
5
4
|
declare const compact: (value: string) => string;
|
|
6
5
|
declare const validate: (value: string) => ValidateResult;
|
|
7
6
|
declare const format: (value: string) => string;
|
|
8
7
|
/** Generate a random valid NZ IRD number. */
|
|
9
8
|
declare const generate: () => string;
|
|
10
9
|
/** New Zealand IRD Number. */
|
|
11
|
-
declare const ird:
|
|
10
|
+
declare const ird: CountryValidator<"NZ">;
|
|
12
11
|
//#endregion
|
|
13
12
|
export { compact, ird as default, format, generate, validate };
|
|
14
13
|
//# sourceMappingURL=ird.d.ts.map
|