stdnum 1.9.16 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/lib/cjs/at/vnr.js +2 -2
  2. package/lib/cjs/ba/jmbg.js +2 -2
  3. package/lib/cjs/cn/ric.js +2 -2
  4. package/lib/cjs/cu/ni.js +2 -2
  5. package/lib/cjs/cz/rc.js +2 -2
  6. package/lib/cjs/de/pwnr.js +2 -2
  7. package/lib/cjs/dk/cpr.js +7 -7
  8. package/lib/cjs/ee/ik.js +2 -2
  9. package/lib/cjs/fi/hetu.js +2 -3
  10. package/lib/cjs/gr/amka.js +2 -2
  11. package/lib/cjs/is/kennitala.js +2 -2
  12. package/lib/cjs/kr/rrn.js +2 -2
  13. package/lib/cjs/lv/pvn.js +2 -2
  14. package/lib/cjs/mx/curp.d.ts +1 -1
  15. package/lib/cjs/mx/curp.js +7 -11
  16. package/lib/cjs/mx/rfc.js +2 -2
  17. package/lib/cjs/my/nric.js +2 -2
  18. package/lib/cjs/no/fodselsnummer.js +3 -3
  19. package/lib/cjs/pl/pesel.js +2 -2
  20. package/lib/cjs/ro/cnp.js +2 -2
  21. package/lib/cjs/se/personnummer.js +34 -7
  22. package/lib/cjs/tw/tax_code.js +3 -3
  23. package/lib/cjs/util/index.d.ts +1 -1
  24. package/lib/cjs/util/index.js +4 -2
  25. package/lib/cjs/util/isValidDate.d.ts +6 -4
  26. package/lib/cjs/util/isValidDate.js +28 -12
  27. package/lib/cjs/za/idnr.js +2 -3
  28. package/lib/esm/at/vnr.js +2 -2
  29. package/lib/esm/ba/jmbg.js +3 -3
  30. package/lib/esm/cn/ric.js +2 -2
  31. package/lib/esm/cu/ni.js +3 -3
  32. package/lib/esm/cz/rc.js +3 -3
  33. package/lib/esm/de/pwnr.js +2 -2
  34. package/lib/esm/dk/cpr.js +8 -8
  35. package/lib/esm/ee/ik.js +2 -2
  36. package/lib/esm/fi/hetu.js +3 -4
  37. package/lib/esm/gr/amka.js +3 -3
  38. package/lib/esm/is/kennitala.js +3 -3
  39. package/lib/esm/kr/rrn.js +2 -2
  40. package/lib/esm/lv/pvn.js +3 -3
  41. package/lib/esm/mx/curp.d.ts +1 -1
  42. package/lib/esm/mx/curp.js +8 -12
  43. package/lib/esm/mx/rfc.js +2 -2
  44. package/lib/esm/my/nric.js +2 -2
  45. package/lib/esm/no/fodselsnummer.js +3 -3
  46. package/lib/esm/pl/pesel.js +2 -2
  47. package/lib/esm/ro/cnp.js +2 -2
  48. package/lib/esm/se/personnummer.js +35 -8
  49. package/lib/esm/tw/tax_code.js +3 -3
  50. package/lib/esm/util/index.d.ts +1 -1
  51. package/lib/esm/util/index.js +2 -2
  52. package/lib/esm/util/isValidDate.d.ts +6 -4
  53. package/lib/esm/util/isValidDate.js +25 -11
  54. package/lib/esm/za/idnr.js +3 -4
  55. package/package.json +5 -2
  56. package/src/ad/index.ts +1 -0
  57. package/src/ad/nrt.spec.ts +36 -0
  58. package/src/ad/nrt.ts +87 -0
  59. package/src/al/index.ts +1 -0
  60. package/src/al/nipt.spec.ts +43 -0
  61. package/src/al/nipt.ts +111 -0
  62. package/src/ar/cbu.spec.ts +28 -0
  63. package/src/ar/cbu.ts +96 -0
  64. package/src/ar/cuit.spec.ts +28 -0
  65. package/src/ar/cuit.ts +102 -0
  66. package/src/ar/dni.spec.ts +22 -0
  67. package/src/ar/dni.ts +72 -0
  68. package/src/ar/index.ts +3 -0
  69. package/src/at/businessid.spec.ts +34 -0
  70. package/src/at/businessid.ts +73 -0
  71. package/src/at/index.ts +4 -0
  72. package/src/at/tin.spec.ts +173 -0
  73. package/src/at/tin.ts +140 -0
  74. package/src/at/uid.spec.ts +44 -0
  75. package/src/at/uid.ts +84 -0
  76. package/src/at/vnr.spec.ts +38 -0
  77. package/src/at/vnr.ts +84 -0
  78. package/src/au/abn.spec.ts +28 -0
  79. package/src/au/abn.ts +78 -0
  80. package/src/au/acn.spec.ts +34 -0
  81. package/src/au/acn.ts +76 -0
  82. package/src/au/index.ts +3 -0
  83. package/src/au/tfn.spec.ts +28 -0
  84. package/src/au/tfn.ts +79 -0
  85. package/src/az/index.ts +2 -0
  86. package/src/az/pin.spec.ts +16 -0
  87. package/src/az/pin.ts +61 -0
  88. package/src/az/tin.spec.ts +28 -0
  89. package/src/az/tin.ts +64 -0
  90. package/src/ba/index.ts +1 -0
  91. package/src/ba/jmbg.spec.ts +28 -0
  92. package/src/ba/jmbg.ts +85 -0
  93. package/src/be/bis.spec.ts +184 -0
  94. package/src/be/bis.ts +85 -0
  95. package/src/be/index.ts +4 -0
  96. package/src/be/insz.spec.ts +51 -0
  97. package/src/be/insz.ts +55 -0
  98. package/src/be/nn.spec.ts +117 -0
  99. package/src/be/nn.ts +77 -0
  100. package/src/be/personIdentifierHelpers.spec.ts +254 -0
  101. package/src/be/personIdentifierHelpers.ts +130 -0
  102. package/src/be/vat.spec.ts +46 -0
  103. package/src/be/vat.ts +84 -0
  104. package/src/bg/egn.spec.ts +28 -0
  105. package/src/bg/egn.ts +75 -0
  106. package/src/bg/index.ts +3 -0
  107. package/src/bg/pnf.spec.ts +28 -0
  108. package/src/bg/pnf.ts +73 -0
  109. package/src/bg/vat.spec.ts +34 -0
  110. package/src/bg/vat.ts +120 -0
  111. package/src/br/cnpj.spec.ts +34 -0
  112. package/src/br/cnpj.ts +89 -0
  113. package/src/br/cpf.spec.ts +34 -0
  114. package/src/br/cpf.ts +87 -0
  115. package/src/br/index.ts +2 -0
  116. package/src/by/index.ts +1 -0
  117. package/src/by/unp.spec.ts +34 -0
  118. package/src/by/unp.ts +108 -0
  119. package/src/bz/index.ts +1 -0
  120. package/src/bz/tin.spec.ts +28 -0
  121. package/src/bz/tin.ts +67 -0
  122. package/src/ca/bn.spec.ts +40 -0
  123. package/src/ca/bn.ts +88 -0
  124. package/src/ca/gst.spec.ts +34 -0
  125. package/src/ca/gst.ts +70 -0
  126. package/src/ca/index.ts +5 -0
  127. package/src/ca/pst.spec.ts +28 -0
  128. package/src/ca/pst.ts +71 -0
  129. package/src/ca/qst.spec.ts +47 -0
  130. package/src/ca/qst.ts +88 -0
  131. package/src/ca/sin.spec.ts +34 -0
  132. package/src/ca/sin.ts +72 -0
  133. package/src/ch/index.ts +3 -0
  134. package/src/ch/ssn.spec.ts +50 -0
  135. package/src/ch/ssn.ts +74 -0
  136. package/src/ch/uid.spec.ts +34 -0
  137. package/src/ch/uid.ts +82 -0
  138. package/src/ch/vat.spec.ts +28 -0
  139. package/src/ch/vat.ts +83 -0
  140. package/src/cl/index.ts +2 -0
  141. package/src/cl/run.ts +13 -0
  142. package/src/cl/rut.spec.ts +50 -0
  143. package/src/cl/rut.ts +97 -0
  144. package/src/cn/index.ts +2 -0
  145. package/src/cn/ric.spec.ts +34 -0
  146. package/src/cn/ric.ts +86 -0
  147. package/src/cn/uscc.spec.ts +34 -0
  148. package/src/cn/uscc.ts +110 -0
  149. package/src/co/index.ts +1 -0
  150. package/src/co/nit.spec.ts +40 -0
  151. package/src/co/nit.ts +85 -0
  152. package/src/cr/cpf.spec.ts +34 -0
  153. package/src/cr/cpf.ts +93 -0
  154. package/src/cr/cpj.spec.ts +28 -0
  155. package/src/cr/cpj.ts +111 -0
  156. package/src/cr/cr.spec.ts +28 -0
  157. package/src/cr/cr.ts +75 -0
  158. package/src/cr/index.ts +3 -0
  159. package/src/cu/index.ts +1 -0
  160. package/src/cu/ni.spec.ts +34 -0
  161. package/src/cu/ni.ts +74 -0
  162. package/src/cy/index.ts +1 -0
  163. package/src/cy/vat.spec.ts +28 -0
  164. package/src/cy/vat.ts +98 -0
  165. package/src/cz/dic.spec.ts +28 -0
  166. package/src/cz/dic.ts +127 -0
  167. package/src/cz/index.ts +2 -0
  168. package/src/cz/rc.spec.ts +44 -0
  169. package/src/cz/rc.ts +95 -0
  170. package/src/de/idnr.spec.ts +34 -0
  171. package/src/de/idnr.ts +91 -0
  172. package/src/de/index.ts +6 -0
  173. package/src/de/passport.spec.ts +31 -0
  174. package/src/de/passport.ts +86 -0
  175. package/src/de/pwnr.spec.ts +62 -0
  176. package/src/de/pwnr.ts +190 -0
  177. package/src/de/stnr.spec.ts +85 -0
  178. package/src/de/stnr.ts +193 -0
  179. package/src/de/svnr.spec.ts +56 -0
  180. package/src/de/svnr.ts +158 -0
  181. package/src/de/vat.spec.ts +28 -0
  182. package/src/de/vat.ts +74 -0
  183. package/src/dk/cpr.spec.ts +34 -0
  184. package/src/dk/cpr.ts +129 -0
  185. package/src/dk/cvr.spec.ts +28 -0
  186. package/src/dk/cvr.ts +81 -0
  187. package/src/dk/index.ts +2 -0
  188. package/src/do/cedula.spec.ts +34 -0
  189. package/src/do/cedula.ts +67 -0
  190. package/src/do/index.ts +3 -0
  191. package/src/do/ncf.spec.ts +34 -0
  192. package/src/do/ncf.ts +133 -0
  193. package/src/do/rnc.spec.ts +40 -0
  194. package/src/do/rnc.ts +74 -0
  195. package/src/dz/index.ts +1 -0
  196. package/src/dz/nif.spec.ts +39 -0
  197. package/src/dz/nif.ts +80 -0
  198. package/src/ec/ci.spec.ts +28 -0
  199. package/src/ec/ci.ts +92 -0
  200. package/src/ec/index.ts +2 -0
  201. package/src/ec/ruc.spec.ts +37 -0
  202. package/src/ec/ruc.ts +117 -0
  203. package/src/ee/ik.spec.ts +28 -0
  204. package/src/ee/ik.ts +114 -0
  205. package/src/ee/index.ts +3 -0
  206. package/src/ee/kmkr.spec.ts +28 -0
  207. package/src/ee/kmkr.ts +76 -0
  208. package/src/ee/registrikood.spec.ts +28 -0
  209. package/src/ee/registrikood.ts +80 -0
  210. package/src/eg/index.ts +1 -0
  211. package/src/eg/tn.spec.ts +44 -0
  212. package/src/eg/tn.ts +96 -0
  213. package/src/es/cif.spec.ts +43 -0
  214. package/src/es/cif.ts +84 -0
  215. package/src/es/dni.spec.ts +28 -0
  216. package/src/es/dni.ts +83 -0
  217. package/src/es/index.ts +5 -0
  218. package/src/es/nie.spec.ts +28 -0
  219. package/src/es/nie.ts +79 -0
  220. package/src/es/nif.spec.ts +52 -0
  221. package/src/es/nif.ts +95 -0
  222. package/src/es/nss.spec.ts +28 -0
  223. package/src/es/nss.ts +132 -0
  224. package/src/exceptions.ts +66 -0
  225. package/src/fi/alv.spec.ts +28 -0
  226. package/src/fi/alv.ts +76 -0
  227. package/src/fi/hetu.spec.ts +37 -0
  228. package/src/fi/hetu.ts +108 -0
  229. package/src/fi/index.ts +3 -0
  230. package/src/fi/ytunnus.spec.ts +28 -0
  231. package/src/fi/ytunnus.ts +49 -0
  232. package/src/fo/index.ts +1 -0
  233. package/src/fo/vn.spec.ts +34 -0
  234. package/src/fo/vn.ts +71 -0
  235. package/src/fr/index.ts +5 -0
  236. package/src/fr/nif.spec.ts +34 -0
  237. package/src/fr/nif.ts +82 -0
  238. package/src/fr/nir.spec.ts +36 -0
  239. package/src/fr/nir.ts +98 -0
  240. package/src/fr/siren.spec.ts +28 -0
  241. package/src/fr/siren.ts +68 -0
  242. package/src/fr/siret.spec.ts +38 -0
  243. package/src/fr/siret.ts +79 -0
  244. package/src/fr/tva.spec.ts +40 -0
  245. package/src/fr/tva.ts +125 -0
  246. package/src/gb/index.ts +3 -0
  247. package/src/gb/nino-prefixes.ts +245 -0
  248. package/src/gb/nino.spec.ts +80 -0
  249. package/src/gb/nino.ts +80 -0
  250. package/src/gb/utr.spec.ts +28 -0
  251. package/src/gb/utr.ts +76 -0
  252. package/src/gb/vat.spec.ts +40 -0
  253. package/src/gb/vat.ts +112 -0
  254. package/src/gen/ean.spec.ts +34 -0
  255. package/src/gen/ean.ts +71 -0
  256. package/src/gen/index.ts +1 -0
  257. package/src/gh/index.ts +1 -0
  258. package/src/gh/tin.spec.ts +42 -0
  259. package/src/gh/tin.ts +93 -0
  260. package/src/gn/index.ts +1 -0
  261. package/src/gn/nifp.spec.ts +40 -0
  262. package/src/gn/nifp.ts +72 -0
  263. package/src/gr/amka.spec.ts +28 -0
  264. package/src/gr/amka.ts +76 -0
  265. package/src/gr/index.ts +2 -0
  266. package/src/gr/vat.spec.ts +34 -0
  267. package/src/gr/vat.ts +84 -0
  268. package/src/gt/cui.spec.ts +34 -0
  269. package/src/gt/cui.ts +110 -0
  270. package/src/gt/index.ts +2 -0
  271. package/src/gt/nit.spec.ts +34 -0
  272. package/src/gt/nit.ts +86 -0
  273. package/src/hk/hkid.spec.ts +52 -0
  274. package/src/hk/hkid.ts +90 -0
  275. package/src/hk/index.ts +1 -0
  276. package/src/hr/index.ts +1 -0
  277. package/src/hr/oib.spec.ts +28 -0
  278. package/src/hr/oib.ts +67 -0
  279. package/src/hu/anum.spec.ts +28 -0
  280. package/src/hu/anum.ts +71 -0
  281. package/src/hu/index.ts +1 -0
  282. package/src/id/index.ts +1 -0
  283. package/src/id/npwp.spec.ts +34 -0
  284. package/src/id/npwp.ts +116 -0
  285. package/src/ie/index.ts +2 -0
  286. package/src/ie/pps.spec.ts +58 -0
  287. package/src/ie/pps.ts +81 -0
  288. package/src/ie/vat.spec.ts +40 -0
  289. package/src/ie/vat.ts +99 -0
  290. package/src/il/hp.spec.ts +38 -0
  291. package/src/il/hp.ts +75 -0
  292. package/src/il/idnr.spec.ts +28 -0
  293. package/src/il/idnr.ts +70 -0
  294. package/src/il/index.ts +2 -0
  295. package/src/in/aadhaar.spec.ts +40 -0
  296. package/src/in/aadhaar.ts +85 -0
  297. package/src/in/epic.spec.ts +34 -0
  298. package/src/in/epic.ts +85 -0
  299. package/src/in/gstin.spec.ts +34 -0
  300. package/src/in/gstin.ts +156 -0
  301. package/src/in/index.ts +4 -0
  302. package/src/in/pan.spec.ts +40 -0
  303. package/src/in/pan.ts +93 -0
  304. package/src/index.ts +404 -0
  305. package/src/is/index.ts +2 -0
  306. package/src/is/kennitala.spec.ts +46 -0
  307. package/src/is/kennitala.ts +80 -0
  308. package/src/is/vsk.spec.ts +22 -0
  309. package/src/is/vsk.ts +60 -0
  310. package/src/it/aic.spec.ts +40 -0
  311. package/src/it/aic.ts +97 -0
  312. package/src/it/codicefiscale.spec.ts +28 -0
  313. package/src/it/codicefiscale.ts +167 -0
  314. package/src/it/index.ts +3 -0
  315. package/src/it/iva.spec.ts +28 -0
  316. package/src/it/iva.ts +65 -0
  317. package/src/jp/cn.spec.ts +28 -0
  318. package/src/jp/cn.ts +77 -0
  319. package/src/jp/index.ts +1 -0
  320. package/src/ke/index.ts +1 -0
  321. package/src/ke/pin.spec.ts +34 -0
  322. package/src/ke/pin.ts +77 -0
  323. package/src/kr/brn.spec.ts +28 -0
  324. package/src/kr/brn.ts +91 -0
  325. package/src/kr/index.ts +2 -0
  326. package/src/kr/rrn.spec.ts +34 -0
  327. package/src/kr/rrn.ts +104 -0
  328. package/src/li/index.ts +1 -0
  329. package/src/li/peid.spec.ts +22 -0
  330. package/src/li/peid.ts +71 -0
  331. package/src/lt/asmens.spec.ts +28 -0
  332. package/src/lt/asmens.ts +73 -0
  333. package/src/lt/index.ts +2 -0
  334. package/src/lt/pvm.spec.ts +34 -0
  335. package/src/lt/pvm.ts +75 -0
  336. package/src/lu/index.ts +1 -0
  337. package/src/lu/tva.spec.ts +28 -0
  338. package/src/lu/tva.ts +70 -0
  339. package/src/lv/index.ts +1 -0
  340. package/src/lv/pvn.spec.ts +44 -0
  341. package/src/lv/pvn.ts +102 -0
  342. package/src/ma/ice.spec.ts +39 -0
  343. package/src/ma/ice.ts +72 -0
  344. package/src/ma/ice9.spec.ts +28 -0
  345. package/src/ma/ice9.ts +62 -0
  346. package/src/ma/index.ts +2 -0
  347. package/src/mc/index.ts +1 -0
  348. package/src/mc/tva.spec.ts +28 -0
  349. package/src/mc/tva.ts +67 -0
  350. package/src/md/idno.spec.ts +28 -0
  351. package/src/md/idno.ts +78 -0
  352. package/src/md/index.ts +1 -0
  353. package/src/me/index.ts +2 -0
  354. package/src/me/jmbg.ts +17 -0
  355. package/src/me/pib.spec.ts +158 -0
  356. package/src/me/pib.ts +77 -0
  357. package/src/mk/edb.spec.ts +50 -0
  358. package/src/mk/edb.ts +88 -0
  359. package/src/mk/index.ts +2 -0
  360. package/src/mk/jmbg.ts +17 -0
  361. package/src/mt/index.ts +1 -0
  362. package/src/mt/vat.spec.ts +28 -0
  363. package/src/mt/vat.ts +69 -0
  364. package/src/mu/index.ts +1 -0
  365. package/src/mu/nid.spec.ts +34 -0
  366. package/src/mu/nid.ts +89 -0
  367. package/src/mx/banks.ts +658 -0
  368. package/src/mx/clabe.spec.ts +68 -0
  369. package/src/mx/clabe.ts +105 -0
  370. package/src/mx/curp.spec.ts +28 -0
  371. package/src/mx/curp.ts +261 -0
  372. package/src/mx/index.ts +3 -0
  373. package/src/mx/rfc.spec.ts +69 -0
  374. package/src/mx/rfc.ts +193 -0
  375. package/src/my/index.ts +1 -0
  376. package/src/my/nric.spec.ts +40 -0
  377. package/src/my/nric.ts +91 -0
  378. package/src/nl/bsn.spec.ts +68 -0
  379. package/src/nl/bsn.ts +81 -0
  380. package/src/nl/btw.spec.ts +40 -0
  381. package/src/nl/btw.ts +95 -0
  382. package/src/nl/index.ts +3 -0
  383. package/src/nl/onderwijsnummer.spec.ts +34 -0
  384. package/src/nl/onderwijsnummer.ts +77 -0
  385. package/src/no/fodselsnummer.spec.ts +56 -0
  386. package/src/no/fodselsnummer.ts +118 -0
  387. package/src/no/index.ts +4 -0
  388. package/src/no/kontonr.spec.ts +34 -0
  389. package/src/no/kontonr.ts +84 -0
  390. package/src/no/mva.spec.ts +28 -0
  391. package/src/no/mva.ts +80 -0
  392. package/src/no/orgnr.spec.ts +28 -0
  393. package/src/no/orgnr.ts +75 -0
  394. package/src/nz/bank.spec.ts +28 -0
  395. package/src/nz/bank.ts +238 -0
  396. package/src/nz/index.ts +2 -0
  397. package/src/nz/ird.spec.ts +34 -0
  398. package/src/nz/ird.ts +102 -0
  399. package/src/pe/ce.spec.ts +46 -0
  400. package/src/pe/ce.ts +61 -0
  401. package/src/pe/cui.spec.ts +28 -0
  402. package/src/pe/cui.ts +85 -0
  403. package/src/pe/index.ts +3 -0
  404. package/src/pe/ruc.spec.ts +46 -0
  405. package/src/pe/ruc.ts +84 -0
  406. package/src/pk/cnic.spec.ts +34 -0
  407. package/src/pk/cnic.ts +97 -0
  408. package/src/pk/index.ts +2 -0
  409. package/src/pk/ntn.spec.ts +22 -0
  410. package/src/pk/ntn.ts +65 -0
  411. package/src/pl/index.ts +3 -0
  412. package/src/pl/nip.spec.ts +34 -0
  413. package/src/pl/nip.ts +74 -0
  414. package/src/pl/pesel.spec.ts +34 -0
  415. package/src/pl/pesel.ts +97 -0
  416. package/src/pl/regon.spec.ts +52 -0
  417. package/src/pl/regon.ts +88 -0
  418. package/src/pt/cc.spec.ts +43 -0
  419. package/src/pt/cc.ts +74 -0
  420. package/src/pt/index.ts +3 -0
  421. package/src/pt/nif.spec.ts +28 -0
  422. package/src/pt/nif.ts +78 -0
  423. package/src/pt/nipc.ts +27 -0
  424. package/src/py/cedula.spec.ts +46 -0
  425. package/src/py/cedula.ts +73 -0
  426. package/src/py/index.ts +2 -0
  427. package/src/py/ruc.spec.ts +40 -0
  428. package/src/py/ruc.ts +93 -0
  429. package/src/ro/cif.spec.ts +40 -0
  430. package/src/ro/cif.ts +62 -0
  431. package/src/ro/cnp.spec.ts +50 -0
  432. package/src/ro/cnp.ts +158 -0
  433. package/src/ro/cui.spec.ts +28 -0
  434. package/src/ro/cui.ts +83 -0
  435. package/src/ro/index.ts +4 -0
  436. package/src/ro/onrc.spec.ts +28 -0
  437. package/src/ro/onrc.ts +109 -0
  438. package/src/rs/index.ts +2 -0
  439. package/src/rs/jmbg.ts +16 -0
  440. package/src/rs/pib.spec.ts +28 -0
  441. package/src/rs/pib.ts +69 -0
  442. package/src/ru/index.ts +1 -0
  443. package/src/ru/inn.spec.ts +32 -0
  444. package/src/ru/inn.ts +106 -0
  445. package/src/se/index.ts +3 -0
  446. package/src/se/orgnr.spec.ts +28 -0
  447. package/src/se/orgnr.ts +68 -0
  448. package/src/se/personnummer.spec.ts +45 -0
  449. package/src/se/personnummer.ts +143 -0
  450. package/src/se/vat.spec.ts +28 -0
  451. package/src/se/vat.ts +73 -0
  452. package/src/sg/index.ts +1 -0
  453. package/src/sg/uen.spec.ts +46 -0
  454. package/src/sg/uen.ts +209 -0
  455. package/src/si/ddv.spec.ts +28 -0
  456. package/src/si/ddv.ts +76 -0
  457. package/src/si/emso.spec.ts +15 -0
  458. package/src/si/emso.ts +27 -0
  459. package/src/si/index.ts +3 -0
  460. package/src/si/jmbg.ts +20 -0
  461. package/src/sk/dph.spec.ts +28 -0
  462. package/src/sk/dph.ts +71 -0
  463. package/src/sk/index.ts +2 -0
  464. package/src/sk/rc.ts +12 -0
  465. package/src/sm/coe.spec.ts +34 -0
  466. package/src/sm/coe.ts +80 -0
  467. package/src/sm/index.ts +1 -0
  468. package/src/sv/index.ts +1 -0
  469. package/src/sv/nit.spec.ts +34 -0
  470. package/src/sv/nit.ts +117 -0
  471. package/src/th/idnr.spec.ts +41 -0
  472. package/src/th/idnr.ts +80 -0
  473. package/src/th/index.ts +3 -0
  474. package/src/th/moa.spec.ts +62 -0
  475. package/src/th/moa.ts +85 -0
  476. package/src/th/tin.spec.ts +77 -0
  477. package/src/th/tin.ts +56 -0
  478. package/src/tn/index.ts +1 -0
  479. package/src/tn/mf.spec.ts +37 -0
  480. package/src/tn/mf.ts +169 -0
  481. package/src/tr/index.ts +2 -0
  482. package/src/tr/tckimlik.spec.ts +40 -0
  483. package/src/tr/tckimlik.ts +87 -0
  484. package/src/tr/vkn.spec.ts +28 -0
  485. package/src/tr/vkn.ts +87 -0
  486. package/src/tw/ban.spec.ts +28 -0
  487. package/src/tw/ban.ts +67 -0
  488. package/src/tw/index.ts +5 -0
  489. package/src/tw/natid.spec.ts +28 -0
  490. package/src/tw/natid.ts +105 -0
  491. package/src/tw/tax_code.spec.ts +34 -0
  492. package/src/tw/tax_code.ts +98 -0
  493. package/src/tw/ubn.spec.ts +28 -0
  494. package/src/tw/ubn.ts +80 -0
  495. package/src/tw/ui.spec.ts +38 -0
  496. package/src/tw/ui.ts +107 -0
  497. package/src/types.ts +82 -0
  498. package/src/ua/edrpou.spec.ts +28 -0
  499. package/src/ua/edrpou.ts +88 -0
  500. package/src/ua/index.ts +2 -0
  501. package/src/ua/rntrc.spec.ts +28 -0
  502. package/src/ua/rntrc.ts +77 -0
  503. package/src/us/ein.spec.ts +28 -0
  504. package/src/us/ein.ts +179 -0
  505. package/src/us/index.ts +2 -0
  506. package/src/us/ssn.spec.ts +28 -0
  507. package/src/us/ssn.ts +117 -0
  508. package/src/util/checksum.spec.ts +70 -0
  509. package/src/util/checksum.ts +258 -0
  510. package/src/util/index.ts +13 -0
  511. package/src/util/isValidDate.spec.ts +49 -0
  512. package/src/util/isValidDate.ts +87 -0
  513. package/src/util/iso7064.spec.ts +17 -0
  514. package/src/util/iso7064.ts +8 -0
  515. package/src/util/pymod.ts +8 -0
  516. package/src/util/strings/char.ts +18 -0
  517. package/src/util/strings/clean.spec.ts +15 -0
  518. package/src/util/strings/clean.ts +305 -0
  519. package/src/util/strings/format.ts +18 -0
  520. package/src/util/strings/index.ts +5 -0
  521. package/src/util/strings/reverseString.ts +3 -0
  522. package/src/util/strings/splitAt.spec.ts +15 -0
  523. package/src/util/strings/splitAt.ts +16 -0
  524. package/src/uy/cedula.spec.ts +28 -0
  525. package/src/uy/cedula.ts +74 -0
  526. package/src/uy/index.ts +3 -0
  527. package/src/uy/nie.spec.ts +28 -0
  528. package/src/uy/nie.ts +84 -0
  529. package/src/uy/rut.spec.ts +34 -0
  530. package/src/uy/rut.ts +99 -0
  531. package/src/ve/index.ts +1 -0
  532. package/src/ve/rif.spec.ts +38 -0
  533. package/src/ve/rif.ts +92 -0
  534. package/src/vn/index.ts +1 -0
  535. package/src/vn/mst.spec.ts +40 -0
  536. package/src/vn/mst.ts +100 -0
  537. package/src/za/idnr.spec.ts +28 -0
  538. package/src/za/idnr.ts +84 -0
  539. package/src/za/index.ts +2 -0
  540. package/src/za/tin.spec.ts +28 -0
  541. package/src/za/tin.ts +75 -0
