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/pe/ruc.ts ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * RUC (Registro Único de Contribuyentes, Peruvian company tax number).
3
+ *
4
+ * The RUC (Registro Único de Contribuyentes) is the tax number of Peru assigned
5
+ * to legal and natural persons. The number consists of 11 digits, the first two
6
+ * indicate the kind of number, for personal numbers it is followed by the DNI
7
+ * and a check digit.
8
+ *
9
+ * Source
10
+ * http://www.sunat.gob.pe/legislacion/ruc/
11
+ * https://consultarelruc.pe/
12
+ *
13
+ * ENTITY TAX
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: 'Peruvian Company Tax Number',
26
+ localName: 'Registro Único de Contribuyentes',
27
+ abbreviation: 'RUC',
28
+
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
+ if (value.length === 9) {
43
+ return strings.splitAt(value, 8).join('-');
44
+ }
45
+ return value;
46
+ },
47
+
48
+ validate(input: string): ValidateReturn {
49
+ const [value, error] = clean(input);
50
+
51
+ if (error) {
52
+ return { isValid: false, error };
53
+ }
54
+ if (value.length !== 11) {
55
+ return { isValid: false, error: new exceptions.InvalidLength() };
56
+ }
57
+ if (!strings.isdigits(value)) {
58
+ return { isValid: false, error: new exceptions.InvalidFormat() };
59
+ }
60
+ if (!['10', '15', '16', '17', '20'].includes(value.substr(0, 2))) {
61
+ return { isValid: false, error: new exceptions.InvalidComponent() };
62
+ }
63
+
64
+ const [front, check] = strings.splitAt(value, 10);
65
+ const sum = weightedSum(front, {
66
+ weights: [5, 4, 3, 2, 7, 6, 5, 4, 3, 2],
67
+ modulus: 11,
68
+ });
69
+
70
+ if (String((11 - sum) % 10) !== check) {
71
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
72
+ }
73
+
74
+ return {
75
+ isValid: true,
76
+ compact: value,
77
+ isIndividual: false,
78
+ isCompany: true,
79
+ };
80
+ },
81
+ };
82
+
83
+ export const { name, localName, abbreviation, validate, format, compact } =
84
+ impl;
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './cnic';
2
+ import { InvalidComponent, InvalidLength } from '../exceptions';
3
+
4
+ describe('pk/cnic', () => {
5
+ it('format:5410498905786', () => {
6
+ const result = format('5410498905786');
7
+
8
+ expect(result).toEqual('54104-9890578-6');
9
+ });
10
+
11
+ test.each(['54104-9890578-6', '34201-0891231-8'])('validate:%s', value => {
12
+ const result = validate(value);
13
+
14
+ expect(result.isValid).toEqual(true);
15
+ });
16
+
17
+ it('validate_compact:54104-9890578-6', () => {
18
+ const result = validate('54104-9890578-6');
19
+
20
+ expect(result.isValid && result.compact).toEqual('5410498905786');
21
+ });
22
+
23
+ test.each(['34201-0891231-0', '94201-0891231-8'])('validate:%s', value => {
24
+ const result = validate(value);
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidComponent);
27
+ });
28
+
29
+ it('validate:54104-9890578', () => {
30
+ const result = validate('54104-9890578');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+ });
package/src/pk/cnic.ts ADDED
@@ -0,0 +1,97 @@
1
+ /**
2
+ * CNIC (Pakistan Computerize National Identiy Card)
3
+ *
4
+ * Pakastan National Identification Number (CNIC) is issued to individuals and legal entities for
5
+ * tax purposes. The number consists of 13 digits.
6
+ *
7
+ * The CNIC (Computerised National Identity Card, قومی شناختی کارڈ) or SNIC
8
+ * (Smart National Identity Card) is issued by by Pakistan's NADRA (National
9
+ * Database and Registration Authority) to citizens of 18 years or older.
10
+ * The number consists of 13 digits and encodes the person's locality (5
11
+ * digits), followed by 7 digit serial number an a single digit indicating
12
+ * gender.
13
+ *
14
+ * Sources
15
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Pakistan-TIN.pdf
16
+ * https://en.wikipedia.org/wiki/CNIC_(Pakistan)
17
+ * https://www.nadra.gov.pk/identity/identity-cnic/
18
+ *
19
+ * PERSON
20
+ */
21
+
22
+ import * as exceptions from '../exceptions';
23
+ import { strings } from '../util';
24
+ import { Validator, ValidateReturn } from '../types';
25
+
26
+ const PROVINCES = {
27
+ '1': 'Khyber Pakhtunkhwa',
28
+ '2': 'FATA',
29
+ '3': 'Punjab',
30
+ '4': 'Sindh',
31
+ '5': 'Balochistan',
32
+ '6': 'Islamabad',
33
+ '7': 'Gilgit-Baltistan',
34
+ };
35
+ const VALID_PROVINCES = Object.keys(PROVINCES);
36
+
37
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
38
+ return strings.cleanUnicode(input, ' -');
39
+ }
40
+
41
+ const impl: Validator = {
42
+ name: 'Pakistani Computerized National Identification Number',
43
+ localName: 'Computerized National Identification Number',
44
+ abbreviation: 'CNIC',
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 strings.splitAt(value, 5, 12).join('-');
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 !== 13) {
69
+ return { isValid: false, error: new exceptions.InvalidLength() };
70
+ }
71
+ if (!strings.isdigits(value)) {
72
+ return { isValid: false, error: new exceptions.InvalidFormat() };
73
+ }
74
+
75
+ // Invalid Gender (male = 13579, female = 2468)
76
+ if (value[12] === '0') {
77
+ return { isValid: false, error: new exceptions.InvalidComponent() };
78
+ }
79
+
80
+ if (!VALID_PROVINCES.includes(value[0])) {
81
+ return { isValid: false, error: new exceptions.InvalidComponent() };
82
+ }
83
+ // if (value[12] === '0') {
84
+ // return { isValid: false, error: new exceptions.InvalidComponent() };
85
+ // }
86
+
87
+ return {
88
+ isValid: true,
89
+ compact: value,
90
+ isIndividual: true,
91
+ isCompany: false,
92
+ };
93
+ },
94
+ };
95
+
96
+ export const { name, localName, abbreviation, validate, format, compact } =
97
+ impl;
@@ -0,0 +1,2 @@
1
+ export * as cnic from './cnic';
2
+ export * as ntn from './ntn';
@@ -0,0 +1,22 @@
1
+ import { validate, format } from './ntn';
2
+ import { InvalidLength } from '../exceptions';
3
+
4
+ describe('pk/ntn', () => {
5
+ it('format:1234567', () => {
6
+ const result = format('1234567');
7
+
8
+ expect(result).toEqual('1234567');
9
+ });
10
+
11
+ it('validate:1234567', () => {
12
+ const result = validate('1234567');
13
+
14
+ expect(result.isValid && result.compact).toEqual('1234567');
15
+ });
16
+
17
+ it('validate:123456', () => {
18
+ const result = validate('123456');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+ });
package/src/pk/ntn.ts ADDED
@@ -0,0 +1,65 @@
1
+ /**
2
+ * NTN (Pakistan Tax Identification Number)
3
+ *
4
+ * Pakastan National Identification Number (CNIC) is issued to individuals and legal entities for
5
+ * tax purposes. The number consists of 11 digits.
6
+ *
7
+ * Source
8
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Pakistan-TIN.pdf
9
+ *
10
+ * ENTITY
11
+ */
12
+
13
+ import * as exceptions from '../exceptions';
14
+ import { strings } from '../util';
15
+ import { Validator, ValidateReturn } from '../types';
16
+
17
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
18
+ return strings.cleanUnicode(input, ' -');
19
+ }
20
+
21
+ const impl: Validator = {
22
+ name: 'Pakistani National Tax Number',
23
+ localName: 'National Tax Number',
24
+ abbreviation: 'NTN',
25
+
26
+ compact(input: string): string {
27
+ const [value, err] = clean(input);
28
+
29
+ if (err) {
30
+ throw err;
31
+ }
32
+
33
+ return value;
34
+ },
35
+
36
+ format(input: string): string {
37
+ const [value] = clean(input);
38
+
39
+ return value;
40
+ },
41
+
42
+ validate(input: string): ValidateReturn {
43
+ const [value, error] = clean(input);
44
+
45
+ if (error) {
46
+ return { isValid: false, error };
47
+ }
48
+ if (value.length !== 7) {
49
+ return { isValid: false, error: new exceptions.InvalidLength() };
50
+ }
51
+ if (!strings.isdigits(value)) {
52
+ return { isValid: false, error: new exceptions.InvalidFormat() };
53
+ }
54
+
55
+ return {
56
+ isValid: true,
57
+ compact: value,
58
+ isIndividual: false,
59
+ isCompany: true,
60
+ };
61
+ },
62
+ };
63
+
64
+ export const { name, localName, abbreviation, validate, format, compact } =
65
+ impl;
@@ -0,0 +1,3 @@
1
+ export * as nip from './nip';
2
+ export * as pesel from './pesel';
3
+ export * as regon from './regon';
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './nip';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('pl/nip', () => {
5
+ it('format:PL 8567346215', () => {
6
+ const result = format('PL 8567346215');
7
+
8
+ expect(result).toEqual('8567346215');
9
+ });
10
+
11
+ it('validate:PL 8567346215', () => {
12
+ const result = validate('PL 8567346215');
13
+
14
+ expect(result.isValid && result.compact).toEqual('8567346215');
15
+ });
16
+
17
+ it('validate:0000002000', () => {
18
+ const result = validate('0000002000');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
21
+ });
22
+
23
+ it('validate:12345678', () => {
24
+ const result = validate('12345678');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+
29
+ it('validate:PL 8567346216', () => {
30
+ const result = validate('PL 8567346216');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
33
+ });
34
+ });
package/src/pl/nip.ts ADDED
@@ -0,0 +1,74 @@
1
+ /**
2
+ * NIP (Numer Identyfikacji Podatkowej, Polish VAT number).
3
+ *
4
+ * The NIP (Numer Identyfikacji Podatkowej) number consists of 10 digit with
5
+ * a straightforward weighted checksum.
6
+ *
7
+ * Source
8
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Poland-TIN.pdf
9
+ *
10
+ * ENTITY
11
+ */
12
+
13
+ import * as exceptions from '../exceptions';
14
+ import { strings } from '../util';
15
+ import { Validator, ValidateReturn } from '../types';
16
+ import { weightedSum } from '../util/checksum';
17
+
18
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
19
+ return strings.cleanUnicode(input, ' -', 'PL');
20
+ }
21
+
22
+ const impl: Validator = {
23
+ name: 'Polish VAT Number',
24
+ localName: 'Numer Identyfikacji Podatkowej',
25
+ abbreviation: 'NIP',
26
+ compact(input: string): string {
27
+ const [value, err] = clean(input);
28
+
29
+ if (err) {
30
+ throw err;
31
+ }
32
+
33
+ return value;
34
+ },
35
+
36
+ format(input: string): string {
37
+ const [value] = clean(input);
38
+
39
+ return value;
40
+ },
41
+
42
+ validate(input: string): ValidateReturn {
43
+ const [value, error] = clean(input);
44
+
45
+ if (error) {
46
+ return { isValid: false, error };
47
+ }
48
+ if (value.length !== 10) {
49
+ return { isValid: false, error: new exceptions.InvalidLength() };
50
+ }
51
+ if (!strings.isdigits(value)) {
52
+ return { isValid: false, error: new exceptions.InvalidFormat() };
53
+ }
54
+
55
+ const sum = weightedSum(value, {
56
+ weights: [6, 5, 7, 2, 3, 4, 5, 6, 7, -1],
57
+ modulus: 11,
58
+ });
59
+
60
+ if (sum !== 0) {
61
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
62
+ }
63
+
64
+ return {
65
+ isValid: true,
66
+ compact: value,
67
+ isIndividual: false,
68
+ isCompany: true,
69
+ };
70
+ },
71
+ };
72
+
73
+ export const { name, localName, abbreviation, validate, format, compact } =
74
+ impl;
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './pesel';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('pl/pesel', () => {
5
+ it('format:44051401359', () => {
6
+ const result = format('44051401359');
7
+
8
+ expect(result).toEqual('44051401359');
9
+ });
10
+
11
+ test.each(['09222509560', '44051401359'])('validate:%s', value => {
12
+ const result = validate(value);
13
+
14
+ expect(result.isValid).toEqual(true);
15
+ });
16
+
17
+ it('cvalidate:44051401359', () => {
18
+ const result = validate('44051401359');
19
+
20
+ expect(result.isValid && result.compact).toEqual('44051401359');
21
+ });
22
+
23
+ it('validate:12345678', () => {
24
+ const result = validate('12345678');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+
29
+ it('validate:44051401358', () => {
30
+ const result = validate('44051401358');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
33
+ });
34
+ });
@@ -0,0 +1,97 @@
1
+ /**
2
+ * PESEL (Polish national identification number).
3
+ *
4
+ * The Powszechny Elektroniczny System Ewidencji Ludności (PESEL, Universal
5
+ * Electronic System for Registration of the Population) is a 11-digit Polish
6
+ * national identification number. The number consists of the date of birth,
7
+ * a serial number, the person's gender and a check digit.
8
+ *
9
+ * Source
10
+ *
11
+ * PERSON
12
+ */
13
+
14
+ import * as exceptions from '../exceptions';
15
+ import { isValidDate, strings } from '../util';
16
+ import { Validator, ValidateReturn } from '../types';
17
+ import { weightedSum } from '../util/checksum';
18
+
19
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
20
+ return strings.cleanUnicode(input, ' -');
21
+ }
22
+
23
+ const impl: Validator = {
24
+ name: 'Polish National Identification Number',
25
+ localName: 'Powszechny Elektroniczny System Ewidencji Ludności',
26
+ abbreviation: 'PESEL',
27
+ compact(input: string): string {
28
+ const [value, err] = clean(input);
29
+
30
+ if (err) {
31
+ throw err;
32
+ }
33
+
34
+ return value;
35
+ },
36
+
37
+ format(input: string): string {
38
+ const [value] = clean(input);
39
+
40
+ return value;
41
+ },
42
+
43
+ validate(input: string): ValidateReturn {
44
+ const [value, error] = clean(input);
45
+
46
+ if (error) {
47
+ return { isValid: false, error };
48
+ }
49
+ if (value.length !== 11) {
50
+ return { isValid: false, error: new exceptions.InvalidLength() };
51
+ }
52
+ if (!strings.isdigits(value)) {
53
+ return { isValid: false, error: new exceptions.InvalidFormat() };
54
+ }
55
+
56
+ const [yy, mm, dd] = strings.splitAt(value, 2, 4, 6);
57
+ const month = parseInt(mm, 10);
58
+
59
+ let century;
60
+ if (month >= 80) {
61
+ century = '18';
62
+ } else if (month >= 60) {
63
+ century = '22';
64
+ } else if (month >= 40) {
65
+ century = '21';
66
+ } else if (month >= 20) {
67
+ century = '20';
68
+ } else {
69
+ century = '19';
70
+ }
71
+
72
+ if (!isValidDate(`${century}${yy}`, String(month % 20), dd, true)) {
73
+ return { isValid: false, error: new exceptions.InvalidComponent() };
74
+ }
75
+
76
+ const [front, check] = strings.splitAt(value, -1);
77
+
78
+ const sum = weightedSum(front, {
79
+ weights: [1, 3, 7, 9, 1, 3, 7, 9, 1, 3],
80
+ modulus: 10,
81
+ });
82
+
83
+ if (String((10 - sum) % 10) !== check) {
84
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
85
+ }
86
+
87
+ return {
88
+ isValid: true,
89
+ compact: value,
90
+ isIndividual: true,
91
+ isCompany: false,
92
+ };
93
+ },
94
+ };
95
+
96
+ export const { name, localName, abbreviation, validate, format, compact } =
97
+ impl;
@@ -0,0 +1,52 @@
1
+ import { validate, format } from './regon';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('pl/regon', () => {
5
+ it('format:123456785', () => {
6
+ const result = format('123456785');
7
+
8
+ expect(result).toEqual('123456785');
9
+ });
10
+
11
+ it('validate:192598184', () => {
12
+ const result = validate('192598184');
13
+
14
+ expect(result.isValid && result.compact).toEqual('192598184');
15
+ });
16
+
17
+ it('validate:123456785', () => {
18
+ const result = validate('123456785');
19
+
20
+ expect(result.isValid && result.compact).toEqual('123456785');
21
+ });
22
+
23
+ it('validate:12345678512347', () => {
24
+ const result = validate('12345678512347');
25
+
26
+ expect(result.isValid && result.compact).toEqual('12345678512347');
27
+ });
28
+
29
+ it('validate:12345678', () => {
30
+ const result = validate('12345678');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+
35
+ it('validate:192598183', () => {
36
+ const result = validate('192598183');
37
+
38
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
39
+ });
40
+
41
+ it('validate:12345678612342', () => {
42
+ const result = validate('12345678612342');
43
+
44
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
45
+ });
46
+
47
+ it('validate:12345678512348', () => {
48
+ const result = validate('12345678512348');
49
+
50
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
51
+ });
52
+ });
@@ -0,0 +1,88 @@
1
+ /**
2
+ * REGON (Rejestr Gospodarki Narodowej, Polish register of economic units).
3
+ *
4
+ * The REGON (Rejestr Gospodarki Narodowej) is a statistical identification
5
+ * number for businesses. National entities are assigned a 9-digit number, while
6
+ * local units append 5 digits to form a 14-digit number.
7
+ *
8
+ * Source:
9
+ * https://bip.stat.gov.pl/en/regon/
10
+ * https://wyszukiwarkaregon.stat.gov.pl/appBIR/index.aspx
11
+ *
12
+ * ENTITY
13
+ */
14
+
15
+ import * as exceptions from '../exceptions';
16
+ import { strings } from '../util';
17
+ import { Validator, ValidateReturn } from '../types';
18
+ import { weightedSum } from '../util/checksum';
19
+
20
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
21
+ return strings.cleanUnicode(input, ' -');
22
+ }
23
+
24
+ const impl: Validator = {
25
+ name: 'Polish Statistical Identificaiton Number',
26
+ localName: 'Rejestr Gospodarki Narodowej',
27
+ abbreviation: 'REGON',
28
+
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
+ validate(input: string): ValidateReturn {
46
+ const [value, error] = clean(input);
47
+
48
+ if (error) {
49
+ return { isValid: false, error };
50
+ }
51
+ if (value.length !== 9 && value.length !== 14) {
52
+ return { isValid: false, error: new exceptions.InvalidLength() };
53
+ }
54
+ if (!strings.isdigits(value)) {
55
+ return { isValid: false, error: new exceptions.InvalidFormat() };
56
+ }
57
+
58
+ const [front, check, , check2] = strings.splitAt(value, 8, 9, -1);
59
+ const sum = weightedSum(front, {
60
+ weights: [8, 9, 2, 3, 4, 5, 6, 7],
61
+ modulus: 11,
62
+ });
63
+
64
+ if (String(sum % 10) !== check) {
65
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
66
+ }
67
+
68
+ if (value.length === 14) {
69
+ const sum2 = weightedSum(value.substring(0, 13), {
70
+ weights: [2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8],
71
+ modulus: 11,
72
+ });
73
+ if (String(sum2 % 10) !== check2) {
74
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
75
+ }
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;