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
@@ -0,0 +1,43 @@
1
+ import { validate, format } from './cc';
2
+ import { InvalidLength, InvalidChecksum, InvalidFormat } from '../exceptions';
3
+
4
+ describe('pt/cc', () => {
5
+ it('format:000000000ZZ4', () => {
6
+ const result = format('000000000ZZ4');
7
+
8
+ expect(result).toEqual('00000000 0 ZZ4');
9
+ });
10
+
11
+ it('validate:10000000 0 ZZ2', () => {
12
+ const result = validate('10000000 0 ZZ2');
13
+
14
+ expect(result.isValid && result.compact).toEqual('100000000ZZ2');
15
+ });
16
+
17
+ test.each(['04521224 4 ZZ 7', '054546796ZY7', '101490801ZY0'])(
18
+ 'validate:%s',
19
+ value => {
20
+ const result = validate(value);
21
+
22
+ expect(result.isValid).toEqual(true);
23
+ },
24
+ );
25
+
26
+ it('validate:00000000 0 ZZ', () => {
27
+ const result = validate('00000000 0 ZZ');
28
+
29
+ expect(result.error).toBeInstanceOf(InvalidLength);
30
+ });
31
+
32
+ it('validate:00000000 A ZZ4', () => {
33
+ const result = validate('00000000 A ZZ4');
34
+
35
+ expect(result.error).toBeInstanceOf(InvalidFormat);
36
+ });
37
+
38
+ it('validate:10000000 0 ZZ4', () => {
39
+ const result = validate('10000000 0 ZZ4');
40
+
41
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
42
+ });
43
+ });
package/src/pt/cc.ts ADDED
@@ -0,0 +1,74 @@
1
+ /**
2
+ * CC (Número de Cartão de Cidadão, Portuguese Identity number).
3
+ *
4
+ * The Portuguese Identity Number is alphanumeric and consists of the numeric
5
+ * Número de Identificação Civil, a two-letter version and a check digit.
6
+ *
7
+ * Source
8
+ * https://pt.wikipedia.org/wiki/Cartão_de_cidadão
9
+ * https://www.autenticacao.gov.pt/documents/20126/115760/Validação+de+Número+de+Documento+do+Cartão+de+Cidadão.pdf
10
+ *
11
+ * PERSON
12
+ */
13
+
14
+ import * as exceptions from '../exceptions';
15
+ import { strings } from '../util';
16
+ import { Validator, ValidateReturn } from '../types';
17
+ import { luhnChecksumValidate } from '../util/checksum';
18
+
19
+ const ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
20
+ const validRe = /^\d{9}[A-Z0-9]{2}\d$/i;
21
+
22
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
23
+ return strings.cleanUnicode(input, ' ');
24
+ }
25
+
26
+ const impl: Validator = {
27
+ name: 'Portuguese Identity number',
28
+ localName: 'Número de Cartão de Cidadão',
29
+ abbreviation: 'CC',
30
+
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, 8, 9).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 !== 12) {
54
+ return { isValid: false, error: new exceptions.InvalidLength() };
55
+ }
56
+ if (!validRe.test(value)) {
57
+ return { isValid: false, error: new exceptions.InvalidFormat() };
58
+ }
59
+
60
+ if (!luhnChecksumValidate(value, ALPHABET)) {
61
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
62
+ }
63
+
64
+ return {
65
+ isValid: true,
66
+ compact: value,
67
+ isIndividual: '1234'.includes(value[0]),
68
+ isCompany: !'1234'.includes(value[0]),
69
+ };
70
+ },
71
+ };
72
+
73
+ export const { name, localName, abbreviation, validate, format, compact } =
74
+ impl;
@@ -0,0 +1,3 @@
1
+ export * as cc from './cc';
2
+ export * as nif from './nif';
3
+ export * as nipc from './nipc';
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './nif';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('pt/nif', () => {
5
+ it('format:PT 501 964 843', () => {
6
+ const result = format('PT 501 964 843');
7
+
8
+ expect(result).toEqual('501 964 843');
9
+ });
10
+
11
+ it('validate:PT 501 964 843', () => {
12
+ const result = validate('PT 501 964 843');
13
+
14
+ expect(result.isValid && result.compact).toEqual('501964843');
15
+ });
16
+
17
+ it('validate:12345678', () => {
18
+ const result = validate('12345678');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:PT 501 964 842', () => {
24
+ const result = validate('PT 501 964 842');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
package/src/pt/nif.ts ADDED
@@ -0,0 +1,78 @@
1
+ /**
2
+ * NIF (Número de identificação fiscal, Portuguese VAT number).
3
+ *
4
+ * The NIF (Número de identificação fiscal, NIPC, Número de Identificação de
5
+ * Pessoa Colectiva) is used for VAT purposes. It is a 9-digit number with a
6
+ * simple checksum. The first digit depends on what the number refers to,
7
+ * e.g.: 1-3 are regular people, 5 are companies.
8
+ *
9
+ * Source
10
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Portugal-TIN.pdf
11
+ *
12
+ * PERSON/ENTITY
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, ' -.', 'PT');
21
+ }
22
+
23
+ const impl: Validator = {
24
+ name: 'Portuguese Tax Identification Number',
25
+ localName: 'Número de Identificação Fiscal',
26
+ abbreviation: 'NIF',
27
+
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, 6).join(' ');
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 !== 9) {
51
+ return { isValid: false, error: new exceptions.InvalidLength() };
52
+ }
53
+ if (!strings.isdigits(value) || value[0] === '0') {
54
+ return { isValid: false, error: new exceptions.InvalidFormat() };
55
+ }
56
+
57
+ const [front, check] = strings.splitAt(value, -1);
58
+
59
+ const sum = weightedSum(front, {
60
+ weights: [9, 8, 7, 6, 5, 4, 3, 2, 1],
61
+ modulus: 11,
62
+ });
63
+
64
+ if (String((11 - sum) % 10) !== check) {
65
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
66
+ }
67
+
68
+ return {
69
+ isValid: true,
70
+ compact: value,
71
+ isIndividual: '1234'.includes(value[0]),
72
+ isCompany: !'1234'.includes(value[0]),
73
+ };
74
+ },
75
+ };
76
+
77
+ export const { name, localName, abbreviation, validate, format, compact } =
78
+ impl;
package/src/pt/nipc.ts ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * NIPC (Número de Identificação de Pessoa Coletiva, Portuguese VAT number).
3
+ *
4
+ * The NIF (Número de identificação fiscal, NIPC, Número de Identificação de
5
+ * Pessoa Colectiva) is used for VAT purposes. It is a 9-digit number with a
6
+ * simple checksum. The first digit depends on what the number refers to,
7
+ * e.g.: 1-3 are regular people, 5 are companies.
8
+ *
9
+ * Source
10
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Portugal-TIN.pdf
11
+ *
12
+ * PERSON/ENTITY
13
+ */
14
+
15
+ import * as nif from './nif';
16
+
17
+ import { Validator } from '../types';
18
+
19
+ const impl: Validator = {
20
+ ...nif,
21
+ name: 'Portuguese Legal Person Identification Number',
22
+ localName: 'Número de Identificação de Pessoa Colectiva',
23
+ abbreviation: 'NIPC',
24
+ };
25
+
26
+ export const { name, localName, abbreviation, validate, format, compact } =
27
+ impl;
@@ -0,0 +1,46 @@
1
+ import { validate, format } from './cedula';
2
+ import { InvalidComponent, InvalidLength } from '../exceptions';
3
+
4
+ describe('py/ci', () => {
5
+ it('format:6.001.234', () => {
6
+ const result = format('6.001.234');
7
+
8
+ expect(result).toEqual('6001234');
9
+ });
10
+
11
+ it('validate:15000', () => {
12
+ const result = validate('15000');
13
+
14
+ expect(result.isValid && result.compact).toEqual('15000');
15
+ });
16
+
17
+ it('validate:3 785 123', () => {
18
+ const result = validate('3 785 123');
19
+
20
+ expect(result.isValid && result.compact).toEqual('3785123');
21
+ });
22
+
23
+ it('validate:6-001-234', () => {
24
+ const result = validate('6-001-234');
25
+
26
+ expect(result.isValid && result.compact).toEqual('6001234');
27
+ });
28
+
29
+ it('validate:660.3', () => {
30
+ const result = validate('660.3');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+
35
+ it('validate:26601234', () => {
36
+ const result = validate('26601234');
37
+
38
+ expect(result.error).toBeInstanceOf(InvalidLength);
39
+ });
40
+
41
+ it('validate:266012A', () => {
42
+ const result = validate('266012A');
43
+
44
+ expect(result.error).toBeInstanceOf(InvalidComponent);
45
+ });
46
+ });
@@ -0,0 +1,73 @@
1
+ /**
2
+ *
3
+ * Paraguay Identity Card numbers
4
+ *
5
+ * CI number (Cedula de la Identidad Civil).
6
+ *
7
+ * The Cedula de la Identidad (CI) is issued by the National Police and is compulsory for all citizens
8
+ *
9
+ * The CI number is 5-7 digits.
10
+ *
11
+ * Sources:
12
+ * https://es.wikipedia.org/wiki/C%C3%A9dula_de_Identidad_(Paraguay)
13
+ *
14
+ * PERSON
15
+ */
16
+
17
+ import * as exceptions from '../exceptions';
18
+ import { strings } from '../util';
19
+ import { Validator, ValidateReturn } from '../types';
20
+
21
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
22
+ return strings.cleanUnicode(input, ' .-');
23
+ }
24
+
25
+ const impl: Validator = {
26
+ name: 'Paraguay CI Number',
27
+ localName: 'Cedula de la Identidad civil',
28
+ abbreviation: 'CI',
29
+ compact(input: string): string {
30
+ const [value, err] = clean(input);
31
+
32
+ if (err) {
33
+ throw err;
34
+ }
35
+
36
+ return value;
37
+ },
38
+
39
+ format(input: string): string {
40
+ const [value] = clean(input);
41
+
42
+ return value;
43
+ },
44
+
45
+ /**
46
+ * Check if the number is a valid CI.
47
+ * This checks the length, formatting and other contraints.
48
+ *
49
+ */
50
+ validate(input: string): ValidateReturn {
51
+ const [value, error] = clean(input);
52
+
53
+ if (error) {
54
+ return { isValid: false, error };
55
+ }
56
+ if (value.length < 5 || value.length > 7) {
57
+ return { isValid: false, error: new exceptions.InvalidLength() };
58
+ }
59
+ if (!strings.isdigits(value)) {
60
+ return { isValid: false, error: new exceptions.InvalidComponent() };
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 ruc from './ruc';
2
+ export * as cedula from './cedula';
@@ -0,0 +1,40 @@
1
+ import { validate, format } from './ruc';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('py/ruc', () => {
5
+ it('format:800280610', () => {
6
+ const result = format('80028061 0');
7
+
8
+ expect(result).toEqual('80028061-0');
9
+ });
10
+
11
+ it('validate:80028061-0', () => {
12
+ const result = validate('80028061-0');
13
+
14
+ expect(result.isValid && result.compact).toEqual('800280610');
15
+ });
16
+
17
+ it('validate:8765432-6', () => {
18
+ const result = validate('8765432-6');
19
+
20
+ expect(result.isValid && result.compact).toEqual('87654326');
21
+ });
22
+
23
+ it('validate:2660-3', () => {
24
+ const result = validate('2660-3');
25
+
26
+ expect(result.isValid && result.compact).toEqual('26603');
27
+ });
28
+
29
+ it('validate:660-3', () => {
30
+ const result = validate('660-3');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+
35
+ it('validate:2660-4', () => {
36
+ const result = validate('2660-4');
37
+
38
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
39
+ });
40
+ });
package/src/py/ruc.ts ADDED
@@ -0,0 +1,93 @@
1
+ /**
2
+ *
3
+ * Paraguay RUC numbers
4
+ *
5
+ * RUC number (Registro Único del Contribuyentes, Paraguay tax number).
6
+ *
7
+ * The Registro Único del Contribuyente (RUC) is the unique taxpayer registry
8
+ * that maintains identification numbers for all persons (national or foreign)
9
+ * and legal entities in Paraguay.
10
+ *
11
+ * The RUC number for legal entities consists of 8 digits starting after
12
+ * 80000000. Number for residents and foreigners are up to 9 digits. The last
13
+ * digit is a check digit.
14
+ *
15
+ * Sources:
16
+ * https://www.ruc.com.py/
17
+ *
18
+ * PERSON/ENTITY
19
+ */
20
+
21
+ import * as exceptions from '../exceptions';
22
+ import { strings } from '../util';
23
+ import { Validator, ValidateReturn } from '../types';
24
+
25
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
26
+ return strings.cleanUnicode(input, ' -');
27
+ }
28
+
29
+ const impl: Validator = {
30
+ name: 'Paraguay Tax Number',
31
+ localName: 'Registro Único del Contribuyentes',
32
+ abbreviation: 'RUC',
33
+ compact(input: string): string {
34
+ const [value, err] = clean(input);
35
+
36
+ if (err) {
37
+ throw err;
38
+ }
39
+
40
+ return value;
41
+ },
42
+
43
+ format(input: string): string {
44
+ const [value] = clean(input);
45
+
46
+ return `${value.substr(0, value.length - 1)}-${value.substr(
47
+ value.length - 1,
48
+ )}`;
49
+ },
50
+
51
+ /**
52
+ * Check if the number is a valid RUC.
53
+ * This checks the length, formatting and other contraints. It does not check
54
+ * for control letter.
55
+ */
56
+ validate(input: string): ValidateReturn {
57
+ const [value, error] = clean(input);
58
+
59
+ if (error) {
60
+ return { isValid: false, error };
61
+ }
62
+ if (value.length < 5 || value.length > 9) {
63
+ return { isValid: false, error: new exceptions.InvalidLength() };
64
+ }
65
+ if (!strings.isdigits(value)) {
66
+ return { isValid: false, error: new exceptions.InvalidComponent() };
67
+ }
68
+
69
+ const [front, check] = strings.splitAt(value, value.length - 1);
70
+
71
+ const sum = front
72
+ .split('')
73
+ .reverse()
74
+ .map(x => parseInt(x, 10))
75
+ .reduce((acc, digit, idx) => acc + digit * (idx + 2), 0);
76
+
77
+ const digit = String((11 - (sum % 11)) % 10);
78
+
79
+ if (check !== digit) {
80
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
81
+ }
82
+
83
+ return {
84
+ isValid: true,
85
+ compact: value,
86
+ isIndividual: parseInt(front, 10) < 80000000,
87
+ isCompany: front.length === 8 && parseInt(front, 10) > 80000000,
88
+ };
89
+ },
90
+ };
91
+
92
+ export const { name, localName, abbreviation, validate, format, compact } =
93
+ impl;
@@ -0,0 +1,40 @@
1
+ import { validate, format } from './cif';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('ro/cif', () => {
5
+ it('format:RO 185 472 90', () => {
6
+ const result = format('RO 185 472 90');
7
+
8
+ expect(result).toEqual('185 472 90');
9
+ });
10
+
11
+ it('validate:RO 185 472 90', () => {
12
+ const result = validate('RO 185 472 90');
13
+
14
+ expect(result.isValid && result.compact).toEqual('18547290');
15
+ });
16
+
17
+ it('validate:185 472 90', () => {
18
+ const result = validate('185 472 90');
19
+
20
+ expect(result.isValid && result.compact).toEqual('18547290');
21
+ });
22
+
23
+ it('validate:1630615123457', () => {
24
+ const result = validate('1630615123457');
25
+
26
+ expect(result.isValid && result.compact).toEqual('1630615123457');
27
+ });
28
+
29
+ it('validate:123456789012', () => {
30
+ const result = validate('123456789012');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+
35
+ it('validate:185 472 91', () => {
36
+ const result = validate('185 472 91');
37
+
38
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
39
+ });
40
+ });
package/src/ro/cif.ts ADDED
@@ -0,0 +1,62 @@
1
+ /**
2
+ * CIF (Cod de înregistrare în scopuri de TVA, Romanian VAT number).
3
+ *
4
+ * The Romanian CIF is used for VAT purposes and can be from 2 to 10 digits long.
5
+ *
6
+ * PERSON/ENTITY
7
+ */
8
+
9
+ import * as exceptions from '../exceptions';
10
+ import { strings } from '../util';
11
+ import { Validator, ValidateReturn } from '../types';
12
+ import { validate as cnpValidate } from './cnp';
13
+ import { validate as cuiValidate, format as cuiFormat } from './cui';
14
+
15
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
16
+ return strings.cleanUnicode(input, ' -', 'RO');
17
+ }
18
+
19
+ const impl: Validator = {
20
+ name: 'Romanian VAT Number',
21
+ localName: 'Codul de Identificare Fiscală',
22
+ abbreviation: 'CIF',
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 cuiFormat(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 (!strings.isdigits(value)) {
46
+ return { isValid: false, error: new exceptions.InvalidFormat() };
47
+ }
48
+
49
+ if (value.length === 13) {
50
+ // apparently a CNP can also be used (however, not all sources agree)
51
+ return cnpValidate(value);
52
+ }
53
+ if (value.length >= 2 && value.length <= 10) {
54
+ return cuiValidate(value);
55
+ }
56
+
57
+ return { isValid: false, error: new exceptions.InvalidLength() };
58
+ },
59
+ };
60
+
61
+ export const { name, localName, abbreviation, validate, format, compact } =
62
+ impl;
@@ -0,0 +1,50 @@
1
+ import { validate, format } from './cnp';
2
+ import {
3
+ InvalidLength,
4
+ InvalidChecksum,
5
+ InvalidComponent,
6
+ } from '../exceptions';
7
+
8
+ describe('ro/cnp', () => {
9
+ it('format:1630615123457', () => {
10
+ const result = format('1630615123457');
11
+
12
+ expect(result).toEqual('1630615123457');
13
+ });
14
+
15
+ it('validate:1630615123457', () => {
16
+ const result = validate('1630615123457');
17
+
18
+ expect(result.isValid && result.compact).toEqual('1630615123457');
19
+ });
20
+
21
+ it('validate:12345678', () => {
22
+ const result = validate('12345678');
23
+
24
+ expect(result.error).toBeInstanceOf(InvalidLength);
25
+ });
26
+
27
+ it('validate:1630615123458', () => {
28
+ const result = validate('1630615123458');
29
+
30
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
31
+ });
32
+
33
+ it('validate:0800101221142', () => {
34
+ const result = validate('0800101221142');
35
+
36
+ expect(result.error).toBeInstanceOf(InvalidComponent);
37
+ });
38
+
39
+ it('validate:0800101228842', () => {
40
+ const result = validate('0800101228842');
41
+
42
+ expect(result.error).toBeInstanceOf(InvalidComponent);
43
+ });
44
+
45
+ it('validate:1632215123457', () => {
46
+ const result = validate('1632215123457');
47
+
48
+ expect(result.error).toBeInstanceOf(InvalidComponent);
49
+ });
50
+ });