stdnum 1.10.0 → 1.10.2

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.
Files changed (496) hide show
  1. package/README.md +1 -0
  2. package/lib/cjs/in/gstin.js +3 -3
  3. package/lib/cjs/no/fodselsnummer.js +2 -2
  4. package/lib/cjs/tw/natid.js +8 -5
  5. package/lib/cjs/tw/ui.js +8 -5
  6. package/lib/esm/in/gstin.js +3 -3
  7. package/lib/esm/no/fodselsnummer.js +2 -2
  8. package/lib/esm/tw/natid.js +8 -5
  9. package/lib/esm/tw/ui.js +8 -5
  10. package/package.json +5 -2
  11. package/src/ad/index.ts +1 -0
  12. package/src/ad/nrt.spec.ts +36 -0
  13. package/src/ad/nrt.ts +87 -0
  14. package/src/al/index.ts +1 -0
  15. package/src/al/nipt.spec.ts +43 -0
  16. package/src/al/nipt.ts +111 -0
  17. package/src/ar/cbu.spec.ts +28 -0
  18. package/src/ar/cbu.ts +96 -0
  19. package/src/ar/cuit.spec.ts +28 -0
  20. package/src/ar/cuit.ts +102 -0
  21. package/src/ar/dni.spec.ts +22 -0
  22. package/src/ar/dni.ts +72 -0
  23. package/src/ar/index.ts +3 -0
  24. package/src/at/businessid.spec.ts +34 -0
  25. package/src/at/businessid.ts +73 -0
  26. package/src/at/index.ts +4 -0
  27. package/src/at/tin.spec.ts +173 -0
  28. package/src/at/tin.ts +140 -0
  29. package/src/at/uid.spec.ts +44 -0
  30. package/src/at/uid.ts +84 -0
  31. package/src/at/vnr.spec.ts +38 -0
  32. package/src/at/vnr.ts +84 -0
  33. package/src/au/abn.spec.ts +28 -0
  34. package/src/au/abn.ts +78 -0
  35. package/src/au/acn.spec.ts +34 -0
  36. package/src/au/acn.ts +76 -0
  37. package/src/au/index.ts +3 -0
  38. package/src/au/tfn.spec.ts +28 -0
  39. package/src/au/tfn.ts +79 -0
  40. package/src/az/index.ts +2 -0
  41. package/src/az/pin.spec.ts +16 -0
  42. package/src/az/pin.ts +61 -0
  43. package/src/az/tin.spec.ts +28 -0
  44. package/src/az/tin.ts +64 -0
  45. package/src/ba/index.ts +1 -0
  46. package/src/ba/jmbg.spec.ts +28 -0
  47. package/src/ba/jmbg.ts +85 -0
  48. package/src/be/bis.spec.ts +184 -0
  49. package/src/be/bis.ts +85 -0
  50. package/src/be/index.ts +4 -0
  51. package/src/be/insz.spec.ts +51 -0
  52. package/src/be/insz.ts +55 -0
  53. package/src/be/nn.spec.ts +117 -0
  54. package/src/be/nn.ts +77 -0
  55. package/src/be/personIdentifierHelpers.spec.ts +254 -0
  56. package/src/be/personIdentifierHelpers.ts +130 -0
  57. package/src/be/vat.spec.ts +46 -0
  58. package/src/be/vat.ts +84 -0
  59. package/src/bg/egn.spec.ts +28 -0
  60. package/src/bg/egn.ts +75 -0
  61. package/src/bg/index.ts +3 -0
  62. package/src/bg/pnf.spec.ts +28 -0
  63. package/src/bg/pnf.ts +73 -0
  64. package/src/bg/vat.spec.ts +34 -0
  65. package/src/bg/vat.ts +120 -0
  66. package/src/br/cnpj.spec.ts +34 -0
  67. package/src/br/cnpj.ts +89 -0
  68. package/src/br/cpf.spec.ts +34 -0
  69. package/src/br/cpf.ts +87 -0
  70. package/src/br/index.ts +2 -0
  71. package/src/by/index.ts +1 -0
  72. package/src/by/unp.spec.ts +34 -0
  73. package/src/by/unp.ts +108 -0
  74. package/src/bz/index.ts +1 -0
  75. package/src/bz/tin.spec.ts +28 -0
  76. package/src/bz/tin.ts +67 -0
  77. package/src/ca/bn.spec.ts +40 -0
  78. package/src/ca/bn.ts +88 -0
  79. package/src/ca/gst.spec.ts +34 -0
  80. package/src/ca/gst.ts +70 -0
  81. package/src/ca/index.ts +5 -0
  82. package/src/ca/pst.spec.ts +28 -0
  83. package/src/ca/pst.ts +71 -0
  84. package/src/ca/qst.spec.ts +47 -0
  85. package/src/ca/qst.ts +88 -0
  86. package/src/ca/sin.spec.ts +34 -0
  87. package/src/ca/sin.ts +72 -0
  88. package/src/ch/index.ts +3 -0
  89. package/src/ch/ssn.spec.ts +50 -0
  90. package/src/ch/ssn.ts +74 -0
  91. package/src/ch/uid.spec.ts +34 -0
  92. package/src/ch/uid.ts +82 -0
  93. package/src/ch/vat.spec.ts +28 -0
  94. package/src/ch/vat.ts +83 -0
  95. package/src/cl/index.ts +2 -0
  96. package/src/cl/run.ts +13 -0
  97. package/src/cl/rut.spec.ts +50 -0
  98. package/src/cl/rut.ts +97 -0
  99. package/src/cn/index.ts +2 -0
  100. package/src/cn/ric.spec.ts +34 -0
  101. package/src/cn/ric.ts +86 -0
  102. package/src/cn/uscc.spec.ts +34 -0
  103. package/src/cn/uscc.ts +110 -0
  104. package/src/co/index.ts +1 -0
  105. package/src/co/nit.spec.ts +40 -0
  106. package/src/co/nit.ts +85 -0
  107. package/src/cr/cpf.spec.ts +34 -0
  108. package/src/cr/cpf.ts +93 -0
  109. package/src/cr/cpj.spec.ts +28 -0
  110. package/src/cr/cpj.ts +111 -0
  111. package/src/cr/cr.spec.ts +28 -0
  112. package/src/cr/cr.ts +75 -0
  113. package/src/cr/index.ts +3 -0
  114. package/src/cu/index.ts +1 -0
  115. package/src/cu/ni.spec.ts +34 -0
  116. package/src/cu/ni.ts +74 -0
  117. package/src/cy/index.ts +1 -0
  118. package/src/cy/vat.spec.ts +28 -0
  119. package/src/cy/vat.ts +98 -0
  120. package/src/cz/dic.spec.ts +28 -0
  121. package/src/cz/dic.ts +127 -0
  122. package/src/cz/index.ts +2 -0
  123. package/src/cz/rc.spec.ts +44 -0
  124. package/src/cz/rc.ts +95 -0
  125. package/src/de/idnr.spec.ts +34 -0
  126. package/src/de/idnr.ts +91 -0
  127. package/src/de/index.ts +6 -0
  128. package/src/de/passport.spec.ts +31 -0
  129. package/src/de/passport.ts +86 -0
  130. package/src/de/pwnr.spec.ts +62 -0
  131. package/src/de/pwnr.ts +190 -0
  132. package/src/de/stnr.spec.ts +85 -0
  133. package/src/de/stnr.ts +193 -0
  134. package/src/de/svnr.spec.ts +56 -0
  135. package/src/de/svnr.ts +158 -0
  136. package/src/de/vat.spec.ts +28 -0
  137. package/src/de/vat.ts +74 -0
  138. package/src/dk/cpr.spec.ts +34 -0
  139. package/src/dk/cpr.ts +129 -0
  140. package/src/dk/cvr.spec.ts +28 -0
  141. package/src/dk/cvr.ts +81 -0
  142. package/src/dk/index.ts +2 -0
  143. package/src/do/cedula.spec.ts +34 -0
  144. package/src/do/cedula.ts +67 -0
  145. package/src/do/index.ts +3 -0
  146. package/src/do/ncf.spec.ts +34 -0
  147. package/src/do/ncf.ts +133 -0
  148. package/src/do/rnc.spec.ts +40 -0
  149. package/src/do/rnc.ts +74 -0
  150. package/src/dz/index.ts +1 -0
  151. package/src/dz/nif.spec.ts +39 -0
  152. package/src/dz/nif.ts +80 -0
  153. package/src/ec/ci.spec.ts +28 -0
  154. package/src/ec/ci.ts +92 -0
  155. package/src/ec/index.ts +2 -0
  156. package/src/ec/ruc.spec.ts +37 -0
  157. package/src/ec/ruc.ts +117 -0
  158. package/src/ee/ik.spec.ts +28 -0
  159. package/src/ee/ik.ts +114 -0
  160. package/src/ee/index.ts +3 -0
  161. package/src/ee/kmkr.spec.ts +28 -0
  162. package/src/ee/kmkr.ts +76 -0
  163. package/src/ee/registrikood.spec.ts +28 -0
  164. package/src/ee/registrikood.ts +80 -0
  165. package/src/eg/index.ts +1 -0
  166. package/src/eg/tn.spec.ts +44 -0
  167. package/src/eg/tn.ts +96 -0
  168. package/src/es/cif.spec.ts +43 -0
  169. package/src/es/cif.ts +84 -0
  170. package/src/es/dni.spec.ts +28 -0
  171. package/src/es/dni.ts +83 -0
  172. package/src/es/index.ts +5 -0
  173. package/src/es/nie.spec.ts +28 -0
  174. package/src/es/nie.ts +79 -0
  175. package/src/es/nif.spec.ts +52 -0
  176. package/src/es/nif.ts +95 -0
  177. package/src/es/nss.spec.ts +28 -0
  178. package/src/es/nss.ts +132 -0
  179. package/src/exceptions.ts +66 -0
  180. package/src/fi/alv.spec.ts +28 -0
  181. package/src/fi/alv.ts +76 -0
  182. package/src/fi/hetu.spec.ts +37 -0
  183. package/src/fi/hetu.ts +108 -0
  184. package/src/fi/index.ts +3 -0
  185. package/src/fi/ytunnus.spec.ts +28 -0
  186. package/src/fi/ytunnus.ts +49 -0
  187. package/src/fo/index.ts +1 -0
  188. package/src/fo/vn.spec.ts +34 -0
  189. package/src/fo/vn.ts +71 -0
  190. package/src/fr/index.ts +5 -0
  191. package/src/fr/nif.spec.ts +34 -0
  192. package/src/fr/nif.ts +82 -0
  193. package/src/fr/nir.spec.ts +36 -0
  194. package/src/fr/nir.ts +98 -0
  195. package/src/fr/siren.spec.ts +28 -0
  196. package/src/fr/siren.ts +68 -0
  197. package/src/fr/siret.spec.ts +38 -0
  198. package/src/fr/siret.ts +79 -0
  199. package/src/fr/tva.spec.ts +40 -0
  200. package/src/fr/tva.ts +125 -0
  201. package/src/gb/index.ts +3 -0
  202. package/src/gb/nino-prefixes.ts +245 -0
  203. package/src/gb/nino.spec.ts +80 -0
  204. package/src/gb/nino.ts +80 -0
  205. package/src/gb/utr.spec.ts +28 -0
  206. package/src/gb/utr.ts +76 -0
  207. package/src/gb/vat.spec.ts +40 -0
  208. package/src/gb/vat.ts +112 -0
  209. package/src/gen/ean.spec.ts +34 -0
  210. package/src/gen/ean.ts +71 -0
  211. package/src/gen/index.ts +1 -0
  212. package/src/gh/index.ts +1 -0
  213. package/src/gh/tin.spec.ts +42 -0
  214. package/src/gh/tin.ts +93 -0
  215. package/src/gn/index.ts +1 -0
  216. package/src/gn/nifp.spec.ts +40 -0
  217. package/src/gn/nifp.ts +72 -0
  218. package/src/gr/amka.spec.ts +28 -0
  219. package/src/gr/amka.ts +76 -0
  220. package/src/gr/index.ts +2 -0
  221. package/src/gr/vat.spec.ts +34 -0
  222. package/src/gr/vat.ts +84 -0
  223. package/src/gt/cui.spec.ts +34 -0
  224. package/src/gt/cui.ts +110 -0
  225. package/src/gt/index.ts +2 -0
  226. package/src/gt/nit.spec.ts +34 -0
  227. package/src/gt/nit.ts +86 -0
  228. package/src/hk/hkid.spec.ts +52 -0
  229. package/src/hk/hkid.ts +90 -0
  230. package/src/hk/index.ts +1 -0
  231. package/src/hr/index.ts +1 -0
  232. package/src/hr/oib.spec.ts +28 -0
  233. package/src/hr/oib.ts +67 -0
  234. package/src/hu/anum.spec.ts +28 -0
  235. package/src/hu/anum.ts +71 -0
  236. package/src/hu/index.ts +1 -0
  237. package/src/id/index.ts +1 -0
  238. package/src/id/npwp.spec.ts +34 -0
  239. package/src/id/npwp.ts +116 -0
  240. package/src/ie/index.ts +2 -0
  241. package/src/ie/pps.spec.ts +58 -0
  242. package/src/ie/pps.ts +81 -0
  243. package/src/ie/vat.spec.ts +40 -0
  244. package/src/ie/vat.ts +99 -0
  245. package/src/il/hp.spec.ts +38 -0
  246. package/src/il/hp.ts +75 -0
  247. package/src/il/idnr.spec.ts +28 -0
  248. package/src/il/idnr.ts +70 -0
  249. package/src/il/index.ts +2 -0
  250. package/src/in/aadhaar.spec.ts +40 -0
  251. package/src/in/aadhaar.ts +85 -0
  252. package/src/in/epic.spec.ts +34 -0
  253. package/src/in/epic.ts +85 -0
  254. package/src/in/gstin.spec.ts +34 -0
  255. package/src/in/gstin.ts +156 -0
  256. package/src/in/index.ts +4 -0
  257. package/src/in/pan.spec.ts +40 -0
  258. package/src/in/pan.ts +93 -0
  259. package/src/index.ts +404 -0
  260. package/src/is/index.ts +2 -0
  261. package/src/is/kennitala.spec.ts +46 -0
  262. package/src/is/kennitala.ts +80 -0
  263. package/src/is/vsk.spec.ts +22 -0
  264. package/src/is/vsk.ts +60 -0
  265. package/src/it/aic.spec.ts +40 -0
  266. package/src/it/aic.ts +97 -0
  267. package/src/it/codicefiscale.spec.ts +28 -0
  268. package/src/it/codicefiscale.ts +167 -0
  269. package/src/it/index.ts +3 -0
  270. package/src/it/iva.spec.ts +28 -0
  271. package/src/it/iva.ts +65 -0
  272. package/src/jp/cn.spec.ts +28 -0
  273. package/src/jp/cn.ts +77 -0
  274. package/src/jp/index.ts +1 -0
  275. package/src/ke/index.ts +1 -0
  276. package/src/ke/pin.spec.ts +34 -0
  277. package/src/ke/pin.ts +77 -0
  278. package/src/kr/brn.spec.ts +28 -0
  279. package/src/kr/brn.ts +91 -0
  280. package/src/kr/index.ts +2 -0
  281. package/src/kr/rrn.spec.ts +34 -0
  282. package/src/kr/rrn.ts +104 -0
  283. package/src/li/index.ts +1 -0
  284. package/src/li/peid.spec.ts +22 -0
  285. package/src/li/peid.ts +71 -0
  286. package/src/lt/asmens.spec.ts +28 -0
  287. package/src/lt/asmens.ts +73 -0
  288. package/src/lt/index.ts +2 -0
  289. package/src/lt/pvm.spec.ts +34 -0
  290. package/src/lt/pvm.ts +75 -0
  291. package/src/lu/index.ts +1 -0
  292. package/src/lu/tva.spec.ts +28 -0
  293. package/src/lu/tva.ts +70 -0
  294. package/src/lv/index.ts +1 -0
  295. package/src/lv/pvn.spec.ts +44 -0
  296. package/src/lv/pvn.ts +102 -0
  297. package/src/ma/ice.spec.ts +39 -0
  298. package/src/ma/ice.ts +72 -0
  299. package/src/ma/ice9.spec.ts +28 -0
  300. package/src/ma/ice9.ts +62 -0
  301. package/src/ma/index.ts +2 -0
  302. package/src/mc/index.ts +1 -0
  303. package/src/mc/tva.spec.ts +28 -0
  304. package/src/mc/tva.ts +67 -0
  305. package/src/md/idno.spec.ts +28 -0
  306. package/src/md/idno.ts +78 -0
  307. package/src/md/index.ts +1 -0
  308. package/src/me/index.ts +2 -0
  309. package/src/me/jmbg.ts +17 -0
  310. package/src/me/pib.spec.ts +158 -0
  311. package/src/me/pib.ts +77 -0
  312. package/src/mk/edb.spec.ts +50 -0
  313. package/src/mk/edb.ts +88 -0
  314. package/src/mk/index.ts +2 -0
  315. package/src/mk/jmbg.ts +17 -0
  316. package/src/mt/index.ts +1 -0
  317. package/src/mt/vat.spec.ts +28 -0
  318. package/src/mt/vat.ts +69 -0
  319. package/src/mu/index.ts +1 -0
  320. package/src/mu/nid.spec.ts +34 -0
  321. package/src/mu/nid.ts +89 -0
  322. package/src/mx/banks.ts +658 -0
  323. package/src/mx/clabe.spec.ts +68 -0
  324. package/src/mx/clabe.ts +105 -0
  325. package/src/mx/curp.spec.ts +28 -0
  326. package/src/mx/curp.ts +261 -0
  327. package/src/mx/index.ts +3 -0
  328. package/src/mx/rfc.spec.ts +69 -0
  329. package/src/mx/rfc.ts +193 -0
  330. package/src/my/index.ts +1 -0
  331. package/src/my/nric.spec.ts +40 -0
  332. package/src/my/nric.ts +91 -0
  333. package/src/nl/bsn.spec.ts +68 -0
  334. package/src/nl/bsn.ts +81 -0
  335. package/src/nl/btw.spec.ts +40 -0
  336. package/src/nl/btw.ts +95 -0
  337. package/src/nl/index.ts +3 -0
  338. package/src/nl/onderwijsnummer.spec.ts +34 -0
  339. package/src/nl/onderwijsnummer.ts +77 -0
  340. package/src/no/fodselsnummer.spec.ts +56 -0
  341. package/src/no/fodselsnummer.ts +118 -0
  342. package/src/no/index.ts +4 -0
  343. package/src/no/kontonr.spec.ts +34 -0
  344. package/src/no/kontonr.ts +84 -0
  345. package/src/no/mva.spec.ts +28 -0
  346. package/src/no/mva.ts +80 -0
  347. package/src/no/orgnr.spec.ts +28 -0
  348. package/src/no/orgnr.ts +75 -0
  349. package/src/nz/bank.spec.ts +28 -0
  350. package/src/nz/bank.ts +238 -0
  351. package/src/nz/index.ts +2 -0
  352. package/src/nz/ird.spec.ts +34 -0
  353. package/src/nz/ird.ts +102 -0
  354. package/src/pe/ce.spec.ts +46 -0
  355. package/src/pe/ce.ts +61 -0
  356. package/src/pe/cui.spec.ts +28 -0
  357. package/src/pe/cui.ts +85 -0
  358. package/src/pe/index.ts +3 -0
  359. package/src/pe/ruc.spec.ts +46 -0
  360. package/src/pe/ruc.ts +84 -0
  361. package/src/pk/cnic.spec.ts +34 -0
  362. package/src/pk/cnic.ts +97 -0
  363. package/src/pk/index.ts +2 -0
  364. package/src/pk/ntn.spec.ts +22 -0
  365. package/src/pk/ntn.ts +65 -0
  366. package/src/pl/index.ts +3 -0
  367. package/src/pl/nip.spec.ts +34 -0
  368. package/src/pl/nip.ts +74 -0
  369. package/src/pl/pesel.spec.ts +34 -0
  370. package/src/pl/pesel.ts +97 -0
  371. package/src/pl/regon.spec.ts +52 -0
  372. package/src/pl/regon.ts +88 -0
  373. package/src/pt/cc.spec.ts +43 -0
  374. package/src/pt/cc.ts +74 -0
  375. package/src/pt/index.ts +3 -0
  376. package/src/pt/nif.spec.ts +28 -0
  377. package/src/pt/nif.ts +78 -0
  378. package/src/pt/nipc.ts +27 -0
  379. package/src/py/cedula.spec.ts +46 -0
  380. package/src/py/cedula.ts +73 -0
  381. package/src/py/index.ts +2 -0
  382. package/src/py/ruc.spec.ts +40 -0
  383. package/src/py/ruc.ts +93 -0
  384. package/src/ro/cif.spec.ts +40 -0
  385. package/src/ro/cif.ts +62 -0
  386. package/src/ro/cnp.spec.ts +50 -0
  387. package/src/ro/cnp.ts +158 -0
  388. package/src/ro/cui.spec.ts +28 -0
  389. package/src/ro/cui.ts +83 -0
  390. package/src/ro/index.ts +4 -0
  391. package/src/ro/onrc.spec.ts +28 -0
  392. package/src/ro/onrc.ts +109 -0
  393. package/src/rs/index.ts +2 -0
  394. package/src/rs/jmbg.ts +16 -0
  395. package/src/rs/pib.spec.ts +28 -0
  396. package/src/rs/pib.ts +69 -0
  397. package/src/ru/index.ts +1 -0
  398. package/src/ru/inn.spec.ts +32 -0
  399. package/src/ru/inn.ts +106 -0
  400. package/src/se/index.ts +3 -0
  401. package/src/se/orgnr.spec.ts +28 -0
  402. package/src/se/orgnr.ts +68 -0
  403. package/src/se/personnummer.spec.ts +45 -0
  404. package/src/se/personnummer.ts +143 -0
  405. package/src/se/vat.spec.ts +28 -0
  406. package/src/se/vat.ts +73 -0
  407. package/src/sg/index.ts +1 -0
  408. package/src/sg/uen.spec.ts +46 -0
  409. package/src/sg/uen.ts +209 -0
  410. package/src/si/ddv.spec.ts +28 -0
  411. package/src/si/ddv.ts +76 -0
  412. package/src/si/emso.spec.ts +15 -0
  413. package/src/si/emso.ts +27 -0
  414. package/src/si/index.ts +3 -0
  415. package/src/si/jmbg.ts +20 -0
  416. package/src/sk/dph.spec.ts +28 -0
  417. package/src/sk/dph.ts +71 -0
  418. package/src/sk/index.ts +2 -0
  419. package/src/sk/rc.ts +12 -0
  420. package/src/sm/coe.spec.ts +34 -0
  421. package/src/sm/coe.ts +80 -0
  422. package/src/sm/index.ts +1 -0
  423. package/src/sv/index.ts +1 -0
  424. package/src/sv/nit.spec.ts +34 -0
  425. package/src/sv/nit.ts +117 -0
  426. package/src/th/idnr.spec.ts +41 -0
  427. package/src/th/idnr.ts +80 -0
  428. package/src/th/index.ts +3 -0
  429. package/src/th/moa.spec.ts +62 -0
  430. package/src/th/moa.ts +85 -0
  431. package/src/th/tin.spec.ts +77 -0
  432. package/src/th/tin.ts +56 -0
  433. package/src/tn/index.ts +1 -0
  434. package/src/tn/mf.spec.ts +37 -0
  435. package/src/tn/mf.ts +169 -0
  436. package/src/tr/index.ts +2 -0
  437. package/src/tr/tckimlik.spec.ts +40 -0
  438. package/src/tr/tckimlik.ts +87 -0
  439. package/src/tr/vkn.spec.ts +28 -0
  440. package/src/tr/vkn.ts +87 -0
  441. package/src/tw/ban.spec.ts +28 -0
  442. package/src/tw/ban.ts +67 -0
  443. package/src/tw/index.ts +5 -0
  444. package/src/tw/natid.spec.ts +41 -0
  445. package/src/tw/natid.ts +109 -0
  446. package/src/tw/tax_code.spec.ts +34 -0
  447. package/src/tw/tax_code.ts +98 -0
  448. package/src/tw/ubn.spec.ts +28 -0
  449. package/src/tw/ubn.ts +80 -0
  450. package/src/tw/ui.spec.ts +49 -0
  451. package/src/tw/ui.ts +111 -0
  452. package/src/types.ts +82 -0
  453. package/src/ua/edrpou.spec.ts +28 -0
  454. package/src/ua/edrpou.ts +88 -0
  455. package/src/ua/index.ts +2 -0
  456. package/src/ua/rntrc.spec.ts +28 -0
  457. package/src/ua/rntrc.ts +77 -0
  458. package/src/us/ein.spec.ts +28 -0
  459. package/src/us/ein.ts +179 -0
  460. package/src/us/index.ts +2 -0
  461. package/src/us/ssn.spec.ts +28 -0
  462. package/src/us/ssn.ts +117 -0
  463. package/src/util/checksum.spec.ts +70 -0
  464. package/src/util/checksum.ts +258 -0
  465. package/src/util/index.ts +13 -0
  466. package/src/util/isValidDate.spec.ts +49 -0
  467. package/src/util/isValidDate.ts +87 -0
  468. package/src/util/iso7064.spec.ts +17 -0
  469. package/src/util/iso7064.ts +8 -0
  470. package/src/util/pymod.ts +8 -0
  471. package/src/util/strings/char.ts +18 -0
  472. package/src/util/strings/clean.spec.ts +15 -0
  473. package/src/util/strings/clean.ts +305 -0
  474. package/src/util/strings/format.ts +18 -0
  475. package/src/util/strings/index.ts +5 -0
  476. package/src/util/strings/reverseString.ts +3 -0
  477. package/src/util/strings/splitAt.spec.ts +15 -0
  478. package/src/util/strings/splitAt.ts +16 -0
  479. package/src/uy/cedula.spec.ts +28 -0
  480. package/src/uy/cedula.ts +74 -0
  481. package/src/uy/index.ts +3 -0
  482. package/src/uy/nie.spec.ts +28 -0
  483. package/src/uy/nie.ts +84 -0
  484. package/src/uy/rut.spec.ts +34 -0
  485. package/src/uy/rut.ts +99 -0
  486. package/src/ve/index.ts +1 -0
  487. package/src/ve/rif.spec.ts +38 -0
  488. package/src/ve/rif.ts +92 -0
  489. package/src/vn/index.ts +1 -0
  490. package/src/vn/mst.spec.ts +40 -0
  491. package/src/vn/mst.ts +100 -0
  492. package/src/za/idnr.spec.ts +28 -0
  493. package/src/za/idnr.ts +84 -0
  494. package/src/za/index.ts +2 -0
  495. package/src/za/tin.spec.ts +28 -0
  496. package/src/za/tin.ts +75 -0