package/src/tw/ui.ts ADDED
@@ -0,0 +1,107 @@
1
+ /**
2
+ * UI Number
3
+ *
4
+ * The UI Number is shown on the “R.O.C. (Taiwan) Resident Certificate,” “Exit &
5
+ * Entry Permit Taiwan Republic of China,” or the “R.O.C. (Taiwan) UI No. Basic
6
+ * Information Form.”
7
+ *
8
+ * The UI Number issued by January 1, 2021 was a ten-digit code with
9
+ * two alphabetic letters followed by an eight-digit numeric string.
10
+ * The first alphabetic letter is the area code of the
11
+ * municipality/county/city by which the UI Number was issued. The
12
+ * second alphabetic letter represents gender: “A” or “C” for males,
13
+ * and “B” or “D” for females. The last number is a check digit. This
14
+ * kind of UI Number will be invalidated from January 1, 2031. The UI
15
+ * Number issued from January 2, 2021 is a ten-digit code with the
16
+ * first an alphabetic letter followed by a nine-digit numeric string.
17
+ * The alphabetic letter is the area code of the municipality/county/city
18
+ * by which the UI Number was issued. The leading number represents
19
+ * gender: “8” for males and “9” for females. The last number is a
20
+ * check digit.
21
+ *
22
+ * Sources:
23
+ * https://www.mof.gov.tw/Eng/download/16968
24
+ * https://en.wikipedia.org/wiki/National_identification_card_(Taiwan)
25
+ *
26
+ * PERSON
27
+ */
28
+
29
+ import { ValidateReturn } from '../types';
30
+ import * as exceptions from '../exceptions';
31
+ import { strings, weightedSum } from '../util';
32
+ import { ALPHABET } from './natid';
33
+
34
+ function clean(input: string) {
35
+ return strings.cleanUnicode(input, ' -');
36
+ }
37
+
38
+ // const OLD_FMT = /^[A-Z][ABCD]\d{8}$/;
39
+ // const NEW_FMT = /^[A-Z][89]\d{8}$/;
40
+
41
+ const impl = {
42
+ name: 'UI Number',
43
+ localName: '中華民國國民身分證',
44
+ abbreviation: 'UI',
45
+
46
+ compact(input: string): string {
47
+ const [value, err] = clean(input);
48
+
49
+ if (err) {
50
+ throw err;
51
+ }
52
+
53
+ return value;
54
+ },
55
+
56
+ format(input: string): string {
57
+ const [value] = clean(input);
58
+
59
+ return value;
60
+ },
61
+
62
+ validate(input: string): ValidateReturn {
63
+ const [value, error] = clean(input);
64
+
65
+ if (error) {
66
+ return { isValid: false, error };
67
+ }
68
+ if (value.length !== 10) {
69
+ return { isValid: false, error: new exceptions.InvalidLength() };
70
+ }
71
+
72
+ const [issuer, gender, code, check] = strings.splitAt(value, 1, 2, 9);
73
+
74
+ if (!strings.isalpha(issuer)) {
75
+ return { isValid: false, error: new exceptions.InvalidComponent() };
76
+ }
77
+ if (!['A', 'B', 'C', 'D', '8', '9'].includes(gender)) {
78
+ return { isValid: false, error: new exceptions.InvalidComponent() };
79
+ }
80
+ if (!strings.isdigits(code)) {
81
+ return { isValid: false, error: new exceptions.InvalidComponent() };
82
+ }
83
+ if (!strings.isdigits(check)) {
84
+ return { isValid: false, error: new exceptions.InvalidComponent() };
85
+ }
86
+
87
+ const sum = weightedSum(value, {
88
+ weights: [1, 9, 8, 7, 6, 5, 4, 3, 2, 1],
89
+ alphabet: ALPHABET,
90
+ modulus: 10,
91
+ });
92
+ if (sum % 10 !== 0) {
93
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
94
+ }
95
+
96
+ return {
97
+ isValid: true,
98
+ compact: value,
99
+ isIndividual: true,
100
+ isCompany: false,
101
+ };
102
+ },
103
+ };
104
+
105
+ export const { name, localName, abbreviation, validate, format, compact } =
106
+ impl;
107
+ export default impl;
package/src/types.ts ADDED
@@ -0,0 +1,82 @@
1
+ import { ValidationError } from './exceptions';
2
+
3
+ interface ValidateSuccess {
4
+ /**
5
+ * ID Is Valid
6
+ */
7
+ isValid: true;
8
+
9
+ /**
10
+ * Compact version of the ID
11
+ */
12
+ compact: string;
13
+
14
+ /**
15
+ * This ID identifies an individual
16
+ *
17
+ * Note: An ID may not positivily identify an individual or entity
18
+ */
19
+ isIndividual: boolean;
20
+
21
+ /**
22
+ * This ID identifies an entity
23
+ *
24
+ * Note: An ID may not positivily identify an individual or entity
25
+ */
26
+ isCompany: boolean;
27
+ }
28
+
29
+ interface ValidateFail {
30
+ /**
31
+ * TIN is not valid
32
+ */
33
+ isValid: false;
34
+
35
+ /**
36
+ * The validation error
37
+ */
38
+ error: ValidationError;
39
+ }
40
+
41
+ export type ValidateReturn = { error?: ValidationError } & (
42
+ | ValidateSuccess
43
+ | ValidateFail
44
+ );
45
+
46
+ export interface Validator {
47
+ /**
48
+ * The type of validation: ID, tin, vat, bank,
49
+ */
50
+
51
+ /**
52
+ * The validator name, or ID's expansion name in English
53
+ */
54
+ name: string;
55
+
56
+ /**
57
+ * The validator name, or ID's expansion name its local name
58
+ */
59
+ localName: string;
60
+
61
+ /**
62
+ * The short/acronym or abbreviation of the validator
63
+ */
64
+ abbreviation?: string;
65
+
66
+ /**
67
+ * Convert the number to the minimal representation.
68
+ * This strips the number of any valid separators and removes surrounding
69
+ * whitespace.
70
+ */
71
+ compact(value: string): string;
72
+
73
+ /**
74
+ * Reformat the number to the standard presentation format.
75
+ */
76
+ format(value: string): string;
77
+
78
+ /**
79
+ * Validate with error throws subclass of ValidationError
80
+ */
81
+ validate(value: string): ValidateReturn;
82
+ }
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './edrpou';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('ua/edrpou', () => {
5
+ it('format:32855961', () => {
6
+ const result = format('32855961');
7
+
8
+ expect(result).toEqual('32855961');
9
+ });
10
+
11
+ it('validate:32855961', () => {
12
+ const result = validate('32855961');
13
+
14
+ expect(result.isValid && result.compact).toEqual('32855961');
15
+ });
16
+
17
+ it('validate:12345', () => {
18
+ const result = validate('12345');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:32855968', () => {
24
+ const result = validate('32855968');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
@@ -0,0 +1,88 @@
1
+ /**
2
+ * ЄДРПОУ, EDRPOU (Identifier for enterprises and organizations in Ukraine).
3
+ *
4
+ * The ЄДРПОУ (Єдиного державного реєстру підприємств та організацій України,
5
+ * Unified State Register of Enterprises and Organizations of Ukraine) is a
6
+ * unique identification number of a legal entities in Ukraine. Th number
7
+ * consists of 8 digits, the last being a check digit.
8
+ *
9
+ * Source:
10
+ * https://uk.wikipedia.org/wiki/Код_ЄДРПОУ
11
+ * https://1cinfo.com.ua/Articles/Proverka_koda_po_EDRPOU.aspx
12
+ *
13
+ * ENTITY
14
+ */
15
+
16
+ import * as exceptions from '../exceptions';
17
+ import { strings, weightedSum } from '../util';
18
+ import { Validator, ValidateReturn } from '../types';
19
+
20
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
21
+ return strings.cleanUnicode(input, ' ');
22
+ }
23
+
24
+ const impl: Validator = {
25
+ name: 'Ukrainian Unified State Register of Enterprises and Organizations',
26
+ localName: 'Єдиного державного реєстру підприємств та організацій України',
27
+ abbreviation: 'ЄДРПОУ',
28
+ compact(input: string): string {
29
+ const [value, err] = clean(input);
30
+
31
+ if (err) {
32
+ throw err;
33
+ }
34
+
35
+ return value;
36
+ },
37
+
38
+ format(input: string): string {
39
+ const [value] = clean(input);
40
+
41
+ return value;
42
+ },
43
+
44
+ validate(input: string): ValidateReturn {
45
+ const [value, error] = clean(input);
46
+
47
+ if (error) {
48
+ return { isValid: false, error };
49
+ }
50
+ if (value.length !== 8) {
51
+ return { isValid: false, error: new exceptions.InvalidLength() };
52
+ }
53
+ if (!strings.isdigits(value)) {
54
+ return { isValid: false, error: new exceptions.InvalidFormat() };
55
+ }
56
+
57
+ const [front, check] = strings.splitAt(value, -1);
58
+
59
+ const weights = '345'.includes(front[0])
60
+ ? [7, 1, 2, 3, 4, 5, 6]
61
+ : [1, 2, 3, 4, 5, 6, 7];
62
+
63
+ let sum = weightedSum(front, {
64
+ weights,
65
+ modulus: 11,
66
+ });
67
+
68
+ if (sum === 10) {
69
+ sum = weightedSum(front, {
70
+ weights: weights.map(v => v + 2),
71
+ modulus: 11,
72
+ });
73
+ }
74
+ if (String(sum) !== check) {
75
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
76
+ }
77
+
78
+ return {
79
+ isValid: true,
80
+ compact: value,
81
+ isIndividual: false,
82
+ isCompany: true,
83
+ };
84
+ },
85
+ };
86
+
87
+ export const { name, localName, abbreviation, validate, format, compact } =
88
+ impl;
@@ -0,0 +1,2 @@
1
+ export * as edrpou from './edrpou';
2
+ export * as rntrc from './rntrc';
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './rntrc';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('ua/rntrc', () => {
5
+ it('format:1759013776', () => {
6
+ const result = format('1759013776');
7
+
8
+ expect(result).toEqual('1759013776');
9
+ });
10
+
11
+ it('validate:1759013776', () => {
12
+ const result = validate('1759013776');
13
+
14
+ expect(result.isValid && result.compact).toEqual('1759013776');
15
+ });
16
+
17
+ it('validate:12345678', () => {
18
+ const result = validate('12345678');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:1759013770', () => {
24
+ const result = validate('1759013770');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
@@ -0,0 +1,77 @@
1
+ /**
2
+ * РНОКПП, RNTRC (Individual taxpayer registration number in Ukraine).
3
+ *
4
+ * The РНОКПП (Реєстраційний номер облікової картки платника податків,
5
+ * registration number of the taxpayer's registration card) is a unique
6
+ * identification number that is provided to individuals within Ukraine. The
7
+ * number consists of 10 digits, the last being a check digit.
8
+ *
9
+ * More information:
10
+ * https://uk.wikipedia.org/wiki/РНОКПП
11
+ *
12
+ * PERSON
13
+ */
14
+
15
+ import * as exceptions from '../exceptions';
16
+ import { strings, weightedSum } from '../util';
17
+ import { Validator, ValidateReturn } from '../types';
18
+
19
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
20
+ return strings.cleanUnicode(input, ' ');
21
+ }
22
+
23
+ const impl: Validator = {
24
+ name: "Ukrainian Registration Number of the Taxpayer's Registration Card",
25
+ localName: 'Реєстраційний номер облікової картки платника податків',
26
+ abbreviation: 'РНОКПП',
27
+ compact(input: string): string {
28
+ const [value, err] = clean(input);
29
+
30
+ if (err) {
31
+ throw err;
32
+ }
33
+
34
+ return value;
35
+ },
36
+
37
+ format(input: string): string {
38
+ const [value] = clean(input);
39
+
40
+ return value;
41
+ },
42
+
43
+ validate(input: string): ValidateReturn {
44
+ const [value, error] = clean(input);
45
+
46
+ if (error) {
47
+ return { isValid: false, error };
48
+ }
49
+ if (value.length !== 10) {
50
+ return { isValid: false, error: new exceptions.InvalidLength() };
51
+ }
52
+ if (!strings.isdigits(value)) {
53
+ return { isValid: false, error: new exceptions.InvalidFormat() };
54
+ }
55
+
56
+ const [front, check] = strings.splitAt(value, -1);
57
+
58
+ const sum = weightedSum(front, {
59
+ weights: [-1, 5, 7, 9, 4, 6, 10, 5, 7],
60
+ modulus: 11,
61
+ });
62
+
63
+ if (String(sum % 10) !== check) {
64
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
65
+ }
66
+
67
+ return {
68
+ isValid: true,
69
+ compact: value,
70
+ isIndividual: true,
71
+ isCompany: false,
72
+ };
73
+ },
74
+ };
75
+
76
+ export const { name, localName, abbreviation, validate, format, compact } =
77
+ impl;
@@ -0,0 +1,28 @@
1
+ import { InvalidComponent, InvalidLength } from '../exceptions';
2
+ import { validate, format } from './ein';
3
+
4
+ describe('us/tin', () => {
5
+ it('format:536904399', () => {
6
+ const result = format('536904399');
7
+
8
+ expect(result).toEqual('53-6904399');
9
+ });
10
+
11
+ it('validate:123-45-6789', () => {
12
+ const result = validate('123-45-6789');
13
+
14
+ expect(result.isValid && result.compact).toEqual('123456789');
15
+ });
16
+
17
+ it('validate:1234567890123', () => {
18
+ const result = validate('1234567890123');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:00-3456789', () => {
24
+ const result = validate('00-3456789');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidComponent);
27
+ });
28
+ });
package/src/us/ein.ts ADDED
@@ -0,0 +1,179 @@
1
+ /**
2
+ * EIN (U.S. Employer Identification Number).
3
+ *
4
+ * The Employer Identification Number, also known as Federal Employer
5
+ * Identification Number (FEIN), is used to identify a business entity in the
6
+ * United States. It is issued to anyone that has to pay withholding taxes on
7
+ * employees.
8
+ *
9
+ * Sources:
10
+ * https://en.wikipedia.org/wiki/Social_Security_number
11
+ * https://www.ssa.gov/employer/verifySSN.htm
12
+ *
13
+ * INDIVIDUAL
14
+ */
15
+
16
+ import * as exceptions from '../exceptions';
17
+ import { strings } from '../util';
18
+ import { Validator, ValidateReturn } from '../types';
19
+
20
+ // https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes
21
+
22
+ const prefixes = [
23
+ // Brookhaven
24
+ '01',
25
+ '02',
26
+ '03',
27
+ '04',
28
+ '05',
29
+ '06',
30
+ '11',
31
+ '13',
32
+ '14',
33
+ '16',
34
+ '21',
35
+ '22',
36
+ '23',
37
+ '25',
38
+ '34',
39
+ '51',
40
+ '52',
41
+ '54',
42
+ '55',
43
+ '56',
44
+ '57',
45
+ '58',
46
+ '59',
47
+ '65',
48
+ // Andover
49
+ '10',
50
+ '12',
51
+ // Fresno"
52
+ '15',
53
+ '24',
54
+ // Internet
55
+ '20',
56
+ '26',
57
+ '27',
58
+ '45',
59
+ '46',
60
+ '47',
61
+ '81',
62
+ '82',
63
+ '83',
64
+ '84',
65
+ // Cincinnati
66
+ '30',
67
+ '32',
68
+ '35',
69
+ '36',
70
+ '37',
71
+ '38',
72
+ '61',
73
+ // Small Business Administration (SBA)
74
+ '31',
75
+ // Philadelphia
76
+ '33',
77
+ '39',
78
+ '41',
79
+ '42',
80
+ '43',
81
+ '46',
82
+ '48',
83
+ '62',
84
+ '63',
85
+ '64',
86
+ '66',
87
+ '68',
88
+ '71',
89
+ '72',
90
+ '73',
91
+ '74',
92
+ '75',
93
+ '76',
94
+ '77',
95
+ '85',
96
+ '86',
97
+ '87',
98
+ '88',
99
+ '91',
100
+ '92',
101
+ '93',
102
+ '98',
103
+ '99',
104
+ // Kansas City
105
+ '40',
106
+ '44',
107
+ // Austin
108
+ '50',
109
+ '53',
110
+ // Atlanta
111
+ '60',
112
+ '67',
113
+ // Ogden
114
+ '80',
115
+ '90',
116
+ // Memphis
117
+ '94',
118
+ '95',
119
+ ];
120
+
121
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
122
+ return strings.cleanUnicode(input, '- ');
123
+ }
124
+
125
+ const impl: Validator = {
126
+ name: 'U.S. Employer Identification Number',
127
+ localName: 'Employer Identification Number',
128
+ abbreviation: 'EIN',
129
+ compact(input: string): string {
130
+ const [value, err] = clean(input);
131
+
132
+ if (err) {
133
+ throw err;
134
+ }
135
+
136
+ return value;
137
+ },
138
+
139
+ format(input: string): string {
140
+ const [value] = clean(input);
141
+
142
+ return strings.splitAt(value, 2).join('-');
143
+ },
144
+
145
+ /**
146
+ * Check if the number is a valid EIN number.
147
+ * This checks the length, formatting and other contraints. It does not check
148
+ * for control letter.
149
+ */
150
+ validate(input: string): ValidateReturn {
151
+ const [value, error] = clean(input);
152
+
153
+ if (error) {
154
+ return { isValid: false, error };
155
+ }
156
+ if (value.length !== 9) {
157
+ return { isValid: false, error: new exceptions.InvalidLength() };
158
+ }
159
+ if (!strings.isdigits(value)) {
160
+ return { isValid: false, error: new exceptions.InvalidComponent() };
161
+ }
162
+ // if (invalidSSN.includes(value)) {
163
+ // return { isValid: false, error: new exceptions.InvalidComponent() };
164
+ // }
165
+ if (!prefixes.includes(value.substr(0, 2))) {
166
+ return { isValid: false, error: new exceptions.InvalidComponent() };
167
+ }
168
+
169
+ return {
170
+ isValid: true,
171
+ compact: value,
172
+ isIndividual: false,
173
+ isCompany: true,
174
+ };
175
+ },
176
+ };
177
+
178
+ export const { name, localName, abbreviation, validate, format, compact } =
179
+ impl;
@@ -0,0 +1,2 @@
1
+ export * as ein from './ein';
2
+ export * as ssn from './ssn';
@@ -0,0 +1,28 @@
1
+ import { InvalidComponent, InvalidLength } from '../exceptions';
2
+ import { validate, format } from './ssn';
3
+
4
+ describe('us/ssn', () => {
5
+ it('format:536904399', () => {
6
+ const result = format('536904399');
7
+
8
+ expect(result).toEqual('536-90-4399');
9
+ });
10
+
11
+ it('validate:536-90-4399', () => {
12
+ const result = validate('536-90-4399');
13
+
14
+ expect(result.isValid && result.compact).toEqual('536904399');
15
+ });
16
+
17
+ it('validate:1234567890123', () => {
18
+ const result = validate('1234567890123');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:189092294', () => {
24
+ const result = validate('189092294');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidComponent);
27
+ });
28
+ });