stdnum 1.9.16 → 1.10.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/lib/cjs/at/vnr.js +2 -2
- package/lib/cjs/ba/jmbg.js +2 -2
- package/lib/cjs/cn/ric.js +2 -2
- package/lib/cjs/cu/ni.js +2 -2
- package/lib/cjs/cz/rc.js +2 -2
- package/lib/cjs/de/pwnr.js +2 -2
- package/lib/cjs/dk/cpr.js +7 -7
- package/lib/cjs/ee/ik.js +2 -2
- package/lib/cjs/fi/hetu.js +2 -3
- package/lib/cjs/gr/amka.js +2 -2
- package/lib/cjs/is/kennitala.js +2 -2
- package/lib/cjs/kr/rrn.js +2 -2
- package/lib/cjs/lv/pvn.js +2 -2
- package/lib/cjs/mx/curp.d.ts +1 -1
- package/lib/cjs/mx/curp.js +7 -11
- package/lib/cjs/mx/rfc.js +2 -2
- package/lib/cjs/my/nric.js +2 -2
- package/lib/cjs/no/fodselsnummer.js +3 -3
- package/lib/cjs/pl/pesel.js +2 -2
- package/lib/cjs/ro/cnp.js +2 -2
- package/lib/cjs/se/personnummer.js +34 -7
- package/lib/cjs/tw/tax_code.js +3 -3
- package/lib/cjs/util/index.d.ts +1 -1
- package/lib/cjs/util/index.js +4 -2
- package/lib/cjs/util/isValidDate.d.ts +6 -4
- package/lib/cjs/util/isValidDate.js +28 -12
- package/lib/cjs/za/idnr.js +2 -3
- package/lib/esm/at/vnr.js +2 -2
- package/lib/esm/ba/jmbg.js +3 -3
- package/lib/esm/cn/ric.js +2 -2
- package/lib/esm/cu/ni.js +3 -3
- package/lib/esm/cz/rc.js +3 -3
- package/lib/esm/de/pwnr.js +2 -2
- package/lib/esm/dk/cpr.js +8 -8
- package/lib/esm/ee/ik.js +2 -2
- package/lib/esm/fi/hetu.js +3 -4
- package/lib/esm/gr/amka.js +3 -3
- package/lib/esm/is/kennitala.js +3 -3
- package/lib/esm/kr/rrn.js +2 -2
- package/lib/esm/lv/pvn.js +3 -3
- package/lib/esm/mx/curp.d.ts +1 -1
- package/lib/esm/mx/curp.js +8 -12
- package/lib/esm/mx/rfc.js +2 -2
- package/lib/esm/my/nric.js +2 -2
- package/lib/esm/no/fodselsnummer.js +3 -3
- package/lib/esm/pl/pesel.js +2 -2
- package/lib/esm/ro/cnp.js +2 -2
- package/lib/esm/se/personnummer.js +35 -8
- package/lib/esm/tw/tax_code.js +3 -3
- package/lib/esm/util/index.d.ts +1 -1
- package/lib/esm/util/index.js +2 -2
- package/lib/esm/util/isValidDate.d.ts +6 -4
- package/lib/esm/util/isValidDate.js +25 -11
- package/lib/esm/za/idnr.js +3 -4
- package/package.json +5 -2
- package/src/ad/index.ts +1 -0
- package/src/ad/nrt.spec.ts +36 -0
- package/src/ad/nrt.ts +87 -0
- package/src/al/index.ts +1 -0
- package/src/al/nipt.spec.ts +43 -0
- package/src/al/nipt.ts +111 -0
- package/src/ar/cbu.spec.ts +28 -0
- package/src/ar/cbu.ts +96 -0
- package/src/ar/cuit.spec.ts +28 -0
- package/src/ar/cuit.ts +102 -0
- package/src/ar/dni.spec.ts +22 -0
- package/src/ar/dni.ts +72 -0
- package/src/ar/index.ts +3 -0
- package/src/at/businessid.spec.ts +34 -0
- package/src/at/businessid.ts +73 -0
- package/src/at/index.ts +4 -0
- package/src/at/tin.spec.ts +173 -0
- package/src/at/tin.ts +140 -0
- package/src/at/uid.spec.ts +44 -0
- package/src/at/uid.ts +84 -0
- package/src/at/vnr.spec.ts +38 -0
- package/src/at/vnr.ts +84 -0
- package/src/au/abn.spec.ts +28 -0
- package/src/au/abn.ts +78 -0
- package/src/au/acn.spec.ts +34 -0
- package/src/au/acn.ts +76 -0
- package/src/au/index.ts +3 -0
- package/src/au/tfn.spec.ts +28 -0
- package/src/au/tfn.ts +79 -0
- package/src/az/index.ts +2 -0
- package/src/az/pin.spec.ts +16 -0
- package/src/az/pin.ts +61 -0
- package/src/az/tin.spec.ts +28 -0
- package/src/az/tin.ts +64 -0
- package/src/ba/index.ts +1 -0
- package/src/ba/jmbg.spec.ts +28 -0
- package/src/ba/jmbg.ts +85 -0
- package/src/be/bis.spec.ts +184 -0
- package/src/be/bis.ts +85 -0
- package/src/be/index.ts +4 -0
- package/src/be/insz.spec.ts +51 -0
- package/src/be/insz.ts +55 -0
- package/src/be/nn.spec.ts +117 -0
- package/src/be/nn.ts +77 -0
- package/src/be/personIdentifierHelpers.spec.ts +254 -0
- package/src/be/personIdentifierHelpers.ts +130 -0
- package/src/be/vat.spec.ts +46 -0
- package/src/be/vat.ts +84 -0
- package/src/bg/egn.spec.ts +28 -0
- package/src/bg/egn.ts +75 -0
- package/src/bg/index.ts +3 -0
- package/src/bg/pnf.spec.ts +28 -0
- package/src/bg/pnf.ts +73 -0
- package/src/bg/vat.spec.ts +34 -0
- package/src/bg/vat.ts +120 -0
- package/src/br/cnpj.spec.ts +34 -0
- package/src/br/cnpj.ts +89 -0
- package/src/br/cpf.spec.ts +34 -0
- package/src/br/cpf.ts +87 -0
- package/src/br/index.ts +2 -0
- package/src/by/index.ts +1 -0
- package/src/by/unp.spec.ts +34 -0
- package/src/by/unp.ts +108 -0
- package/src/bz/index.ts +1 -0
- package/src/bz/tin.spec.ts +28 -0
- package/src/bz/tin.ts +67 -0
- package/src/ca/bn.spec.ts +40 -0
- package/src/ca/bn.ts +88 -0
- package/src/ca/gst.spec.ts +34 -0
- package/src/ca/gst.ts +70 -0
- package/src/ca/index.ts +5 -0
- package/src/ca/pst.spec.ts +28 -0
- package/src/ca/pst.ts +71 -0
- package/src/ca/qst.spec.ts +47 -0
- package/src/ca/qst.ts +88 -0
- package/src/ca/sin.spec.ts +34 -0
- package/src/ca/sin.ts +72 -0
- package/src/ch/index.ts +3 -0
- package/src/ch/ssn.spec.ts +50 -0
- package/src/ch/ssn.ts +74 -0
- package/src/ch/uid.spec.ts +34 -0
- package/src/ch/uid.ts +82 -0
- package/src/ch/vat.spec.ts +28 -0
- package/src/ch/vat.ts +83 -0
- package/src/cl/index.ts +2 -0
- package/src/cl/run.ts +13 -0
- package/src/cl/rut.spec.ts +50 -0
- package/src/cl/rut.ts +97 -0
- package/src/cn/index.ts +2 -0
- package/src/cn/ric.spec.ts +34 -0
- package/src/cn/ric.ts +86 -0
- package/src/cn/uscc.spec.ts +34 -0
- package/src/cn/uscc.ts +110 -0
- package/src/co/index.ts +1 -0
- package/src/co/nit.spec.ts +40 -0
- package/src/co/nit.ts +85 -0
- package/src/cr/cpf.spec.ts +34 -0
- package/src/cr/cpf.ts +93 -0
- package/src/cr/cpj.spec.ts +28 -0
- package/src/cr/cpj.ts +111 -0
- package/src/cr/cr.spec.ts +28 -0
- package/src/cr/cr.ts +75 -0
- package/src/cr/index.ts +3 -0
- package/src/cu/index.ts +1 -0
- package/src/cu/ni.spec.ts +34 -0
- package/src/cu/ni.ts +74 -0
- package/src/cy/index.ts +1 -0
- package/src/cy/vat.spec.ts +28 -0
- package/src/cy/vat.ts +98 -0
- package/src/cz/dic.spec.ts +28 -0
- package/src/cz/dic.ts +127 -0
- package/src/cz/index.ts +2 -0
- package/src/cz/rc.spec.ts +44 -0
- package/src/cz/rc.ts +95 -0
- package/src/de/idnr.spec.ts +34 -0
- package/src/de/idnr.ts +91 -0
- package/src/de/index.ts +6 -0
- package/src/de/passport.spec.ts +31 -0
- package/src/de/passport.ts +86 -0
- package/src/de/pwnr.spec.ts +62 -0
- package/src/de/pwnr.ts +190 -0
- package/src/de/stnr.spec.ts +85 -0
- package/src/de/stnr.ts +193 -0
- package/src/de/svnr.spec.ts +56 -0
- package/src/de/svnr.ts +158 -0
- package/src/de/vat.spec.ts +28 -0
- package/src/de/vat.ts +74 -0
- package/src/dk/cpr.spec.ts +34 -0
- package/src/dk/cpr.ts +129 -0
- package/src/dk/cvr.spec.ts +28 -0
- package/src/dk/cvr.ts +81 -0
- package/src/dk/index.ts +2 -0
- package/src/do/cedula.spec.ts +34 -0
- package/src/do/cedula.ts +67 -0
- package/src/do/index.ts +3 -0
- package/src/do/ncf.spec.ts +34 -0
- package/src/do/ncf.ts +133 -0
- package/src/do/rnc.spec.ts +40 -0
- package/src/do/rnc.ts +74 -0
- package/src/dz/index.ts +1 -0
- package/src/dz/nif.spec.ts +39 -0
- package/src/dz/nif.ts +80 -0
- package/src/ec/ci.spec.ts +28 -0
- package/src/ec/ci.ts +92 -0
- package/src/ec/index.ts +2 -0
- package/src/ec/ruc.spec.ts +37 -0
- package/src/ec/ruc.ts +117 -0
- package/src/ee/ik.spec.ts +28 -0
- package/src/ee/ik.ts +114 -0
- package/src/ee/index.ts +3 -0
- package/src/ee/kmkr.spec.ts +28 -0
- package/src/ee/kmkr.ts +76 -0
- package/src/ee/registrikood.spec.ts +28 -0
- package/src/ee/registrikood.ts +80 -0
- package/src/eg/index.ts +1 -0
- package/src/eg/tn.spec.ts +44 -0
- package/src/eg/tn.ts +96 -0
- package/src/es/cif.spec.ts +43 -0
- package/src/es/cif.ts +84 -0
- package/src/es/dni.spec.ts +28 -0
- package/src/es/dni.ts +83 -0
- package/src/es/index.ts +5 -0
- package/src/es/nie.spec.ts +28 -0
- package/src/es/nie.ts +79 -0
- package/src/es/nif.spec.ts +52 -0
- package/src/es/nif.ts +95 -0
- package/src/es/nss.spec.ts +28 -0
- package/src/es/nss.ts +132 -0
- package/src/exceptions.ts +66 -0
- package/src/fi/alv.spec.ts +28 -0
- package/src/fi/alv.ts +76 -0
- package/src/fi/hetu.spec.ts +37 -0
- package/src/fi/hetu.ts +108 -0
- package/src/fi/index.ts +3 -0
- package/src/fi/ytunnus.spec.ts +28 -0
- package/src/fi/ytunnus.ts +49 -0
- package/src/fo/index.ts +1 -0
- package/src/fo/vn.spec.ts +34 -0
- package/src/fo/vn.ts +71 -0
- package/src/fr/index.ts +5 -0
- package/src/fr/nif.spec.ts +34 -0
- package/src/fr/nif.ts +82 -0
- package/src/fr/nir.spec.ts +36 -0
- package/src/fr/nir.ts +98 -0
- package/src/fr/siren.spec.ts +28 -0
- package/src/fr/siren.ts +68 -0
- package/src/fr/siret.spec.ts +38 -0
- package/src/fr/siret.ts +79 -0
- package/src/fr/tva.spec.ts +40 -0
- package/src/fr/tva.ts +125 -0
- package/src/gb/index.ts +3 -0
- package/src/gb/nino-prefixes.ts +245 -0
- package/src/gb/nino.spec.ts +80 -0
- package/src/gb/nino.ts +80 -0
- package/src/gb/utr.spec.ts +28 -0
- package/src/gb/utr.ts +76 -0
- package/src/gb/vat.spec.ts +40 -0
- package/src/gb/vat.ts +112 -0
- package/src/gen/ean.spec.ts +34 -0
- package/src/gen/ean.ts +71 -0
- package/src/gen/index.ts +1 -0
- package/src/gh/index.ts +1 -0
- package/src/gh/tin.spec.ts +42 -0
- package/src/gh/tin.ts +93 -0
- package/src/gn/index.ts +1 -0
- package/src/gn/nifp.spec.ts +40 -0
- package/src/gn/nifp.ts +72 -0
- package/src/gr/amka.spec.ts +28 -0
- package/src/gr/amka.ts +76 -0
- package/src/gr/index.ts +2 -0
- package/src/gr/vat.spec.ts +34 -0
- package/src/gr/vat.ts +84 -0
- package/src/gt/cui.spec.ts +34 -0
- package/src/gt/cui.ts +110 -0
- package/src/gt/index.ts +2 -0
- package/src/gt/nit.spec.ts +34 -0
- package/src/gt/nit.ts +86 -0
- package/src/hk/hkid.spec.ts +52 -0
- package/src/hk/hkid.ts +90 -0
- package/src/hk/index.ts +1 -0
- package/src/hr/index.ts +1 -0
- package/src/hr/oib.spec.ts +28 -0
- package/src/hr/oib.ts +67 -0
- package/src/hu/anum.spec.ts +28 -0
- package/src/hu/anum.ts +71 -0
- package/src/hu/index.ts +1 -0
- package/src/id/index.ts +1 -0
- package/src/id/npwp.spec.ts +34 -0
- package/src/id/npwp.ts +116 -0
- package/src/ie/index.ts +2 -0
- package/src/ie/pps.spec.ts +58 -0
- package/src/ie/pps.ts +81 -0
- package/src/ie/vat.spec.ts +40 -0
- package/src/ie/vat.ts +99 -0
- package/src/il/hp.spec.ts +38 -0
- package/src/il/hp.ts +75 -0
- package/src/il/idnr.spec.ts +28 -0
- package/src/il/idnr.ts +70 -0
- package/src/il/index.ts +2 -0
- package/src/in/aadhaar.spec.ts +40 -0
- package/src/in/aadhaar.ts +85 -0
- package/src/in/epic.spec.ts +34 -0
- package/src/in/epic.ts +85 -0
- package/src/in/gstin.spec.ts +34 -0
- package/src/in/gstin.ts +156 -0
- package/src/in/index.ts +4 -0
- package/src/in/pan.spec.ts +40 -0
- package/src/in/pan.ts +93 -0
- package/src/index.ts +404 -0
- package/src/is/index.ts +2 -0
- package/src/is/kennitala.spec.ts +46 -0
- package/src/is/kennitala.ts +80 -0
- package/src/is/vsk.spec.ts +22 -0
- package/src/is/vsk.ts +60 -0
- package/src/it/aic.spec.ts +40 -0
- package/src/it/aic.ts +97 -0
- package/src/it/codicefiscale.spec.ts +28 -0
- package/src/it/codicefiscale.ts +167 -0
- package/src/it/index.ts +3 -0
- package/src/it/iva.spec.ts +28 -0
- package/src/it/iva.ts +65 -0
- package/src/jp/cn.spec.ts +28 -0
- package/src/jp/cn.ts +77 -0
- package/src/jp/index.ts +1 -0
- package/src/ke/index.ts +1 -0
- package/src/ke/pin.spec.ts +34 -0
- package/src/ke/pin.ts +77 -0
- package/src/kr/brn.spec.ts +28 -0
- package/src/kr/brn.ts +91 -0
- package/src/kr/index.ts +2 -0
- package/src/kr/rrn.spec.ts +34 -0
- package/src/kr/rrn.ts +104 -0
- package/src/li/index.ts +1 -0
- package/src/li/peid.spec.ts +22 -0
- package/src/li/peid.ts +71 -0
- package/src/lt/asmens.spec.ts +28 -0
- package/src/lt/asmens.ts +73 -0
- package/src/lt/index.ts +2 -0
- package/src/lt/pvm.spec.ts +34 -0
- package/src/lt/pvm.ts +75 -0
- package/src/lu/index.ts +1 -0
- package/src/lu/tva.spec.ts +28 -0
- package/src/lu/tva.ts +70 -0
- package/src/lv/index.ts +1 -0
- package/src/lv/pvn.spec.ts +44 -0
- package/src/lv/pvn.ts +102 -0
- package/src/ma/ice.spec.ts +39 -0
- package/src/ma/ice.ts +72 -0
- package/src/ma/ice9.spec.ts +28 -0
- package/src/ma/ice9.ts +62 -0
- package/src/ma/index.ts +2 -0
- package/src/mc/index.ts +1 -0
- package/src/mc/tva.spec.ts +28 -0
- package/src/mc/tva.ts +67 -0
- package/src/md/idno.spec.ts +28 -0
- package/src/md/idno.ts +78 -0
- package/src/md/index.ts +1 -0
- package/src/me/index.ts +2 -0
- package/src/me/jmbg.ts +17 -0
- package/src/me/pib.spec.ts +158 -0
- package/src/me/pib.ts +77 -0
- package/src/mk/edb.spec.ts +50 -0
- package/src/mk/edb.ts +88 -0
- package/src/mk/index.ts +2 -0
- package/src/mk/jmbg.ts +17 -0
- package/src/mt/index.ts +1 -0
- package/src/mt/vat.spec.ts +28 -0
- package/src/mt/vat.ts +69 -0
- package/src/mu/index.ts +1 -0
- package/src/mu/nid.spec.ts +34 -0
- package/src/mu/nid.ts +89 -0
- package/src/mx/banks.ts +658 -0
- package/src/mx/clabe.spec.ts +68 -0
- package/src/mx/clabe.ts +105 -0
- package/src/mx/curp.spec.ts +28 -0
- package/src/mx/curp.ts +261 -0
- package/src/mx/index.ts +3 -0
- package/src/mx/rfc.spec.ts +69 -0
- package/src/mx/rfc.ts +193 -0
- package/src/my/index.ts +1 -0
- package/src/my/nric.spec.ts +40 -0
- package/src/my/nric.ts +91 -0
- package/src/nl/bsn.spec.ts +68 -0
- package/src/nl/bsn.ts +81 -0
- package/src/nl/btw.spec.ts +40 -0
- package/src/nl/btw.ts +95 -0
- package/src/nl/index.ts +3 -0
- package/src/nl/onderwijsnummer.spec.ts +34 -0
- package/src/nl/onderwijsnummer.ts +77 -0
- package/src/no/fodselsnummer.spec.ts +56 -0
- package/src/no/fodselsnummer.ts +118 -0
- package/src/no/index.ts +4 -0
- package/src/no/kontonr.spec.ts +34 -0
- package/src/no/kontonr.ts +84 -0
- package/src/no/mva.spec.ts +28 -0
- package/src/no/mva.ts +80 -0
- package/src/no/orgnr.spec.ts +28 -0
- package/src/no/orgnr.ts +75 -0
- package/src/nz/bank.spec.ts +28 -0
- package/src/nz/bank.ts +238 -0
- package/src/nz/index.ts +2 -0
- package/src/nz/ird.spec.ts +34 -0
- package/src/nz/ird.ts +102 -0
- package/src/pe/ce.spec.ts +46 -0
- package/src/pe/ce.ts +61 -0
- package/src/pe/cui.spec.ts +28 -0
- package/src/pe/cui.ts +85 -0
- package/src/pe/index.ts +3 -0
- package/src/pe/ruc.spec.ts +46 -0
- package/src/pe/ruc.ts +84 -0
- package/src/pk/cnic.spec.ts +34 -0
- package/src/pk/cnic.ts +97 -0
- package/src/pk/index.ts +2 -0
- package/src/pk/ntn.spec.ts +22 -0
- package/src/pk/ntn.ts +65 -0
- package/src/pl/index.ts +3 -0
- package/src/pl/nip.spec.ts +34 -0
- package/src/pl/nip.ts +74 -0
- package/src/pl/pesel.spec.ts +34 -0
- package/src/pl/pesel.ts +97 -0
- package/src/pl/regon.spec.ts +52 -0
- package/src/pl/regon.ts +88 -0
- package/src/pt/cc.spec.ts +43 -0
- package/src/pt/cc.ts +74 -0
- package/src/pt/index.ts +3 -0
- package/src/pt/nif.spec.ts +28 -0
- package/src/pt/nif.ts +78 -0
- package/src/pt/nipc.ts +27 -0
- package/src/py/cedula.spec.ts +46 -0
- package/src/py/cedula.ts +73 -0
- package/src/py/index.ts +2 -0
- package/src/py/ruc.spec.ts +40 -0
- package/src/py/ruc.ts +93 -0
- package/src/ro/cif.spec.ts +40 -0
- package/src/ro/cif.ts +62 -0
- package/src/ro/cnp.spec.ts +50 -0
- package/src/ro/cnp.ts +158 -0
- package/src/ro/cui.spec.ts +28 -0
- package/src/ro/cui.ts +83 -0
- package/src/ro/index.ts +4 -0
- package/src/ro/onrc.spec.ts +28 -0
- package/src/ro/onrc.ts +109 -0
- package/src/rs/index.ts +2 -0
- package/src/rs/jmbg.ts +16 -0
- package/src/rs/pib.spec.ts +28 -0
- package/src/rs/pib.ts +69 -0
- package/src/ru/index.ts +1 -0
- package/src/ru/inn.spec.ts +32 -0
- package/src/ru/inn.ts +106 -0
- package/src/se/index.ts +3 -0
- package/src/se/orgnr.spec.ts +28 -0
- package/src/se/orgnr.ts +68 -0
- package/src/se/personnummer.spec.ts +45 -0
- package/src/se/personnummer.ts +143 -0
- package/src/se/vat.spec.ts +28 -0
- package/src/se/vat.ts +73 -0
- package/src/sg/index.ts +1 -0
- package/src/sg/uen.spec.ts +46 -0
- package/src/sg/uen.ts +209 -0
- package/src/si/ddv.spec.ts +28 -0
- package/src/si/ddv.ts +76 -0
- package/src/si/emso.spec.ts +15 -0
- package/src/si/emso.ts +27 -0
- package/src/si/index.ts +3 -0
- package/src/si/jmbg.ts +20 -0
- package/src/sk/dph.spec.ts +28 -0
- package/src/sk/dph.ts +71 -0
- package/src/sk/index.ts +2 -0
- package/src/sk/rc.ts +12 -0
- package/src/sm/coe.spec.ts +34 -0
- package/src/sm/coe.ts +80 -0
- package/src/sm/index.ts +1 -0
- package/src/sv/index.ts +1 -0
- package/src/sv/nit.spec.ts +34 -0
- package/src/sv/nit.ts +117 -0
- package/src/th/idnr.spec.ts +41 -0
- package/src/th/idnr.ts +80 -0
- package/src/th/index.ts +3 -0
- package/src/th/moa.spec.ts +62 -0
- package/src/th/moa.ts +85 -0
- package/src/th/tin.spec.ts +77 -0
- package/src/th/tin.ts +56 -0
- package/src/tn/index.ts +1 -0
- package/src/tn/mf.spec.ts +37 -0
- package/src/tn/mf.ts +169 -0
- package/src/tr/index.ts +2 -0
- package/src/tr/tckimlik.spec.ts +40 -0
- package/src/tr/tckimlik.ts +87 -0
- package/src/tr/vkn.spec.ts +28 -0
- package/src/tr/vkn.ts +87 -0
- package/src/tw/ban.spec.ts +28 -0
- package/src/tw/ban.ts +67 -0
- package/src/tw/index.ts +5 -0
- package/src/tw/natid.spec.ts +28 -0
- package/src/tw/natid.ts +105 -0
- package/src/tw/tax_code.spec.ts +34 -0
- package/src/tw/tax_code.ts +98 -0
- package/src/tw/ubn.spec.ts +28 -0
- package/src/tw/ubn.ts +80 -0
- package/src/tw/ui.spec.ts +38 -0
- package/src/tw/ui.ts +107 -0
- package/src/types.ts +82 -0
- package/src/ua/edrpou.spec.ts +28 -0
- package/src/ua/edrpou.ts +88 -0
- package/src/ua/index.ts +2 -0
- package/src/ua/rntrc.spec.ts +28 -0
- package/src/ua/rntrc.ts +77 -0
- package/src/us/ein.spec.ts +28 -0
- package/src/us/ein.ts +179 -0
- package/src/us/index.ts +2 -0
- package/src/us/ssn.spec.ts +28 -0
- package/src/us/ssn.ts +117 -0
- package/src/util/checksum.spec.ts +70 -0
- package/src/util/checksum.ts +258 -0
- package/src/util/index.ts +13 -0
- package/src/util/isValidDate.spec.ts +49 -0
- package/src/util/isValidDate.ts +87 -0
- package/src/util/iso7064.spec.ts +17 -0
- package/src/util/iso7064.ts +8 -0
- package/src/util/pymod.ts +8 -0
- package/src/util/strings/char.ts +18 -0
- package/src/util/strings/clean.spec.ts +15 -0
- package/src/util/strings/clean.ts +305 -0
- package/src/util/strings/format.ts +18 -0
- package/src/util/strings/index.ts +5 -0
- package/src/util/strings/reverseString.ts +3 -0
- package/src/util/strings/splitAt.spec.ts +15 -0
- package/src/util/strings/splitAt.ts +16 -0
- package/src/uy/cedula.spec.ts +28 -0
- package/src/uy/cedula.ts +74 -0
- package/src/uy/index.ts +3 -0
- package/src/uy/nie.spec.ts +28 -0
- package/src/uy/nie.ts +84 -0
- package/src/uy/rut.spec.ts +34 -0
- package/src/uy/rut.ts +99 -0
- package/src/ve/index.ts +1 -0
- package/src/ve/rif.spec.ts +38 -0
- package/src/ve/rif.ts +92 -0
- package/src/vn/index.ts +1 -0
- package/src/vn/mst.spec.ts +40 -0
- package/src/vn/mst.ts +100 -0
- package/src/za/idnr.spec.ts +28 -0
- package/src/za/idnr.ts +84 -0
- package/src/za/index.ts +2 -0
- package/src/za/tin.spec.ts +28 -0
- package/src/za/tin.ts +75 -0
package/src/tw/ui.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Number
|
|
3
|
+
*
|
|
4
|
+
* The UI Number is shown on the “R.O.C. (Taiwan) Resident Certificate,” “Exit &
|
|
5
|
+
* Entry Permit Taiwan Republic of China,” or the “R.O.C. (Taiwan) UI No. Basic
|
|
6
|
+
* Information Form.”
|
|
7
|
+
*
|
|
8
|
+
* The UI Number issued by January 1, 2021 was a ten-digit code with
|
|
9
|
+
* two alphabetic letters followed by an eight-digit numeric string.
|
|
10
|
+
* The first alphabetic letter is the area code of the
|
|
11
|
+
* municipality/county/city by which the UI Number was issued. The
|
|
12
|
+
* second alphabetic letter represents gender: “A” or “C” for males,
|
|
13
|
+
* and “B” or “D” for females. The last number is a check digit. This
|
|
14
|
+
* kind of UI Number will be invalidated from January 1, 2031. The UI
|
|
15
|
+
* Number issued from January 2, 2021 is a ten-digit code with the
|
|
16
|
+
* first an alphabetic letter followed by a nine-digit numeric string.
|
|
17
|
+
* The alphabetic letter is the area code of the municipality/county/city
|
|
18
|
+
* by which the UI Number was issued. The leading number represents
|
|
19
|
+
* gender: “8” for males and “9” for females. The last number is a
|
|
20
|
+
* check digit.
|
|
21
|
+
*
|
|
22
|
+
* Sources:
|
|
23
|
+
* https://www.mof.gov.tw/Eng/download/16968
|
|
24
|
+
* https://en.wikipedia.org/wiki/National_identification_card_(Taiwan)
|
|
25
|
+
*
|
|
26
|
+
* PERSON
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import { ValidateReturn } from '../types';
|
|
30
|
+
import * as exceptions from '../exceptions';
|
|
31
|
+
import { strings, weightedSum } from '../util';
|
|
32
|
+
import { ALPHABET } from './natid';
|
|
33
|
+
|
|
34
|
+
function clean(input: string) {
|
|
35
|
+
return strings.cleanUnicode(input, ' -');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// const OLD_FMT = /^[A-Z][ABCD]\d{8}$/;
|
|
39
|
+
// const NEW_FMT = /^[A-Z][89]\d{8}$/;
|
|
40
|
+
|
|
41
|
+
const impl = {
|
|
42
|
+
name: 'UI Number',
|
|
43
|
+
localName: '中華民國國民身分證',
|
|
44
|
+
abbreviation: 'UI',
|
|
45
|
+
|
|
46
|
+
compact(input: string): string {
|
|
47
|
+
const [value, err] = clean(input);
|
|
48
|
+
|
|
49
|
+
if (err) {
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return value;
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
format(input: string): string {
|
|
57
|
+
const [value] = clean(input);
|
|
58
|
+
|
|
59
|
+
return value;
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
validate(input: string): ValidateReturn {
|
|
63
|
+
const [value, error] = clean(input);
|
|
64
|
+
|
|
65
|
+
if (error) {
|
|
66
|
+
return { isValid: false, error };
|
|
67
|
+
}
|
|
68
|
+
if (value.length !== 10) {
|
|
69
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const [issuer, gender, code, check] = strings.splitAt(value, 1, 2, 9);
|
|
73
|
+
|
|
74
|
+
if (!strings.isalpha(issuer)) {
|
|
75
|
+
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
76
|
+
}
|
|
77
|
+
if (!['A', 'B', 'C', 'D', '8', '9'].includes(gender)) {
|
|
78
|
+
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
79
|
+
}
|
|
80
|
+
if (!strings.isdigits(code)) {
|
|
81
|
+
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
82
|
+
}
|
|
83
|
+
if (!strings.isdigits(check)) {
|
|
84
|
+
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const sum = weightedSum(value, {
|
|
88
|
+
weights: [1, 9, 8, 7, 6, 5, 4, 3, 2, 1],
|
|
89
|
+
alphabet: ALPHABET,
|
|
90
|
+
modulus: 10,
|
|
91
|
+
});
|
|
92
|
+
if (sum % 10 !== 0) {
|
|
93
|
+
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
isValid: true,
|
|
98
|
+
compact: value,
|
|
99
|
+
isIndividual: true,
|
|
100
|
+
isCompany: false,
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export const { name, localName, abbreviation, validate, format, compact } =
|
|
106
|
+
impl;
|
|
107
|
+
export default impl;
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { ValidationError } from './exceptions';
|
|
2
|
+
|
|
3
|
+
interface ValidateSuccess {
|
|
4
|
+
/**
|
|
5
|
+
* ID Is Valid
|
|
6
|
+
*/
|
|
7
|
+
isValid: true;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Compact version of the ID
|
|
11
|
+
*/
|
|
12
|
+
compact: string;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* This ID identifies an individual
|
|
16
|
+
*
|
|
17
|
+
* Note: An ID may not positivily identify an individual or entity
|
|
18
|
+
*/
|
|
19
|
+
isIndividual: boolean;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* This ID identifies an entity
|
|
23
|
+
*
|
|
24
|
+
* Note: An ID may not positivily identify an individual or entity
|
|
25
|
+
*/
|
|
26
|
+
isCompany: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface ValidateFail {
|
|
30
|
+
/**
|
|
31
|
+
* TIN is not valid
|
|
32
|
+
*/
|
|
33
|
+
isValid: false;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The validation error
|
|
37
|
+
*/
|
|
38
|
+
error: ValidationError;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type ValidateReturn = { error?: ValidationError } & (
|
|
42
|
+
| ValidateSuccess
|
|
43
|
+
| ValidateFail
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
export interface Validator {
|
|
47
|
+
/**
|
|
48
|
+
* The type of validation: ID, tin, vat, bank,
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The validator name, or ID's expansion name in English
|
|
53
|
+
*/
|
|
54
|
+
name: string;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The validator name, or ID's expansion name its local name
|
|
58
|
+
*/
|
|
59
|
+
localName: string;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The short/acronym or abbreviation of the validator
|
|
63
|
+
*/
|
|
64
|
+
abbreviation?: string;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Convert the number to the minimal representation.
|
|
68
|
+
* This strips the number of any valid separators and removes surrounding
|
|
69
|
+
* whitespace.
|
|
70
|
+
*/
|
|
71
|
+
compact(value: string): string;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Reformat the number to the standard presentation format.
|
|
75
|
+
*/
|
|
76
|
+
format(value: string): string;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Validate with error throws subclass of ValidationError
|
|
80
|
+
*/
|
|
81
|
+
validate(value: string): ValidateReturn;
|
|
82
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { validate, format } from './edrpou';
|
|
2
|
+
import { InvalidLength, InvalidChecksum } from '../exceptions';
|
|
3
|
+
|
|
4
|
+
describe('ua/edrpou', () => {
|
|
5
|
+
it('format:32855961', () => {
|
|
6
|
+
const result = format('32855961');
|
|
7
|
+
|
|
8
|
+
expect(result).toEqual('32855961');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('validate:32855961', () => {
|
|
12
|
+
const result = validate('32855961');
|
|
13
|
+
|
|
14
|
+
expect(result.isValid && result.compact).toEqual('32855961');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('validate:12345', () => {
|
|
18
|
+
const result = validate('12345');
|
|
19
|
+
|
|
20
|
+
expect(result.error).toBeInstanceOf(InvalidLength);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('validate:32855968', () => {
|
|
24
|
+
const result = validate('32855968');
|
|
25
|
+
|
|
26
|
+
expect(result.error).toBeInstanceOf(InvalidChecksum);
|
|
27
|
+
});
|
|
28
|
+
});
|
package/src/ua/edrpou.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ЄДРПОУ, EDRPOU (Identifier for enterprises and organizations in Ukraine).
|
|
3
|
+
*
|
|
4
|
+
* The ЄДРПОУ (Єдиного державного реєстру підприємств та організацій України,
|
|
5
|
+
* Unified State Register of Enterprises and Organizations of Ukraine) is a
|
|
6
|
+
* unique identification number of a legal entities in Ukraine. Th number
|
|
7
|
+
* consists of 8 digits, the last being a check digit.
|
|
8
|
+
*
|
|
9
|
+
* Source:
|
|
10
|
+
* https://uk.wikipedia.org/wiki/Код_ЄДРПОУ
|
|
11
|
+
* https://1cinfo.com.ua/Articles/Proverka_koda_po_EDRPOU.aspx
|
|
12
|
+
*
|
|
13
|
+
* ENTITY
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import * as exceptions from '../exceptions';
|
|
17
|
+
import { strings, weightedSum } from '../util';
|
|
18
|
+
import { Validator, ValidateReturn } from '../types';
|
|
19
|
+
|
|
20
|
+
function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
|
|
21
|
+
return strings.cleanUnicode(input, ' ');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const impl: Validator = {
|
|
25
|
+
name: 'Ukrainian Unified State Register of Enterprises and Organizations',
|
|
26
|
+
localName: 'Єдиного державного реєстру підприємств та організацій України',
|
|
27
|
+
abbreviation: 'ЄДРПОУ',
|
|
28
|
+
compact(input: string): string {
|
|
29
|
+
const [value, err] = clean(input);
|
|
30
|
+
|
|
31
|
+
if (err) {
|
|
32
|
+
throw err;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return value;
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
format(input: string): string {
|
|
39
|
+
const [value] = clean(input);
|
|
40
|
+
|
|
41
|
+
return value;
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
validate(input: string): ValidateReturn {
|
|
45
|
+
const [value, error] = clean(input);
|
|
46
|
+
|
|
47
|
+
if (error) {
|
|
48
|
+
return { isValid: false, error };
|
|
49
|
+
}
|
|
50
|
+
if (value.length !== 8) {
|
|
51
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
52
|
+
}
|
|
53
|
+
if (!strings.isdigits(value)) {
|
|
54
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const [front, check] = strings.splitAt(value, -1);
|
|
58
|
+
|
|
59
|
+
const weights = '345'.includes(front[0])
|
|
60
|
+
? [7, 1, 2, 3, 4, 5, 6]
|
|
61
|
+
: [1, 2, 3, 4, 5, 6, 7];
|
|
62
|
+
|
|
63
|
+
let sum = weightedSum(front, {
|
|
64
|
+
weights,
|
|
65
|
+
modulus: 11,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
if (sum === 10) {
|
|
69
|
+
sum = weightedSum(front, {
|
|
70
|
+
weights: weights.map(v => v + 2),
|
|
71
|
+
modulus: 11,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (String(sum) !== check) {
|
|
75
|
+
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
isValid: true,
|
|
80
|
+
compact: value,
|
|
81
|
+
isIndividual: false,
|
|
82
|
+
isCompany: true,
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const { name, localName, abbreviation, validate, format, compact } =
|
|
88
|
+
impl;
|
package/src/ua/index.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { validate, format } from './rntrc';
|
|
2
|
+
import { InvalidLength, InvalidChecksum } from '../exceptions';
|
|
3
|
+
|
|
4
|
+
describe('ua/rntrc', () => {
|
|
5
|
+
it('format:1759013776', () => {
|
|
6
|
+
const result = format('1759013776');
|
|
7
|
+
|
|
8
|
+
expect(result).toEqual('1759013776');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('validate:1759013776', () => {
|
|
12
|
+
const result = validate('1759013776');
|
|
13
|
+
|
|
14
|
+
expect(result.isValid && result.compact).toEqual('1759013776');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('validate:12345678', () => {
|
|
18
|
+
const result = validate('12345678');
|
|
19
|
+
|
|
20
|
+
expect(result.error).toBeInstanceOf(InvalidLength);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('validate:1759013770', () => {
|
|
24
|
+
const result = validate('1759013770');
|
|
25
|
+
|
|
26
|
+
expect(result.error).toBeInstanceOf(InvalidChecksum);
|
|
27
|
+
});
|
|
28
|
+
});
|
package/src/ua/rntrc.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* РНОКПП, RNTRC (Individual taxpayer registration number in Ukraine).
|
|
3
|
+
*
|
|
4
|
+
* The РНОКПП (Реєстраційний номер облікової картки платника податків,
|
|
5
|
+
* registration number of the taxpayer's registration card) is a unique
|
|
6
|
+
* identification number that is provided to individuals within Ukraine. The
|
|
7
|
+
* number consists of 10 digits, the last being a check digit.
|
|
8
|
+
*
|
|
9
|
+
* More information:
|
|
10
|
+
* https://uk.wikipedia.org/wiki/РНОКПП
|
|
11
|
+
*
|
|
12
|
+
* PERSON
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import * as exceptions from '../exceptions';
|
|
16
|
+
import { strings, weightedSum } from '../util';
|
|
17
|
+
import { Validator, ValidateReturn } from '../types';
|
|
18
|
+
|
|
19
|
+
function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
|
|
20
|
+
return strings.cleanUnicode(input, ' ');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const impl: Validator = {
|
|
24
|
+
name: "Ukrainian Registration Number of the Taxpayer's Registration Card",
|
|
25
|
+
localName: 'Реєстраційний номер облікової картки платника податків',
|
|
26
|
+
abbreviation: 'РНОКПП',
|
|
27
|
+
compact(input: string): string {
|
|
28
|
+
const [value, err] = clean(input);
|
|
29
|
+
|
|
30
|
+
if (err) {
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return value;
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
format(input: string): string {
|
|
38
|
+
const [value] = clean(input);
|
|
39
|
+
|
|
40
|
+
return value;
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
validate(input: string): ValidateReturn {
|
|
44
|
+
const [value, error] = clean(input);
|
|
45
|
+
|
|
46
|
+
if (error) {
|
|
47
|
+
return { isValid: false, error };
|
|
48
|
+
}
|
|
49
|
+
if (value.length !== 10) {
|
|
50
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
51
|
+
}
|
|
52
|
+
if (!strings.isdigits(value)) {
|
|
53
|
+
return { isValid: false, error: new exceptions.InvalidFormat() };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const [front, check] = strings.splitAt(value, -1);
|
|
57
|
+
|
|
58
|
+
const sum = weightedSum(front, {
|
|
59
|
+
weights: [-1, 5, 7, 9, 4, 6, 10, 5, 7],
|
|
60
|
+
modulus: 11,
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
if (String(sum % 10) !== check) {
|
|
64
|
+
return { isValid: false, error: new exceptions.InvalidChecksum() };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
isValid: true,
|
|
69
|
+
compact: value,
|
|
70
|
+
isIndividual: true,
|
|
71
|
+
isCompany: false,
|
|
72
|
+
};
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const { name, localName, abbreviation, validate, format, compact } =
|
|
77
|
+
impl;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { InvalidComponent, InvalidLength } from '../exceptions';
|
|
2
|
+
import { validate, format } from './ein';
|
|
3
|
+
|
|
4
|
+
describe('us/tin', () => {
|
|
5
|
+
it('format:536904399', () => {
|
|
6
|
+
const result = format('536904399');
|
|
7
|
+
|
|
8
|
+
expect(result).toEqual('53-6904399');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('validate:123-45-6789', () => {
|
|
12
|
+
const result = validate('123-45-6789');
|
|
13
|
+
|
|
14
|
+
expect(result.isValid && result.compact).toEqual('123456789');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('validate:1234567890123', () => {
|
|
18
|
+
const result = validate('1234567890123');
|
|
19
|
+
|
|
20
|
+
expect(result.error).toBeInstanceOf(InvalidLength);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('validate:00-3456789', () => {
|
|
24
|
+
const result = validate('00-3456789');
|
|
25
|
+
|
|
26
|
+
expect(result.error).toBeInstanceOf(InvalidComponent);
|
|
27
|
+
});
|
|
28
|
+
});
|
package/src/us/ein.ts
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EIN (U.S. Employer Identification Number).
|
|
3
|
+
*
|
|
4
|
+
* The Employer Identification Number, also known as Federal Employer
|
|
5
|
+
* Identification Number (FEIN), is used to identify a business entity in the
|
|
6
|
+
* United States. It is issued to anyone that has to pay withholding taxes on
|
|
7
|
+
* employees.
|
|
8
|
+
*
|
|
9
|
+
* Sources:
|
|
10
|
+
* https://en.wikipedia.org/wiki/Social_Security_number
|
|
11
|
+
* https://www.ssa.gov/employer/verifySSN.htm
|
|
12
|
+
*
|
|
13
|
+
* INDIVIDUAL
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import * as exceptions from '../exceptions';
|
|
17
|
+
import { strings } from '../util';
|
|
18
|
+
import { Validator, ValidateReturn } from '../types';
|
|
19
|
+
|
|
20
|
+
// https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes
|
|
21
|
+
|
|
22
|
+
const prefixes = [
|
|
23
|
+
// Brookhaven
|
|
24
|
+
'01',
|
|
25
|
+
'02',
|
|
26
|
+
'03',
|
|
27
|
+
'04',
|
|
28
|
+
'05',
|
|
29
|
+
'06',
|
|
30
|
+
'11',
|
|
31
|
+
'13',
|
|
32
|
+
'14',
|
|
33
|
+
'16',
|
|
34
|
+
'21',
|
|
35
|
+
'22',
|
|
36
|
+
'23',
|
|
37
|
+
'25',
|
|
38
|
+
'34',
|
|
39
|
+
'51',
|
|
40
|
+
'52',
|
|
41
|
+
'54',
|
|
42
|
+
'55',
|
|
43
|
+
'56',
|
|
44
|
+
'57',
|
|
45
|
+
'58',
|
|
46
|
+
'59',
|
|
47
|
+
'65',
|
|
48
|
+
// Andover
|
|
49
|
+
'10',
|
|
50
|
+
'12',
|
|
51
|
+
// Fresno"
|
|
52
|
+
'15',
|
|
53
|
+
'24',
|
|
54
|
+
// Internet
|
|
55
|
+
'20',
|
|
56
|
+
'26',
|
|
57
|
+
'27',
|
|
58
|
+
'45',
|
|
59
|
+
'46',
|
|
60
|
+
'47',
|
|
61
|
+
'81',
|
|
62
|
+
'82',
|
|
63
|
+
'83',
|
|
64
|
+
'84',
|
|
65
|
+
// Cincinnati
|
|
66
|
+
'30',
|
|
67
|
+
'32',
|
|
68
|
+
'35',
|
|
69
|
+
'36',
|
|
70
|
+
'37',
|
|
71
|
+
'38',
|
|
72
|
+
'61',
|
|
73
|
+
// Small Business Administration (SBA)
|
|
74
|
+
'31',
|
|
75
|
+
// Philadelphia
|
|
76
|
+
'33',
|
|
77
|
+
'39',
|
|
78
|
+
'41',
|
|
79
|
+
'42',
|
|
80
|
+
'43',
|
|
81
|
+
'46',
|
|
82
|
+
'48',
|
|
83
|
+
'62',
|
|
84
|
+
'63',
|
|
85
|
+
'64',
|
|
86
|
+
'66',
|
|
87
|
+
'68',
|
|
88
|
+
'71',
|
|
89
|
+
'72',
|
|
90
|
+
'73',
|
|
91
|
+
'74',
|
|
92
|
+
'75',
|
|
93
|
+
'76',
|
|
94
|
+
'77',
|
|
95
|
+
'85',
|
|
96
|
+
'86',
|
|
97
|
+
'87',
|
|
98
|
+
'88',
|
|
99
|
+
'91',
|
|
100
|
+
'92',
|
|
101
|
+
'93',
|
|
102
|
+
'98',
|
|
103
|
+
'99',
|
|
104
|
+
// Kansas City
|
|
105
|
+
'40',
|
|
106
|
+
'44',
|
|
107
|
+
// Austin
|
|
108
|
+
'50',
|
|
109
|
+
'53',
|
|
110
|
+
// Atlanta
|
|
111
|
+
'60',
|
|
112
|
+
'67',
|
|
113
|
+
// Ogden
|
|
114
|
+
'80',
|
|
115
|
+
'90',
|
|
116
|
+
// Memphis
|
|
117
|
+
'94',
|
|
118
|
+
'95',
|
|
119
|
+
];
|
|
120
|
+
|
|
121
|
+
function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
|
|
122
|
+
return strings.cleanUnicode(input, '- ');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const impl: Validator = {
|
|
126
|
+
name: 'U.S. Employer Identification Number',
|
|
127
|
+
localName: 'Employer Identification Number',
|
|
128
|
+
abbreviation: 'EIN',
|
|
129
|
+
compact(input: string): string {
|
|
130
|
+
const [value, err] = clean(input);
|
|
131
|
+
|
|
132
|
+
if (err) {
|
|
133
|
+
throw err;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return value;
|
|
137
|
+
},
|
|
138
|
+
|
|
139
|
+
format(input: string): string {
|
|
140
|
+
const [value] = clean(input);
|
|
141
|
+
|
|
142
|
+
return strings.splitAt(value, 2).join('-');
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Check if the number is a valid EIN number.
|
|
147
|
+
* This checks the length, formatting and other contraints. It does not check
|
|
148
|
+
* for control letter.
|
|
149
|
+
*/
|
|
150
|
+
validate(input: string): ValidateReturn {
|
|
151
|
+
const [value, error] = clean(input);
|
|
152
|
+
|
|
153
|
+
if (error) {
|
|
154
|
+
return { isValid: false, error };
|
|
155
|
+
}
|
|
156
|
+
if (value.length !== 9) {
|
|
157
|
+
return { isValid: false, error: new exceptions.InvalidLength() };
|
|
158
|
+
}
|
|
159
|
+
if (!strings.isdigits(value)) {
|
|
160
|
+
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
161
|
+
}
|
|
162
|
+
// if (invalidSSN.includes(value)) {
|
|
163
|
+
// return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
164
|
+
// }
|
|
165
|
+
if (!prefixes.includes(value.substr(0, 2))) {
|
|
166
|
+
return { isValid: false, error: new exceptions.InvalidComponent() };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return {
|
|
170
|
+
isValid: true,
|
|
171
|
+
compact: value,
|
|
172
|
+
isIndividual: false,
|
|
173
|
+
isCompany: true,
|
|
174
|
+
};
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
export const { name, localName, abbreviation, validate, format, compact } =
|
|
179
|
+
impl;
|
package/src/us/index.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { InvalidComponent, InvalidLength } from '../exceptions';
|
|
2
|
+
import { validate, format } from './ssn';
|
|
3
|
+
|
|
4
|
+
describe('us/ssn', () => {
|
|
5
|
+
it('format:536904399', () => {
|
|
6
|
+
const result = format('536904399');
|
|
7
|
+
|
|
8
|
+
expect(result).toEqual('536-90-4399');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('validate:536-90-4399', () => {
|
|
12
|
+
const result = validate('536-90-4399');
|
|
13
|
+
|
|
14
|
+
expect(result.isValid && result.compact).toEqual('536904399');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('validate:1234567890123', () => {
|
|
18
|
+
const result = validate('1234567890123');
|
|
19
|
+
|
|
20
|
+
expect(result.error).toBeInstanceOf(InvalidLength);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('validate:189092294', () => {
|
|
24
|
+
const result = validate('189092294');
|
|
25
|
+
|
|
26
|
+
expect(result.error).toBeInstanceOf(InvalidComponent);
|
|
27
|
+
});
|
|
28
|
+
});
|