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/au/tfn.ts ADDED
@@ -0,0 +1,79 @@
1
+ /**
2
+ * TFN (Australian Tax File Number).
3
+ *
4
+ * The Tax File Number (TFN) is issued by the Australian Taxation Office (ATO)
5
+ * to taxpaying individuals and organisations. A business has both a TFN and an
6
+ * Australian Business Number (ABN).
7
+ *
8
+ * The number consists of 8 (older numbers) or 9 digits and includes a check
9
+ * digit but otherwise without structure.
10
+ *
11
+ * More information:
12
+ * https://en.wikipedia.org/wiki/Tax_file_number
13
+ * https://www.ato.gov.au/Individuals/Tax-file-number/
14
+ *
15
+ * PERSON/ENTITY
16
+ */
17
+
18
+ import * as exceptions from '../exceptions';
19
+ import { strings } from '../util';
20
+ import { Validator, ValidateReturn } from '../types';
21
+ import { weightedSum } from '../util/checksum';
22
+
23
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
24
+ return strings.cleanUnicode(input, ' ');
25
+ }
26
+
27
+ const impl: Validator = {
28
+ name: 'Australian Tax File Number',
29
+ localName: 'Tax File Number',
30
+ abbreviation: 'TFN',
31
+ compact(input: string): string {
32
+ const [value, err] = clean(input);
33
+
34
+ if (err) {
35
+ throw err;
36
+ }
37
+
38
+ return value;
39
+ },
40
+
41
+ format(input: string): string {
42
+ const [value] = clean(input);
43
+
44
+ return strings.splitAt(value, 3, 6).join(' ');
45
+ },
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 !== 8 && value.length !== 9) {
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 sum = weightedSum(value, {
61
+ modulus: 11,
62
+ weights: [1, 4, 3, 7, 5, 8, 6, 9, 10],
63
+ });
64
+
65
+ if (sum !== 0) {
66
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
67
+ }
68
+
69
+ return {
70
+ isValid: true,
71
+ compact: value,
72
+ isIndividual: true,
73
+ isCompany: true,
74
+ };
75
+ },
76
+ };
77
+
78
+ export const { name, localName, abbreviation, validate, format, compact } =
79
+ impl;
@@ -0,0 +1,2 @@
1
+ export * as pin from './pin';
2
+ export * as tin from './tin';
@@ -0,0 +1,16 @@
1
+ import { validate, format } from './pin';
2
+ import { InvalidLength } from '../exceptions';
3
+
4
+ describe('az/pin', () => {
5
+ it('format:123 123 3', () => {
6
+ const result = format('123 123 3');
7
+
8
+ expect(result).toEqual('1231233');
9
+ });
10
+
11
+ it('validate:12345678', () => {
12
+ const result = validate('12345678');
13
+
14
+ expect(result.error).toBeInstanceOf(InvalidLength);
15
+ });
16
+ });
package/src/az/pin.ts ADDED
@@ -0,0 +1,61 @@
1
+ /**
2
+ * PIN - Fərdi İdentifikasiya Nömrəsidir (Azerbaijani Personal Identification Number).
3
+ *
4
+ * Source
5
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Azerbaijan-TIN.pdf
6
+ *
7
+ * PERSON
8
+ */
9
+
10
+ import * as exceptions from '../exceptions';
11
+ import { strings } from '../util';
12
+ import { Validator, ValidateReturn } from '../types';
13
+
14
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
15
+ return strings.cleanUnicode(input, ' ');
16
+ }
17
+
18
+ const impl: Validator = {
19
+ name: 'Azerbaijani Personal Identification Number',
20
+ localName: 'Fərdi İdentifikasiya Nömrəsidir',
21
+ abbreviation: 'PIN',
22
+ compact(input: string): string {
23
+ const [value, err] = clean(input);
24
+
25
+ if (err) {
26
+ throw err;
27
+ }
28
+
29
+ return value;
30
+ },
31
+
32
+ format(input: string): string {
33
+ const [value] = clean(input);
34
+
35
+ return value;
36
+ },
37
+
38
+ validate(input: string): ValidateReturn {
39
+ const [value, error] = clean(input);
40
+
41
+ if (error) {
42
+ return { isValid: false, error };
43
+ }
44
+ if (value.length !== 10) {
45
+ return { isValid: false, error: new exceptions.InvalidLength() };
46
+ }
47
+ if (!strings.isdigits(value)) {
48
+ return { isValid: false, error: new exceptions.InvalidFormat() };
49
+ }
50
+
51
+ return {
52
+ isValid: true,
53
+ compact: value,
54
+ isIndividual: true,
55
+ isCompany: false,
56
+ };
57
+ },
58
+ };
59
+
60
+ export const { name, localName, abbreviation, validate, format, compact } =
61
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './tin';
2
+ import { InvalidLength, InvalidFormat } from '../exceptions';
3
+
4
+ describe('az/tin', () => {
5
+ it('format:123-123-123-1', () => {
6
+ const result = format('123-123-123-1');
7
+
8
+ expect(result).toEqual('1231231231');
9
+ });
10
+
11
+ it('validate:1231231231', () => {
12
+ const result = validate('1231231231');
13
+
14
+ expect(result.isValid && result.compact).toEqual('1231231231');
15
+ });
16
+
17
+ it('validate:12345678', () => {
18
+ const result = validate('12345678');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:1231231233', () => {
24
+ const result = validate('1231231233');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidFormat);
27
+ });
28
+ });
package/src/az/tin.ts ADDED
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Vergi identifikasiya nömrəsi (VÖEN) - Azerbaijani Tax Identification Number
3
+ *
4
+ * Source
5
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Azerbaijan-TIN.pdf
6
+ * https://www.currentschoolnews.com/az/articles/tax-identification-number-application/
7
+ *
8
+ * PERSON/ENTITY
9
+ */
10
+
11
+ import * as exceptions from '../exceptions';
12
+ import { strings } from '../util';
13
+ import { Validator, ValidateReturn } from '../types';
14
+
15
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
16
+ return strings.cleanUnicode(input, ' -');
17
+ }
18
+
19
+ const impl: Validator = {
20
+ name: 'Azerbaijani Tax Identification Number',
21
+ localName: 'Vergi Identifikasiya Nömrəsi',
22
+ abbreviation: 'VÖEN',
23
+ compact(input: string): string {
24
+ const [value, err] = clean(input);
25
+
26
+ if (err) {
27
+ throw err;
28
+ }
29
+
30
+ return value;
31
+ },
32
+
33
+ format(input: string): string {
34
+ const [value] = clean(input);
35
+
36
+ return value;
37
+ },
38
+
39
+ validate(input: string): ValidateReturn {
40
+ const [value, error] = clean(input);
41
+
42
+ if (error) {
43
+ return { isValid: false, error };
44
+ }
45
+ if (value.length !== 10) {
46
+ return { isValid: false, error: new exceptions.InvalidLength() };
47
+ }
48
+
49
+ const last = value[9];
50
+ if (!['1', '2'].includes(last)) {
51
+ return { isValid: false, error: new exceptions.InvalidFormat() };
52
+ }
53
+
54
+ return {
55
+ isValid: true,
56
+ compact: value,
57
+ isIndividual: last === '2',
58
+ isCompany: last === '1',
59
+ };
60
+ },
61
+ };
62
+
63
+ export const { name, localName, abbreviation, validate, format, compact } =
64
+ impl;
@@ -0,0 +1 @@
1
+ export * as jmbg from './jmbg';
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './jmbg';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('ba/jmbg', () => {
5
+ it('format:0101006500006', () => {
6
+ const result = format('0101006500006');
7
+
8
+ expect(result).toEqual('0101006500006');
9
+ });
10
+
11
+ it('validate:0101006500006', () => {
12
+ const result = validate('0101006500006');
13
+
14
+ expect(result.isValid && result.compact).toEqual('0101006500006');
15
+ });
16
+
17
+ it('validate:12345678', () => {
18
+ const result = validate('12345678');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:0101006500007', () => {
24
+ const result = validate('0101006500007');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
package/src/ba/jmbg.ts ADDED
@@ -0,0 +1,85 @@
1
+ /**
2
+ * JMBG (Bosnia and Herzegovina Unique Master Citizen Number).
3
+ *
4
+ * Source
5
+ * https://en.wikipedia.org/wiki/Unique_Master_Citizen_Number#
6
+ *
7
+ * PERSON
8
+ */
9
+
10
+ import * as exceptions from '../exceptions';
11
+ import { isValidDate, strings } from '../util';
12
+ import { Validator, ValidateReturn } from '../types';
13
+ import { weightedSum } from '../util/checksum';
14
+
15
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
16
+ return strings.cleanUnicode(input, ' -');
17
+ }
18
+
19
+ const impl: Validator = {
20
+ name: 'Bosnia Unique Master Citizen Number',
21
+ localName: 'Jedinstveni matični broj građana',
22
+ abbreviation: 'JMBG',
23
+ compact(input: string): string {
24
+ const [value, err] = clean(input);
25
+
26
+ if (err) {
27
+ throw err;
28
+ }
29
+
30
+ return value;
31
+ },
32
+
33
+ format(input: string): string {
34
+ const [value] = clean(input);
35
+
36
+ return value;
37
+ },
38
+
39
+ validate(input: string): ValidateReturn {
40
+ const [value, error] = clean(input);
41
+
42
+ if (error) {
43
+ return { isValid: false, error };
44
+ }
45
+ if (value.length !== 13) {
46
+ return { isValid: false, error: new exceptions.InvalidLength() };
47
+ }
48
+ if (!strings.isdigits(value)) {
49
+ return { isValid: false, error: new exceptions.InvalidFormat() };
50
+ }
51
+
52
+ // Question the format starts with this according to SI/EMSO
53
+ // -- DDMMYYY (year < 800 ? year+=2000 : year+=1000)
54
+ // Is this universal?
55
+ const [dd, mm, yyy] = strings.splitAt(value, 2, 4, 7);
56
+ const yyyy = `${parseInt(yyy, 10) < 800 ? '2' : '1'}${yyy}`;
57
+
58
+ if (!isValidDate(yyyy, mm, dd, true)) {
59
+ return { isValid: false, error: new exceptions.InvalidComponent() };
60
+ }
61
+
62
+ const [front, check] = strings.splitAt(value, 12);
63
+
64
+ const sum =
65
+ 11 -
66
+ weightedSum(front, {
67
+ modulus: 11,
68
+ weights: [7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2],
69
+ });
70
+
71
+ if (String((sum % 11) % 10) !== check) {
72
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
73
+ }
74
+
75
+ return {
76
+ isValid: true,
77
+ compact: value,
78
+ isIndividual: true,
79
+ isCompany: false,
80
+ };
81
+ },
82
+ };
83
+
84
+ export const { name, localName, abbreviation, validate, format, compact } =
85
+ impl;
@@ -0,0 +1,184 @@
1
+ import { validate, format } from './bis';
2
+ import { InvalidLength, InvalidChecksum, InvalidFormat } from '../exceptions';
3
+
4
+ describe('be/bis', () => {
5
+ it('format:88 22 29-999.70', () => {
6
+ const result = format('88 02 29-999.70');
7
+
8
+ expect(result).toEqual('88022999970');
9
+ });
10
+
11
+ it('validate:1', () => {
12
+ const result = validate('1');
13
+
14
+ expect(result.error).toBeInstanceOf(InvalidLength);
15
+ });
16
+
17
+ it('validate:88022999990', () => {
18
+ // A number that validates for NN, should be invalid
19
+ const result = validate('88022999990');
20
+
21
+ expect(result.error).toBeInstanceOf(InvalidFormat);
22
+ });
23
+
24
+ it('validate:88222999936', () => {
25
+ // A number with an offset of 20, should be valid assuming 19xx
26
+ const result = validate('88222999936');
27
+
28
+ expect(result.isValid && result.compact).toEqual('88222999936');
29
+ });
30
+
31
+ it('validate:08222999934', () => {
32
+ // A number with an offset of 20, should be valid assuming 20xx
33
+ const result = validate('08222999934');
34
+
35
+ expect(result.isValid && result.compact).toEqual('08222999934');
36
+ });
37
+
38
+ it('validate:88422999979', () => {
39
+ // A number with an offset of 40, should be valid assuming 19xx
40
+ const result = validate('88422999979');
41
+
42
+ expect(result.isValid && result.compact).toEqual('88422999979');
43
+ });
44
+
45
+ it('validate:08422999977', () => {
46
+ // A number with an offset of 40, should be valid assuming 20xx
47
+ const result = validate('08422999977');
48
+
49
+ expect(result.isValid && result.compact).toEqual('08422999977');
50
+ });
51
+
52
+ it('validate:96331699989', () => {
53
+ // A number with an offset of 20, should be invalid due to invalid month
54
+ const result = validate('96331699989');
55
+
56
+ expect(result.error).toBeInstanceOf(InvalidFormat);
57
+ });
58
+
59
+ it('validate:08222999935', () => {
60
+ // A number with an offset of 20, should be invalid due to invalid checksum
61
+ const result = validate('08222999935');
62
+
63
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
64
+ });
65
+
66
+ it('validate:96531699935', () => {
67
+ // A number with an offset of 40, should be invalid due to invalid month
68
+ const result = validate('96531699935');
69
+
70
+ expect(result.error).toBeInstanceOf(InvalidFormat);
71
+ });
72
+
73
+ it('validate:08451799971', () => {
74
+ // A number with an offset of 40, should be invalid due to invalid checksum
75
+ const result = validate('08451799971');
76
+
77
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
78
+ });
79
+
80
+ it('validate:92612099915', () => {
81
+ // A number with an offset of 60, should be invalid due to invalid month
82
+ const result = validate('92612099915');
83
+
84
+ expect(result.error).toBeInstanceOf(InvalidFormat);
85
+ });
86
+
87
+ it('validate:99200199926', () => {
88
+ // A number with an unknown dob offset by 20, should be valid assuming 19xx
89
+ const result = validate('99200199926');
90
+
91
+ expect(result.isValid && result.compact).toEqual('99200199926');
92
+ });
93
+
94
+ it('validate:01200199934', () => {
95
+ // A number with an unknown dob offset by 20, should be valid assuming 20xx
96
+ const result = validate('01200199934');
97
+
98
+ expect(result.isValid && result.compact).toEqual('01200199934');
99
+ });
100
+
101
+ it('validate:01200199935', () => {
102
+ // A number with an unknown dob offset by 20, should be invalid by checksum
103
+ const result = validate('01200199935');
104
+
105
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
106
+ });
107
+
108
+ it('validate:99400199969', () => {
109
+ // A number with an unknown dob offset by 40, should be valid assuming 19xx
110
+ const result = validate('99400199969');
111
+
112
+ expect(result.isValid && result.compact).toEqual('99400199969');
113
+ });
114
+
115
+ it('validate:01451599980', () => {
116
+ // A number with an unknown dob offset by 40, should be valid assuming 20xx
117
+ const result = validate('01451599980');
118
+
119
+ expect(result.isValid && result.compact).toEqual('01451599980');
120
+ });
121
+
122
+ it('validate:01400199977', () => {
123
+ // A number with an unknown dob offset by 40, should be valid assuming 20xx
124
+ const result = validate('01400199977');
125
+
126
+ expect(result.isValid && result.compact).toEqual('01400199977');
127
+ });
128
+
129
+ it('validate:01400199981', () => {
130
+ // A number with an unknown dob offset by 40, should be invalid by checksum
131
+ const result = validate('01400199981');
132
+
133
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
134
+ });
135
+
136
+ it('validate:00290199976', () => {
137
+ // A number that starts with 00 can be valid
138
+ const result = validate('00290199976');
139
+
140
+ expect(result.isValid && result.compact).toEqual('00290199976');
141
+ });
142
+
143
+ it('validate:(unspecified date in current year, offset of 20)', () => {
144
+ const yy = new Date().getFullYear() % 100;
145
+ const baseNum = parseInt(`${yy}2000999`, 10);
146
+ const twoPrefixedBaseNumber = parseInt(`${2}${baseNum}`, 10);
147
+ const checksum = 97 - (twoPrefixedBaseNumber % 97);
148
+ const id = `${baseNum}${checksum}`;
149
+
150
+ const result = validate(id);
151
+ expect(result.isValid && result.compact).toEqual(id);
152
+ });
153
+
154
+ it('validate:(unspecified date in current year, offset of 40)', () => {
155
+ const yy = new Date().getFullYear() % 100;
156
+ const baseNum = parseInt(`${yy}4000999`, 10);
157
+ const twoPrefixedBaseNumber = parseInt(`${2}${baseNum}`, 10);
158
+ const checksum = 97 - (twoPrefixedBaseNumber % 97);
159
+ const id = `${baseNum}${checksum}`;
160
+
161
+ const result = validate(id);
162
+ expect(result.isValid && result.compact).toEqual(id);
163
+ });
164
+
165
+ it('validate:(unspecified date 100 years ago, offset of 20)', () => {
166
+ const yy = new Date().getFullYear() % 100;
167
+ const baseNum = parseInt(`${yy}2000999`, 10);
168
+ const checksum = 97 - (baseNum % 97);
169
+ const id = `${baseNum}${checksum}`;
170
+
171
+ const result = validate(id);
172
+ expect(result.isValid && result.compact).toEqual(id);
173
+ });
174
+
175
+ it('validate:(unspecified date 100 years ago, offset of 40)', () => {
176
+ const yy = new Date().getFullYear() % 100;
177
+ const baseNum = parseInt(`${yy}4000999`, 10);
178
+ const checksum = 97 - (baseNum % 97);
179
+ const id = `${baseNum}${checksum}`;
180
+
181
+ const result = validate(id);
182
+ expect(result.isValid && result.compact).toEqual(id);
183
+ });
184
+ });
package/src/be/bis.ts ADDED
@@ -0,0 +1,85 @@
1
+ /**
2
+ * The BIS (Belgian Number for Foreigners) is an identifier for individuals such
3
+ * as cross-border workers who do not have a Belgian National Number. It has the
4
+ * same format as the Belgian National Number, but the month digits are increased
5
+ * by 40 if the sex of the person was known when the number was assigned and by
6
+ * 20 if not.
7
+ *
8
+ * Source
9
+ * https://fr.wikipedia.org/wiki/Numéro_de_registre_national (Numéro de sécurité sociale)
10
+ *
11
+ * PERSON
12
+ */
13
+
14
+ import * as exceptions from '../exceptions';
15
+ import { strings } from '../util';
16
+ import {
17
+ validStructure,
18
+ validChecksum,
19
+ toDateArray,
20
+ } from './personIdentifierHelpers';
21
+ import { Validator, ValidateReturn } from '../types';
22
+
23
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
24
+ return strings.cleanUnicode(input, ' -.');
25
+ }
26
+
27
+ function toDob(firstSix: string): string {
28
+ const [y, m, d] = toDateArray(firstSix).map(s => parseInt(s, 10));
29
+ const adjustedDateArrays = [
30
+ [y, m - 20, d],
31
+ [y, m - 40, d],
32
+ ];
33
+ // Allow 0 because a 0 month indicates an unknown DOB.
34
+ const dobArray =
35
+ adjustedDateArrays.find(ada => ada[1] >= 0 && ada[1] <= 12) || [];
36
+ return dobArray.map(n => `${n}`.padStart(2, '0')).join('');
37
+ }
38
+
39
+ const impl: Validator = {
40
+ name: 'Belgian Number for Foreigners',
41
+ localName: 'Numéro BIS',
42
+ abbreviation: 'BIS',
43
+ compact(input: string): string {
44
+ const [value, err] = clean(input);
45
+
46
+ if (err) {
47
+ throw err;
48
+ }
49
+
50
+ return value;
51
+ },
52
+ format(input: string): string {
53
+ const [value] = clean(input);
54
+ return value;
55
+ },
56
+ validate(input: string): ValidateReturn {
57
+ const number = impl.compact(input);
58
+
59
+ if (!strings.isdigits(number) || parseInt(number, 10) <= 0) {
60
+ return { isValid: false, error: new exceptions.InvalidFormat() };
61
+ }
62
+
63
+ if (number.length !== 11) {
64
+ return { isValid: false, error: new exceptions.InvalidLength() };
65
+ }
66
+
67
+ if (!validStructure(number, toDob)) {
68
+ return { isValid: false, error: new exceptions.InvalidFormat() };
69
+ }
70
+
71
+ if (!validChecksum(number, toDob)) {
72
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
73
+ }
74
+
75
+ return {
76
+ isValid: true,
77
+ compact: number,
78
+ isIndividual: true,
79
+ isCompany: false,
80
+ };
81
+ },
82
+ };
83
+
84
+ export const { name, localName, abbreviation, validate, format, compact } =
85
+ impl;
@@ -0,0 +1,4 @@
1
+ export * as bis from './bis';
2
+ export * as insz from './insz';
3
+ export * as nn from './nn';
4
+ export * as vat from './vat';
@@ -0,0 +1,51 @@
1
+ import { validate, format } from './insz';
2
+ import { InvalidLength, InvalidChecksum, InvalidFormat } from '../exceptions';
3
+
4
+ describe('be/insz', () => {
5
+ it('format:88 02 29-999.90', () => {
6
+ const result = format('88 02 29-999.90');
7
+
8
+ expect(result).toEqual('88022999990');
9
+ });
10
+
11
+ it('validate:1', () => {
12
+ const result = validate('1');
13
+
14
+ expect(result.error).toBeInstanceOf(InvalidLength);
15
+ });
16
+
17
+ it('validate:88022999990', () => {
18
+ // Valid only for NN, returns true
19
+ const result = validate('88022999990');
20
+
21
+ expect(result.isValid && result.compact).toEqual('88022999990');
22
+ });
23
+
24
+ it('validate:88222999936', () => {
25
+ // Valid only for BIS, returns true
26
+ const result = validate('88222999936');
27
+
28
+ expect(result.isValid && result.compact).toEqual('88222999936');
29
+ });
30
+
31
+ it('validate:88150199951', () => {
32
+ // Invalid Format for both
33
+ const result = validate('88150199951');
34
+
35
+ expect(result.error).toBeInstanceOf(InvalidFormat);
36
+ });
37
+
38
+ it('validate:08222999935', () => {
39
+ // Invalid format for NN (month + 20), Invalid checksum for BIS
40
+ const result = validate('08222999935');
41
+
42
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
43
+ });
44
+
45
+ it('validate:20070199952', () => {
46
+ // Invalid checksum for NN, Invalid format for BIS
47
+ const result = validate('20070199952');
48
+
49
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
50
+ });
51
+ });