package/src/eg/tn.ts ADDED
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Tax Registration Number (الرقم الضريبي, Egypt tax number).
3
+ *
4
+ * This number consists of 9 digits, usually separated into three groups
5
+ * using hyphens to make it easier to read, like XXX-XXX-XXX.
6
+ *
7
+ * Source
8
+ * https://emsp.mts.gov.eg:8181/EMDB-web/faces/authoritiesandcompanies/authority/website/SearchAuthority.xhtml?lang=en
9
+ *
10
+ * ENTITY
11
+ */
12
+
13
+ import * as exceptions from '../exceptions';
14
+ import { strings } from '../util';
15
+ import { Validator, ValidateReturn } from '../types';
16
+
17
+ const ARABIC_NUMBERS_MAP: Record<string, string> = {
18
+ // Arabic-indic digits.
19
+ '٠': '0',
20
+ '١': '1',
21
+ '٢': '2',
22
+ '٣': '3',
23
+ '٤': '4',
24
+ '٥': '5',
25
+ '٦': '6',
26
+ '٧': '7',
27
+ '٨': '8',
28
+ '٩': '9',
29
+ // Extended arabic-indic digits.
30
+ '۰': '0',
31
+ '۱': '1',
32
+ '۲': '2',
33
+ '۳': '3',
34
+ '۴': '4',
35
+ '۵': '5',
36
+ '۶': '6',
37
+ '۷': '7',
38
+ '۸': '8',
39
+ '۹': '9',
40
+ };
41
+
42
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
43
+ // Normalize the arabic characters to ascii digits
44
+ const norm = input
45
+ .split('')
46
+ .map(c => ARABIC_NUMBERS_MAP[c] ?? c)
47
+ .join('');
48
+ return strings.cleanUnicode(norm, ' -/');
49
+ }
50
+
51
+ const impl: Validator = {
52
+ name: 'Tax Registration Number',
53
+ localName: 'الرقم الضريبي',
54
+ abbreviation: 'TN',
55
+
56
+ compact(input: string): string {
57
+ const [value, err] = clean(input);
58
+
59
+ if (err) {
60
+ throw err;
61
+ }
62
+
63
+ return value;
64
+ },
65
+
66
+ format(input: string): string {
67
+ const [value] = clean(input);
68
+
69
+ return strings.splitAt(value, 3, 6).join('-');
70
+ },
71
+
72
+ validate(input: string): ValidateReturn {
73
+ const [value, error] = clean(input);
74
+
75
+ if (error) {
76
+ return { isValid: false, error };
77
+ }
78
+ if (value.length !== 9) {
79
+ return { isValid: false, error: new exceptions.InvalidLength() };
80
+ }
81
+
82
+ if (!strings.isdigits(value)) {
83
+ return { isValid: false, error: new exceptions.InvalidFormat() };
84
+ }
85
+
86
+ return {
87
+ isValid: true,
88
+ compact: value,
89
+ isIndividual: false,
90
+ isCompany: false,
91
+ };
92
+ },
93
+ };
94
+
95
+ export const { name, localName, abbreviation, validate, format, compact } =
96
+ impl;
@@ -0,0 +1,43 @@
1
+ import { validate, format } from './cif';
2
+ import { InvalidLength, InvalidComponent } from '../exceptions';
3
+
4
+ describe('es/cif', () => {
5
+ it('format:J99216582', () => {
6
+ const result = format('J99216582');
7
+
8
+ expect(result).toEqual('J-9921658-2');
9
+ });
10
+
11
+ it.each(['J99216582', 'B86670460', 'Q2876031B', 'N0112768G', 'W8265365J'])(
12
+ 'validate:%s',
13
+ (cif: string) => {
14
+ const result = validate(cif);
15
+
16
+ expect(result.isValid && result.compact).toEqual(cif);
17
+ },
18
+ );
19
+
20
+ it('validate:X13585626', () => {
21
+ const result = validate('X13585626');
22
+
23
+ expect(result.error).toBeInstanceOf(InvalidComponent);
24
+ });
25
+
26
+ it('validate:J992165831', () => {
27
+ const result = validate('J992165831');
28
+
29
+ expect(result.error).toBeInstanceOf(InvalidLength);
30
+ });
31
+
32
+ it('validate:M-1234567-L', () => {
33
+ const result = validate('M-1234567-L');
34
+
35
+ expect(result.error).toBeInstanceOf(InvalidComponent);
36
+ });
37
+
38
+ it('validate:O-1234567-L', () => {
39
+ const result = validate('O-1234567-L');
40
+
41
+ expect(result.error).toBeInstanceOf(InvalidComponent);
42
+ });
43
+ });
package/src/es/cif.ts ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * CIF (Código de Identificación Fiscal, Spanish company tax number).
3
+ *
4
+ * The CIF is a tax identification number for legal entities. It has 9 digits
5
+ * where the first digit is a letter (denoting the type of entity) and the
6
+ * last is a check digit (which may also be a letter).
7
+ *
8
+ * Sources:
9
+ * https://es.wikipedia.org/wiki/Código_de_identificación_fiscal
10
+ *
11
+ * TAX/ENTITY
12
+ */
13
+
14
+ import * as exceptions from '../exceptions';
15
+ import { strings } from '../util';
16
+ import { Validator, ValidateReturn } from '../types';
17
+ import { luhnChecksumDigit } from '../util/checksum';
18
+
19
+ const entityTypes = 'ABCDEFGHJNPQRSUVW';
20
+ const letterCheckDigits = 'JABCDEFGHI';
21
+
22
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
23
+ return strings.cleanUnicode(input, ' -');
24
+ }
25
+
26
+ const impl: Validator = {
27
+ name: 'Spanish Company Tax Number',
28
+ localName: 'Código de Identificación Fiscal',
29
+ abbreviation: 'CIF',
30
+ compact(input: string): string {
31
+ const [value, err] = clean(input);
32
+
33
+ if (err) {
34
+ throw err;
35
+ }
36
+
37
+ return value;
38
+ },
39
+
40
+ format(input: string): string {
41
+ const [value] = clean(input);
42
+
43
+ return strings.splitAt(value, 1, 8).join('-');
44
+ },
45
+
46
+ validate(input: string): ValidateReturn {
47
+ const [value, error] = clean(input);
48
+
49
+ if (error) {
50
+ return { isValid: false, error };
51
+ }
52
+ if (value.length !== 9) {
53
+ return { isValid: false, error: new exceptions.InvalidLength() };
54
+ }
55
+
56
+ const [first, body, check] = strings.splitAt(value, 1, 8);
57
+
58
+ if (
59
+ !strings.isdigits(body) ||
60
+ !entityTypes.includes(first) ||
61
+ !(strings.isdigits(check) || letterCheckDigits.includes(check))
62
+ ) {
63
+ return { isValid: false, error: new exceptions.InvalidComponent() };
64
+ }
65
+
66
+ const cs = parseInt(luhnChecksumDigit(body), 10);
67
+ // Two systems of check digits
68
+ const possibleCheckDigits = letterCheckDigits[cs] + String(cs);
69
+
70
+ if (!possibleCheckDigits.includes(check)) {
71
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
72
+ }
73
+
74
+ return {
75
+ isValid: true,
76
+ compact: value,
77
+ isIndividual: false,
78
+ isCompany: true,
79
+ };
80
+ },
81
+ };
82
+
83
+ export const { name, localName, abbreviation, validate, format, compact } =
84
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './dni';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('es/dni', () => {
5
+ it('format:54362315K', () => {
6
+ const result = format('54362315K');
7
+
8
+ expect(result).toEqual('54362315-K');
9
+ });
10
+
11
+ it('validate:54362315-K', () => {
12
+ const result = validate('54362315-K');
13
+
14
+ expect(result.isValid && result.compact).toEqual('54362315K');
15
+ });
16
+
17
+ it('validate:54362315', () => {
18
+ const result = validate('54362315');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:54362315Z', () => {
24
+ const result = validate('54362315Z');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
package/src/es/dni.ts ADDED
@@ -0,0 +1,83 @@
1
+ /**
2
+ * DNI (Documento Nacional de Identidad, Spanish personal identity codes).
3
+ *
4
+ * The DNI is a 9 digit number used to identify Spanish citizens. The last
5
+ * digit is a checksum letter.
6
+ *
7
+ * Foreign nationals, since 2010 are issued an NIE (Número de Identificación
8
+ * de Extranjeros, Foreigner's Identity Number) instead.
9
+ *
10
+ * Sources:
11
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/SPAIN-TIN.pdf
12
+ *
13
+ * PERSON
14
+ */
15
+
16
+ import * as exceptions from '../exceptions';
17
+ import { strings } from '../util';
18
+ import { Validator, ValidateReturn } from '../types';
19
+
20
+ const checkDigits = 'TRWAGMYFPDXBNJZSQVHLCKE';
21
+
22
+ export function calcCheckDigit(value: string): string {
23
+ return checkDigits[parseInt(value.substr(0, 8), 10) % 23];
24
+ }
25
+
26
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
27
+ return strings.cleanUnicode(input, ' -');
28
+ }
29
+
30
+ const impl: Validator = {
31
+ name: 'Spanish Personal Identify Code',
32
+ localName: 'Documento Nacional de Identidad',
33
+ abbreviation: 'DNI',
34
+ compact(input: string): string {
35
+ const [value, err] = clean(input);
36
+
37
+ if (err) {
38
+ throw err;
39
+ }
40
+
41
+ return value;
42
+ },
43
+
44
+ format(input: string): string {
45
+ const [value] = clean(input);
46
+
47
+ return strings.splitAt(value, 8).join('-');
48
+ },
49
+
50
+ validate(input: string): ValidateReturn {
51
+ const [value, error] = clean(input);
52
+
53
+ if (error) {
54
+ return { isValid: false, error };
55
+ }
56
+ if (value.length !== 9) {
57
+ return { isValid: false, error: new exceptions.InvalidLength() };
58
+ }
59
+
60
+ const [body, check] = strings.splitAt(value, 8);
61
+
62
+ if ('KLM'.includes(body[0]) && strings.isdigits(body.substring(1))) {
63
+ // Currently no test data for these cases, so
64
+ // we're assuming they're good based on format
65
+ } else if (!strings.isdigits(body)) {
66
+ // Not all digits in the body, it's not valid
67
+ return { isValid: false, error: new exceptions.InvalidComponent() };
68
+ } else if (calcCheckDigit(body) !== check) {
69
+ // Check the checksum on a non-[KLM] person
70
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
71
+ }
72
+
73
+ return {
74
+ isValid: true,
75
+ compact: value,
76
+ isIndividual: true,
77
+ isCompany: false,
78
+ };
79
+ },
80
+ };
81
+
82
+ export const { name, localName, abbreviation, validate, format, compact } =
83
+ impl;
@@ -0,0 +1,5 @@
1
+ export * as cif from './cif';
2
+ export * as dni from './dni';
3
+ export * as nie from './nie';
4
+ export * as nif from './nif';
5
+ export * as nss from './nss';
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './nie';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('es/nie', () => {
5
+ it('format:x-2482300w', () => {
6
+ const result = format('x-2482300w');
7
+
8
+ expect(result).toEqual('X-2482300-W');
9
+ });
10
+
11
+ it('validate:x-2482300w', () => {
12
+ const result = validate('x-2482300w');
13
+
14
+ expect(result.isValid && result.compact).toEqual('X2482300W');
15
+ });
16
+
17
+ it('validate:X2482300', () => {
18
+ const result = validate('X2482300');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:x-2482300a', () => {
24
+ const result = validate('x-2482300a');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
package/src/es/nie.ts ADDED
@@ -0,0 +1,79 @@
1
+ /**
2
+ * NIE (Número de Identificación de Extranjero, Spanish foreigner number).
3
+ *
4
+ * The NIE is an identification number for foreigners. It is a 9 digit number
5
+ * where the first digit is either X, Y or Z and last digit is a checksum
6
+ * letter.
7
+ *
8
+ * Sources:
9
+ * https://es.wikipedia.org/wiki/N%C3%BAmero_de_identidad_de_extranjero
10
+ *
11
+ * PERSON
12
+ */
13
+
14
+ import * as exceptions from '../exceptions';
15
+ import { strings } from '../util';
16
+ import * as dni from './dni';
17
+ import { Validator, ValidateReturn } from '../types';
18
+
19
+ const checkDigits = 'XYZ';
20
+
21
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
22
+ return strings.cleanUnicode(input, ' -');
23
+ }
24
+
25
+ const impl: Validator = {
26
+ name: 'Spanish Foreign Number',
27
+ localName: 'Número de Identificación de Extranjero',
28
+ abbreviation: 'NIE',
29
+ compact(input: string): string {
30
+ const [value, err] = clean(input);
31
+
32
+ if (err) {
33
+ throw err;
34
+ }
35
+
36
+ return value;
37
+ },
38
+
39
+ format(input: string): string {
40
+ const [value] = clean(input);
41
+
42
+ return strings.splitAt(value, 1, 8).join('-');
43
+ },
44
+
45
+ validate(input: string): ValidateReturn {
46
+ const [value, error] = clean(input);
47
+
48
+ if (error) {
49
+ return { isValid: false, error };
50
+ }
51
+ if (value.length !== 9) {
52
+ return { isValid: false, error: new exceptions.InvalidLength() };
53
+ }
54
+
55
+ const [first, body, check] = strings.splitAt(value, 1, 8);
56
+
57
+ if (
58
+ !strings.isdigits(body) ||
59
+ !checkDigits.includes(first) ||
60
+ strings.isdigits(check)
61
+ ) {
62
+ return { isValid: false, error: new exceptions.InvalidComponent() };
63
+ }
64
+
65
+ if (dni.calcCheckDigit(`${checkDigits.indexOf(first)}${body}`) !== check) {
66
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
67
+ }
68
+
69
+ return {
70
+ isValid: true,
71
+ compact: value,
72
+ isIndividual: true,
73
+ isCompany: false,
74
+ };
75
+ },
76
+ };
77
+
78
+ export const { name, localName, abbreviation, validate, format, compact } =
79
+ impl;
@@ -0,0 +1,52 @@
1
+ import { validate, format } from './nif';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('es/nif', () => {
5
+ it('format:ES B58378431', () => {
6
+ const result = format('ES B58378431');
7
+
8
+ expect(result).toEqual('B-58378431');
9
+ });
10
+
11
+ it('validate:ES B-58378431', () => {
12
+ const result = validate('ES B-58378431');
13
+
14
+ expect(result.isValid && result.compact).toEqual('B58378431');
15
+ });
16
+
17
+ it('validate:B64717838', () => {
18
+ const result = validate('B64717838');
19
+
20
+ expect(result.isValid && result.compact).toEqual('B64717838');
21
+ });
22
+
23
+ it('validate:54362315K', () => {
24
+ const result = validate('54362315K');
25
+
26
+ expect(result.isValid && result.compact).toEqual('54362315K');
27
+ });
28
+
29
+ it('validate:X-5253868-R', () => {
30
+ const result = validate('X-5253868-R');
31
+
32
+ expect(result.isValid && result.compact).toEqual('X5253868R');
33
+ });
34
+
35
+ it('validate:M-1234567-L', () => {
36
+ const result = validate('M-1234567-L');
37
+
38
+ expect(result.isValid && result.compact).toEqual('M1234567L');
39
+ });
40
+
41
+ it('validate:B647178390', () => {
42
+ const result = validate('54362315');
43
+
44
+ expect(result.error).toBeInstanceOf(InvalidLength);
45
+ });
46
+
47
+ it('validate:B64717839', () => {
48
+ const result = validate('B64717839');
49
+
50
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
51
+ });
52
+ });
package/src/es/nif.ts ADDED
@@ -0,0 +1,95 @@
1
+ /**
2
+ * NIF (Número de Identificación Fiscal, Spanish VAT number).
3
+ *
4
+ * The Spanish VAT number is a 9-digit number where either the first, last
5
+ * digits or both can be letters.
6
+ * The number is either a DNI (Documento Nacional de Identidad, for
7
+ *
8
+ * Spaniards), a NIE (Número de Identificación de Extranjero, for
9
+ * foreigners) or a CIF (Código de Identificación Fiscal, for legal
10
+ * entities and others).
11
+ *
12
+ * VAT (PERSON/ENTITY)
13
+ */
14
+
15
+ import * as exceptions from '../exceptions';
16
+ import { strings } from '../util';
17
+ import { Validator, ValidateReturn } from '../types';
18
+ import * as nie from './nie';
19
+ import * as dni from './dni';
20
+ import * as cif from './cif';
21
+
22
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
23
+ const [value, err] = strings.cleanUnicode(input, ' -./');
24
+
25
+ if (err) {
26
+ return [value, err];
27
+ }
28
+ if (value.startsWith('ES')) {
29
+ return [value.substr(2), null];
30
+ }
31
+
32
+ return [value, null];
33
+ }
34
+
35
+ const impl: Validator = {
36
+ name: 'Spanish VAT Number',
37
+ localName: 'Número de Identificación Fiscal',
38
+ abbreviation: 'NIF',
39
+ compact(input: string): string {
40
+ const [value, err] = clean(input);
41
+
42
+ if (err) {
43
+ throw err;
44
+ }
45
+
46
+ return value;
47
+ },
48
+
49
+ format(input: string): string {
50
+ const [value] = clean(input);
51
+
52
+ return strings.splitAt(value, 1).join('-');
53
+ },
54
+
55
+ validate(input: string): ValidateReturn {
56
+ const [value, error] = clean(input);
57
+
58
+ if (error) {
59
+ return { isValid: false, error };
60
+ }
61
+ if (value.length !== 9) {
62
+ return { isValid: false, error: new exceptions.InvalidLength() };
63
+ }
64
+
65
+ if ('KLM'.includes(value[0])) {
66
+ // K: Spanish younger than 14 year old
67
+ // L: Spanish living outside Spain without DNI
68
+ // M: granted the tax to foreigners who have no NIE
69
+ // these use the old checkdigit algorithm (the DNI one)
70
+ if (value[value.length - 1] !== dni.calcCheckDigit(value.substr(1))) {
71
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
72
+ }
73
+ return {
74
+ isValid: true,
75
+ compact: value,
76
+ isIndividual: true,
77
+ isCompany: false,
78
+ };
79
+ }
80
+ if (strings.isdigits(value[0])) {
81
+ // Natural resident (DNI)
82
+ return dni.validate(value);
83
+ }
84
+ if ('XYZ'.includes(value[0])) {
85
+ // Foreign natural person (NIE)
86
+ return nie.validate(value);
87
+ }
88
+
89
+ // Otherwise it has to be a (CIF)
90
+ return cif.validate(value);
91
+ },
92
+ };
93
+
94
+ export const { name, localName, abbreviation, validate, format, compact } =
95
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './nss';
2
+ import { InvalidLength, InvalidComponent } from '../exceptions';
3
+
4
+ describe('es/nss', () => {
5
+ it('format:281234567840', () => {
6
+ const result = format('281234567840');
7
+
8
+ expect('28-1234567840').toEqual(result);
9
+ });
10
+
11
+ it.each(['281234567840'])('validate:%s', (value: string) => {
12
+ const result = validate(value);
13
+
14
+ expect(value).toEqual(result.isValid && result.compact);
15
+ });
16
+
17
+ it('validate:77 12345678 40', () => {
18
+ const result = validate('77 12345678 40');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidComponent);
21
+ });
22
+
23
+ it('validate:28 12345678 4', () => {
24
+ const result = validate('28 12345678 4');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+ });