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/kr/brn.ts ADDED
@@ -0,0 +1,91 @@
1
+ /**
2
+ * BRN (사업자 등록 번호, South Korea Business Registration Number).
3
+ *
4
+ * The Business Registration Number is issued by the district tax office in the
5
+ * local jurisdiction for tax purposes. The number consists of 10 digits and
6
+ * contain the tax office number (3 digits), the type of business (2 digits), a
7
+ * serially assigned value (4 digits) and a single check digit.
8
+ *
9
+ * Source
10
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Korea-TIN.pdf
11
+ *
12
+ * ENTITY
13
+ */
14
+
15
+ import * as exceptions from '../exceptions';
16
+ import { strings } from '../util';
17
+ import { Validator, ValidateReturn } from '../types';
18
+ import { weightedSum } from '../util/checksum';
19
+
20
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
21
+ return strings.cleanUnicode(input, ' -');
22
+ }
23
+
24
+ const impl: Validator = {
25
+ name: 'South Korean Business Registration Number',
26
+ localName: '사업자 등록 번호',
27
+ abbreviation: 'BRN',
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 strings.splitAt(value, 3, 5).join('-');
42
+ },
43
+
44
+ /**
45
+ * BRN (사업자 등록 번호, South Korea Business Registration Number).
46
+ */
47
+ validate(input: string): ValidateReturn {
48
+ const [value, error] = clean(input);
49
+
50
+ if (error) {
51
+ return { isValid: false, error };
52
+ }
53
+ if (value.length !== 10) {
54
+ return { isValid: false, error: new exceptions.InvalidLength() };
55
+ }
56
+ if (!strings.isdigits(value)) {
57
+ return { isValid: false, error: new exceptions.InvalidFormat() };
58
+ }
59
+
60
+ const [head, mid, end, check] = strings.splitAt(value, 3, 5, 9);
61
+
62
+ if (parseInt(head, 10) < 101) {
63
+ return { isValid: false, error: new exceptions.InvalidComponent() };
64
+ }
65
+ if (mid === '00') {
66
+ return { isValid: false, error: new exceptions.InvalidComponent() };
67
+ }
68
+ if (end === '0000') {
69
+ return { isValid: false, error: new exceptions.InvalidComponent() };
70
+ }
71
+
72
+ const sum = weightedSum(value.substr(0, 9), {
73
+ modulus: 10,
74
+ weights: [1, 3, 7, 1, 3, 7, 1, 3, 5],
75
+ });
76
+ const extra = Math.floor((parseInt(end[3], 10) * 5) / 10);
77
+ if (String((10 - ((sum + extra) % 10)) % 10) !== check) {
78
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
79
+ }
80
+
81
+ return {
82
+ isValid: true,
83
+ compact: value,
84
+ isIndividual: false,
85
+ isCompany: true,
86
+ };
87
+ },
88
+ };
89
+
90
+ export const { name, localName, abbreviation, validate, format, compact } =
91
+ impl;
@@ -0,0 +1,2 @@
1
+ export * as brn from './brn';
2
+ export * as rrn from './rrn';
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './rrn';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('kr/rrn', () => {
5
+ it('format:9710139019902', () => {
6
+ const result = format('9710139019902');
7
+
8
+ expect(result).toEqual('971013-9019902');
9
+ });
10
+
11
+ it('validate:971013-9019902', () => {
12
+ const result = validate('971013-9019902');
13
+
14
+ expect(result.isValid && result.compact).toEqual('9710139019902');
15
+ });
16
+
17
+ it('validate:850126-6401473', () => {
18
+ const result = validate('8501266401473');
19
+
20
+ expect(result.isValid && result.compact).toEqual('8501266401473');
21
+ });
22
+
23
+ it('validate:12345678', () => {
24
+ const result = validate('12345678');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+
29
+ it('validate:971013-9019903', () => {
30
+ const result = validate('971013-9019903');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
33
+ });
34
+ });
package/src/kr/rrn.ts ADDED
@@ -0,0 +1,104 @@
1
+ /**
2
+ * RRN (South Korean resident registration number).
3
+ *
4
+ * The RRN (resident registration number, 주민등록번호) is a 13-digit number
5
+ * issued to all residents of the Republic of Korea. Foreigners residing in the
6
+ * Republic of Korea receive an alien registration number (ARN) which follows
7
+ * the same encoding pattern.
8
+ *
9
+ * The first six digits code the date of birth. The seventh digit encodes the
10
+ * century and gender. The next four digits encode the place of birth for
11
+ * Koreans or the issuing agency for foreigners, followed by two digits for the
12
+ * community center number, one serial number and a check digit.
13
+ *
14
+ * Source:
15
+ * http://www.law.go.kr/lsSc.do?tabMenuId=tab18&p1=&subMenu=1&nwYn=1&section=&tabNo=&query=개인정보+보호법
16
+ * https://en.wikipedia.org/wiki/Resident_registration_number
17
+ * https://techscience.org/a/2015092901/
18
+ *
19
+ * PERSON
20
+ */
21
+
22
+ import * as exceptions from '../exceptions';
23
+ import { isValidDateCompactYYYYMMDD, strings } from '../util';
24
+ import { Validator, ValidateReturn } from '../types';
25
+ import { weightedSum } from '../util/checksum';
26
+
27
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
28
+ return strings.cleanUnicode(input, ' -/');
29
+ }
30
+
31
+ const centuryPrefix: Record<string, number> = {
32
+ 0: 18,
33
+ 1: 19,
34
+ 2: 19,
35
+ 3: 20,
36
+ 4: 20,
37
+ 5: 19,
38
+ 6: 19,
39
+ 7: 20,
40
+ 8: 20,
41
+ 9: 18,
42
+ };
43
+
44
+ const impl: Validator = {
45
+ name: 'South Korean Resident Registration Number',
46
+ localName: '주민등록번호',
47
+ abbreviation: 'RRN',
48
+ compact(input: string): string {
49
+ const [value, err] = clean(input);
50
+
51
+ if (err) {
52
+ throw err;
53
+ }
54
+
55
+ return value;
56
+ },
57
+
58
+ format(input: string): string {
59
+ const [value] = clean(input);
60
+
61
+ return strings.splitAt(value, 6).join('-');
62
+ },
63
+
64
+ validate(input: string): ValidateReturn {
65
+ const [value, error] = clean(input);
66
+
67
+ if (error) {
68
+ return { isValid: false, error };
69
+ }
70
+ if (value.length !== 13) {
71
+ return { isValid: false, error: new exceptions.InvalidLength() };
72
+ }
73
+ if (!strings.isdigits(value)) {
74
+ return { isValid: false, error: new exceptions.InvalidFormat() };
75
+ }
76
+
77
+ const [dob, century, place, , check] = strings.splitAt(value, 6, 7, 9, 12);
78
+
79
+ if (!isValidDateCompactYYYYMMDD(`${centuryPrefix[century]}${dob}`, true)) {
80
+ return { isValid: false, error: new exceptions.InvalidComponent() };
81
+ }
82
+ if (parseInt(place, 10) > 96) {
83
+ return { isValid: false, error: new exceptions.InvalidComponent() };
84
+ }
85
+
86
+ const sum = weightedSum(value.substr(0, 12), {
87
+ modulus: 11,
88
+ weights: [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5],
89
+ });
90
+ if (String((11 - sum) % 10) !== check) {
91
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
92
+ }
93
+
94
+ return {
95
+ isValid: true,
96
+ compact: value,
97
+ isIndividual: true,
98
+ isCompany: false,
99
+ };
100
+ },
101
+ };
102
+
103
+ export const { name, localName, abbreviation, validate, format, compact } =
104
+ impl;
@@ -0,0 +1 @@
1
+ export * as peid from './peid';
@@ -0,0 +1,22 @@
1
+ import { validate, format } from './peid';
2
+ import { InvalidLength } from '../exceptions';
3
+
4
+ describe('li/peid', () => {
5
+ it('format:1234567', () => {
6
+ const result = format('1234567');
7
+
8
+ expect(result).toEqual('1234567');
9
+ });
10
+
11
+ it('validate:00001234567', () => {
12
+ const result = validate('00001234567');
13
+
14
+ expect(result.isValid && result.compact).toEqual('1234567');
15
+ });
16
+
17
+ it('validate:00001234568913454545', () => {
18
+ const result = validate('00001234568913454545');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+ });
package/src/li/peid.ts ADDED
@@ -0,0 +1,71 @@
1
+ /**
2
+ * PEID (Liechtenstein tax code for individuals and entities).
3
+ *
4
+ * The Personenidentifikationsnummer (PEID) is an numeric code up to 12 digits
5
+ * used to identify entities and individuals residing in Liechtenstein.
6
+ *
7
+ * Source:
8
+ * https://www.oera.li/
9
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/LIECHTENSTEIN%20TIN.pdf
10
+ *
11
+ * PERSON/ENTITY
12
+ */
13
+
14
+ import * as exceptions from '../exceptions';
15
+ import { strings } from '../util';
16
+ import { Validator, ValidateReturn } from '../types';
17
+
18
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
19
+ const [value, error] = strings.cleanUnicode(input, ' .');
20
+
21
+ if (error) {
22
+ return [value, error];
23
+ }
24
+
25
+ return [value.replace(/^0+/, ''), null];
26
+ }
27
+
28
+ const impl: Validator = {
29
+ name: 'Liechtenstein Tax Code',
30
+ localName: 'Personenidentifikationsnummer',
31
+ abbreviation: 'PEID',
32
+ compact(input: string): string {
33
+ const [value, err] = clean(input);
34
+
35
+ if (err) {
36
+ throw err;
37
+ }
38
+
39
+ return value;
40
+ },
41
+
42
+ format(input: string): string {
43
+ const [value] = clean(input);
44
+
45
+ return value;
46
+ },
47
+
48
+ validate(input: string): ValidateReturn {
49
+ const [value, error] = clean(input);
50
+
51
+ if (error) {
52
+ return { isValid: false, error };
53
+ }
54
+ if (value.length < 4 || value.length > 12) {
55
+ return { isValid: false, error: new exceptions.InvalidLength() };
56
+ }
57
+ if (!strings.isdigits(value)) {
58
+ return { isValid: false, error: new exceptions.InvalidFormat() };
59
+ }
60
+
61
+ return {
62
+ isValid: true,
63
+ compact: value,
64
+ isIndividual: true,
65
+ isCompany: true,
66
+ };
67
+ },
68
+ };
69
+
70
+ export const { name, localName, abbreviation, validate, format, compact } =
71
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './asmens';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('lt/asmens', () => {
5
+ it('format:33309240064', () => {
6
+ const result = format('33309240064');
7
+
8
+ expect(result).toEqual('33309240064');
9
+ });
10
+
11
+ it('validate:33309240064', () => {
12
+ const result = validate('33309240064');
13
+
14
+ expect(result.isValid && result.compact).toEqual('33309240064');
15
+ });
16
+
17
+ it('validate:12345678', () => {
18
+ const result = validate('12345678');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:33309240164', () => {
24
+ const result = validate('33309240164');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Asmens kodas (Lithuanian, personal numbers).
3
+ *
4
+ * The Asmens kodas consists of 11 digits. The first digits denotes the gender
5
+ * and birth century, the second through seventh denotes the birth date,
6
+ * followed by a three-digit serial and a check digit.
7
+ *
8
+ * Source:
9
+ * https://lt.wikipedia.org/wiki/Asmens_kodas
10
+ * https://en.wikipedia.org/wiki/National_identification_number#Lithuania
11
+ *
12
+ * PERSON
13
+ */
14
+
15
+ import * as exceptions from '../exceptions';
16
+ import { strings } from '../util';
17
+ import { Validator, ValidateReturn } from '../types';
18
+ import { ikCheck, ikCheckDate } from '../ee/ik';
19
+
20
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
21
+ return strings.cleanUnicode(input, ' -/');
22
+ }
23
+
24
+ const impl: Validator = {
25
+ name: 'Lithuanian Personal Code',
26
+ localName: 'Asmens Kodas',
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 !== 11) {
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
+ if (value[0] !== '9' && !ikCheckDate(value)) {
57
+ return { isValid: false, error: new exceptions.InvalidComponent() };
58
+ }
59
+ if (!ikCheck(value)) {
60
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
61
+ }
62
+
63
+ return {
64
+ isValid: true,
65
+ compact: value,
66
+ isIndividual: true,
67
+ isCompany: false,
68
+ };
69
+ },
70
+ };
71
+
72
+ export const { name, localName, abbreviation, validate, format, compact } =
73
+ impl;
@@ -0,0 +1,2 @@
1
+ export * as asmens from './asmens';
2
+ export * as pvm from './pvm';
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './pvm';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('lt/pvm', () => {
5
+ it('format:119511515', () => {
6
+ const result = format('119511515');
7
+
8
+ expect(result).toEqual('119511515');
9
+ });
10
+
11
+ it('validate:119511515', () => {
12
+ const result = validate('119511515');
13
+
14
+ expect(result.isValid && result.compact).toEqual('119511515');
15
+ });
16
+
17
+ it('validate:LT 100001919017', () => {
18
+ const result = validate('LT 100001919017');
19
+
20
+ expect(result.isValid && result.compact).toEqual('100001919017');
21
+ });
22
+
23
+ it('validate:12345678', () => {
24
+ const result = validate('12345678');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+
29
+ it('validate:100001919018', () => {
30
+ const result = validate('100001919018');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
33
+ });
34
+ });
package/src/lt/pvm.ts ADDED
@@ -0,0 +1,75 @@
1
+ /**
2
+ * PVM (Pridėtinės vertės mokestis mokėtojo kodas, Lithuanian VAT number).
3
+ *
4
+ * The PVM is used for VAT purposes in Lithuania. It is 9 digits (for legal
5
+ * entities) or 12 digits long (for temporarily registered taxpayers). This
6
+ * module does not check the format of Lithuanian personal codes (Asmens
7
+ * kodas).
8
+ *
9
+ * ENTITY
10
+ */
11
+
12
+ import * as exceptions from '../exceptions';
13
+ import { strings } from '../util';
14
+ import { Validator, ValidateReturn } from '../types';
15
+ import { ikCheck } from '../ee/ik';
16
+
17
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
18
+ return strings.cleanUnicode(input, ' -', 'LT');
19
+ }
20
+
21
+ const impl: Validator = {
22
+ name: 'Lithuanian VAT Number',
23
+ localName: 'Pridėtinės Vertės Mokestis Mokėtojo Kodas',
24
+ abbreviation: 'PVM Kodas',
25
+ compact(input: string): string {
26
+ const [value, err] = clean(input);
27
+
28
+ if (err) {
29
+ throw err;
30
+ }
31
+
32
+ return value;
33
+ },
34
+
35
+ format(input: string): string {
36
+ const [value] = clean(input);
37
+
38
+ return value;
39
+ },
40
+
41
+ validate(input: string): ValidateReturn {
42
+ const [value, error] = clean(input);
43
+
44
+ if (error) {
45
+ return { isValid: false, error };
46
+ }
47
+ if (value.length !== 9 && value.length !== 12) {
48
+ return { isValid: false, error: new exceptions.InvalidLength() };
49
+ }
50
+ if (!strings.isdigits(value)) {
51
+ return { isValid: false, error: new exceptions.InvalidFormat() };
52
+ }
53
+
54
+ if (value.length === 9 && value[7] !== '1') {
55
+ return { isValid: false, error: new exceptions.InvalidComponent() };
56
+ }
57
+ if (value.length === 12 && value[10] !== '1') {
58
+ return { isValid: false, error: new exceptions.InvalidComponent() };
59
+ }
60
+
61
+ if (!ikCheck(value)) {
62
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
63
+ }
64
+
65
+ return {
66
+ isValid: true,
67
+ compact: value,
68
+ isIndividual: false,
69
+ isCompany: true,
70
+ };
71
+ },
72
+ };
73
+
74
+ export const { name, localName, abbreviation, validate, format, compact } =
75
+ impl;
@@ -0,0 +1 @@
1
+ export * as tva from './tva';
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './tva';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('lu/tva', () => {
5
+ it('format:LU 150 274 42', () => {
6
+ const result = format('15027442');
7
+
8
+ expect(result).toEqual('150 274 42');
9
+ });
10
+
11
+ it('validate:LU 150 274 42', () => {
12
+ const result = validate('LU 150 274 42');
13
+
14
+ expect(result.isValid && result.compact).toEqual('15027442');
15
+ });
16
+
17
+ it('validate:123456789', () => {
18
+ const result = validate('123456789');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:LU 150 274 43', () => {
24
+ const result = validate('LU 150 274 43');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
package/src/lu/tva.ts ADDED
@@ -0,0 +1,70 @@
1
+ /**
2
+ * TVA (taxe sur la valeur ajoutée, Luxembourgian VAT number).
3
+ *
4
+ * The n° TVA (Numéro d'identification à la taxe sur la valeur ajoutée) is
5
+ * used for tax purposes in Luxembourg. The number consists of 8 digits of
6
+ * which the last two are check digits.
7
+ *
8
+ * Source
9
+ *
10
+ * ENTITY
11
+ */
12
+
13
+ import * as exceptions from '../exceptions';
14
+ import { strings } from '../util';
15
+ import { Validator, ValidateReturn } from '../types';
16
+
17
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
18
+ return strings.cleanUnicode(input, ' :-.', 'LU');
19
+ }
20
+
21
+ const impl: Validator = {
22
+ name: 'Luxembourgian VAT Number',
23
+ localName: "Numéro d'Identification à la Taxe sur la Valeur Ajoutée",
24
+ abbreviation: 'n° TVA',
25
+ compact(input: string): string {
26
+ const [value, err] = clean(input);
27
+
28
+ if (err) {
29
+ throw err;
30
+ }
31
+
32
+ return value;
33
+ },
34
+
35
+ format(input: string): string {
36
+ const [value] = clean(input);
37
+
38
+ return strings.splitAt(value, 3, 6).join(' ');
39
+ },
40
+
41
+ validate(input: string): ValidateReturn {
42
+ const [value, error] = clean(input);
43
+
44
+ if (error) {
45
+ return { isValid: false, error };
46
+ }
47
+ if (value.length !== 8) {
48
+ return { isValid: false, error: new exceptions.InvalidLength() };
49
+ }
50
+ if (!strings.isdigits(value)) {
51
+ return { isValid: false, error: new exceptions.InvalidFormat() };
52
+ }
53
+
54
+ const [front, check] = strings.splitAt(value, -2);
55
+
56
+ if (parseInt(front, 10) % 89 !== parseInt(check, 10)) {
57
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
58
+ }
59
+
60
+ return {
61
+ isValid: true,
62
+ compact: value,
63
+ isIndividual: false,
64
+ isCompany: true,
65
+ };
66
+ },
67
+ };
68
+
69
+ export const { name, localName, abbreviation, validate, format, compact } =
70
+ impl;
@@ -0,0 +1 @@
1
+ export * as pvn from './pvn';