stdnum 1.10.0 → 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 (489) hide show
  1. package/lib/cjs/no/fodselsnummer.js +2 -2
  2. package/lib/esm/no/fodselsnummer.js +2 -2
  3. package/package.json +5 -2
  4. package/src/ad/index.ts +1 -0
  5. package/src/ad/nrt.spec.ts +36 -0
  6. package/src/ad/nrt.ts +87 -0
  7. package/src/al/index.ts +1 -0
  8. package/src/al/nipt.spec.ts +43 -0
  9. package/src/al/nipt.ts +111 -0
  10. package/src/ar/cbu.spec.ts +28 -0
  11. package/src/ar/cbu.ts +96 -0
  12. package/src/ar/cuit.spec.ts +28 -0
  13. package/src/ar/cuit.ts +102 -0
  14. package/src/ar/dni.spec.ts +22 -0
  15. package/src/ar/dni.ts +72 -0
  16. package/src/ar/index.ts +3 -0
  17. package/src/at/businessid.spec.ts +34 -0
  18. package/src/at/businessid.ts +73 -0
  19. package/src/at/index.ts +4 -0
  20. package/src/at/tin.spec.ts +173 -0
  21. package/src/at/tin.ts +140 -0
  22. package/src/at/uid.spec.ts +44 -0
  23. package/src/at/uid.ts +84 -0
  24. package/src/at/vnr.spec.ts +38 -0
  25. package/src/at/vnr.ts +84 -0
  26. package/src/au/abn.spec.ts +28 -0
  27. package/src/au/abn.ts +78 -0
  28. package/src/au/acn.spec.ts +34 -0
  29. package/src/au/acn.ts +76 -0
  30. package/src/au/index.ts +3 -0
  31. package/src/au/tfn.spec.ts +28 -0
  32. package/src/au/tfn.ts +79 -0
  33. package/src/az/index.ts +2 -0
  34. package/src/az/pin.spec.ts +16 -0
  35. package/src/az/pin.ts +61 -0
  36. package/src/az/tin.spec.ts +28 -0
  37. package/src/az/tin.ts +64 -0
  38. package/src/ba/index.ts +1 -0
  39. package/src/ba/jmbg.spec.ts +28 -0
  40. package/src/ba/jmbg.ts +85 -0
  41. package/src/be/bis.spec.ts +184 -0
  42. package/src/be/bis.ts +85 -0
  43. package/src/be/index.ts +4 -0
  44. package/src/be/insz.spec.ts +51 -0
  45. package/src/be/insz.ts +55 -0
  46. package/src/be/nn.spec.ts +117 -0
  47. package/src/be/nn.ts +77 -0
  48. package/src/be/personIdentifierHelpers.spec.ts +254 -0
  49. package/src/be/personIdentifierHelpers.ts +130 -0
  50. package/src/be/vat.spec.ts +46 -0
  51. package/src/be/vat.ts +84 -0
  52. package/src/bg/egn.spec.ts +28 -0
  53. package/src/bg/egn.ts +75 -0
  54. package/src/bg/index.ts +3 -0
  55. package/src/bg/pnf.spec.ts +28 -0
  56. package/src/bg/pnf.ts +73 -0
  57. package/src/bg/vat.spec.ts +34 -0
  58. package/src/bg/vat.ts +120 -0
  59. package/src/br/cnpj.spec.ts +34 -0
  60. package/src/br/cnpj.ts +89 -0
  61. package/src/br/cpf.spec.ts +34 -0
  62. package/src/br/cpf.ts +87 -0
  63. package/src/br/index.ts +2 -0
  64. package/src/by/index.ts +1 -0
  65. package/src/by/unp.spec.ts +34 -0
  66. package/src/by/unp.ts +108 -0
  67. package/src/bz/index.ts +1 -0
  68. package/src/bz/tin.spec.ts +28 -0
  69. package/src/bz/tin.ts +67 -0
  70. package/src/ca/bn.spec.ts +40 -0
  71. package/src/ca/bn.ts +88 -0
  72. package/src/ca/gst.spec.ts +34 -0
  73. package/src/ca/gst.ts +70 -0
  74. package/src/ca/index.ts +5 -0
  75. package/src/ca/pst.spec.ts +28 -0
  76. package/src/ca/pst.ts +71 -0
  77. package/src/ca/qst.spec.ts +47 -0
  78. package/src/ca/qst.ts +88 -0
  79. package/src/ca/sin.spec.ts +34 -0
  80. package/src/ca/sin.ts +72 -0
  81. package/src/ch/index.ts +3 -0
  82. package/src/ch/ssn.spec.ts +50 -0
  83. package/src/ch/ssn.ts +74 -0
  84. package/src/ch/uid.spec.ts +34 -0
  85. package/src/ch/uid.ts +82 -0
  86. package/src/ch/vat.spec.ts +28 -0
  87. package/src/ch/vat.ts +83 -0
  88. package/src/cl/index.ts +2 -0
  89. package/src/cl/run.ts +13 -0
  90. package/src/cl/rut.spec.ts +50 -0
  91. package/src/cl/rut.ts +97 -0
  92. package/src/cn/index.ts +2 -0
  93. package/src/cn/ric.spec.ts +34 -0
  94. package/src/cn/ric.ts +86 -0
  95. package/src/cn/uscc.spec.ts +34 -0
  96. package/src/cn/uscc.ts +110 -0
  97. package/src/co/index.ts +1 -0
  98. package/src/co/nit.spec.ts +40 -0
  99. package/src/co/nit.ts +85 -0
  100. package/src/cr/cpf.spec.ts +34 -0
  101. package/src/cr/cpf.ts +93 -0
  102. package/src/cr/cpj.spec.ts +28 -0
  103. package/src/cr/cpj.ts +111 -0
  104. package/src/cr/cr.spec.ts +28 -0
  105. package/src/cr/cr.ts +75 -0
  106. package/src/cr/index.ts +3 -0
  107. package/src/cu/index.ts +1 -0
  108. package/src/cu/ni.spec.ts +34 -0
  109. package/src/cu/ni.ts +74 -0
  110. package/src/cy/index.ts +1 -0
  111. package/src/cy/vat.spec.ts +28 -0
  112. package/src/cy/vat.ts +98 -0
  113. package/src/cz/dic.spec.ts +28 -0
  114. package/src/cz/dic.ts +127 -0
  115. package/src/cz/index.ts +2 -0
  116. package/src/cz/rc.spec.ts +44 -0
  117. package/src/cz/rc.ts +95 -0
  118. package/src/de/idnr.spec.ts +34 -0
  119. package/src/de/idnr.ts +91 -0
  120. package/src/de/index.ts +6 -0
  121. package/src/de/passport.spec.ts +31 -0
  122. package/src/de/passport.ts +86 -0
  123. package/src/de/pwnr.spec.ts +62 -0
  124. package/src/de/pwnr.ts +190 -0
  125. package/src/de/stnr.spec.ts +85 -0
  126. package/src/de/stnr.ts +193 -0
  127. package/src/de/svnr.spec.ts +56 -0
  128. package/src/de/svnr.ts +158 -0
  129. package/src/de/vat.spec.ts +28 -0
  130. package/src/de/vat.ts +74 -0
  131. package/src/dk/cpr.spec.ts +34 -0
  132. package/src/dk/cpr.ts +129 -0
  133. package/src/dk/cvr.spec.ts +28 -0
  134. package/src/dk/cvr.ts +81 -0
  135. package/src/dk/index.ts +2 -0
  136. package/src/do/cedula.spec.ts +34 -0
  137. package/src/do/cedula.ts +67 -0
  138. package/src/do/index.ts +3 -0
  139. package/src/do/ncf.spec.ts +34 -0
  140. package/src/do/ncf.ts +133 -0
  141. package/src/do/rnc.spec.ts +40 -0
  142. package/src/do/rnc.ts +74 -0
  143. package/src/dz/index.ts +1 -0
  144. package/src/dz/nif.spec.ts +39 -0
  145. package/src/dz/nif.ts +80 -0
  146. package/src/ec/ci.spec.ts +28 -0
  147. package/src/ec/ci.ts +92 -0
  148. package/src/ec/index.ts +2 -0
  149. package/src/ec/ruc.spec.ts +37 -0
  150. package/src/ec/ruc.ts +117 -0
  151. package/src/ee/ik.spec.ts +28 -0
  152. package/src/ee/ik.ts +114 -0
  153. package/src/ee/index.ts +3 -0
  154. package/src/ee/kmkr.spec.ts +28 -0
  155. package/src/ee/kmkr.ts +76 -0
  156. package/src/ee/registrikood.spec.ts +28 -0
  157. package/src/ee/registrikood.ts +80 -0
  158. package/src/eg/index.ts +1 -0
  159. package/src/eg/tn.spec.ts +44 -0
  160. package/src/eg/tn.ts +96 -0
  161. package/src/es/cif.spec.ts +43 -0
  162. package/src/es/cif.ts +84 -0
  163. package/src/es/dni.spec.ts +28 -0
  164. package/src/es/dni.ts +83 -0
  165. package/src/es/index.ts +5 -0
  166. package/src/es/nie.spec.ts +28 -0
  167. package/src/es/nie.ts +79 -0
  168. package/src/es/nif.spec.ts +52 -0
  169. package/src/es/nif.ts +95 -0
  170. package/src/es/nss.spec.ts +28 -0
  171. package/src/es/nss.ts +132 -0
  172. package/src/exceptions.ts +66 -0
  173. package/src/fi/alv.spec.ts +28 -0
  174. package/src/fi/alv.ts +76 -0
  175. package/src/fi/hetu.spec.ts +37 -0
  176. package/src/fi/hetu.ts +108 -0
  177. package/src/fi/index.ts +3 -0
  178. package/src/fi/ytunnus.spec.ts +28 -0
  179. package/src/fi/ytunnus.ts +49 -0
  180. package/src/fo/index.ts +1 -0
  181. package/src/fo/vn.spec.ts +34 -0
  182. package/src/fo/vn.ts +71 -0
  183. package/src/fr/index.ts +5 -0
  184. package/src/fr/nif.spec.ts +34 -0
  185. package/src/fr/nif.ts +82 -0
  186. package/src/fr/nir.spec.ts +36 -0
  187. package/src/fr/nir.ts +98 -0
  188. package/src/fr/siren.spec.ts +28 -0
  189. package/src/fr/siren.ts +68 -0
  190. package/src/fr/siret.spec.ts +38 -0
  191. package/src/fr/siret.ts +79 -0
  192. package/src/fr/tva.spec.ts +40 -0
  193. package/src/fr/tva.ts +125 -0
  194. package/src/gb/index.ts +3 -0
  195. package/src/gb/nino-prefixes.ts +245 -0
  196. package/src/gb/nino.spec.ts +80 -0
  197. package/src/gb/nino.ts +80 -0
  198. package/src/gb/utr.spec.ts +28 -0
  199. package/src/gb/utr.ts +76 -0
  200. package/src/gb/vat.spec.ts +40 -0
  201. package/src/gb/vat.ts +112 -0
  202. package/src/gen/ean.spec.ts +34 -0
  203. package/src/gen/ean.ts +71 -0
  204. package/src/gen/index.ts +1 -0
  205. package/src/gh/index.ts +1 -0
  206. package/src/gh/tin.spec.ts +42 -0
  207. package/src/gh/tin.ts +93 -0
  208. package/src/gn/index.ts +1 -0
  209. package/src/gn/nifp.spec.ts +40 -0
  210. package/src/gn/nifp.ts +72 -0
  211. package/src/gr/amka.spec.ts +28 -0
  212. package/src/gr/amka.ts +76 -0
  213. package/src/gr/index.ts +2 -0
  214. package/src/gr/vat.spec.ts +34 -0
  215. package/src/gr/vat.ts +84 -0
  216. package/src/gt/cui.spec.ts +34 -0
  217. package/src/gt/cui.ts +110 -0
  218. package/src/gt/index.ts +2 -0
  219. package/src/gt/nit.spec.ts +34 -0
  220. package/src/gt/nit.ts +86 -0
  221. package/src/hk/hkid.spec.ts +52 -0
  222. package/src/hk/hkid.ts +90 -0
  223. package/src/hk/index.ts +1 -0
  224. package/src/hr/index.ts +1 -0
  225. package/src/hr/oib.spec.ts +28 -0
  226. package/src/hr/oib.ts +67 -0
  227. package/src/hu/anum.spec.ts +28 -0
  228. package/src/hu/anum.ts +71 -0
  229. package/src/hu/index.ts +1 -0
  230. package/src/id/index.ts +1 -0
  231. package/src/id/npwp.spec.ts +34 -0
  232. package/src/id/npwp.ts +116 -0
  233. package/src/ie/index.ts +2 -0
  234. package/src/ie/pps.spec.ts +58 -0
  235. package/src/ie/pps.ts +81 -0
  236. package/src/ie/vat.spec.ts +40 -0
  237. package/src/ie/vat.ts +99 -0
  238. package/src/il/hp.spec.ts +38 -0
  239. package/src/il/hp.ts +75 -0
  240. package/src/il/idnr.spec.ts +28 -0
  241. package/src/il/idnr.ts +70 -0
  242. package/src/il/index.ts +2 -0
  243. package/src/in/aadhaar.spec.ts +40 -0
  244. package/src/in/aadhaar.ts +85 -0
  245. package/src/in/epic.spec.ts +34 -0
  246. package/src/in/epic.ts +85 -0
  247. package/src/in/gstin.spec.ts +34 -0
  248. package/src/in/gstin.ts +156 -0
  249. package/src/in/index.ts +4 -0
  250. package/src/in/pan.spec.ts +40 -0
  251. package/src/in/pan.ts +93 -0
  252. package/src/index.ts +404 -0
  253. package/src/is/index.ts +2 -0
  254. package/src/is/kennitala.spec.ts +46 -0
  255. package/src/is/kennitala.ts +80 -0
  256. package/src/is/vsk.spec.ts +22 -0
  257. package/src/is/vsk.ts +60 -0
  258. package/src/it/aic.spec.ts +40 -0
  259. package/src/it/aic.ts +97 -0
  260. package/src/it/codicefiscale.spec.ts +28 -0
  261. package/src/it/codicefiscale.ts +167 -0
  262. package/src/it/index.ts +3 -0
  263. package/src/it/iva.spec.ts +28 -0
  264. package/src/it/iva.ts +65 -0
  265. package/src/jp/cn.spec.ts +28 -0
  266. package/src/jp/cn.ts +77 -0
  267. package/src/jp/index.ts +1 -0
  268. package/src/ke/index.ts +1 -0
  269. package/src/ke/pin.spec.ts +34 -0
  270. package/src/ke/pin.ts +77 -0
  271. package/src/kr/brn.spec.ts +28 -0
  272. package/src/kr/brn.ts +91 -0
  273. package/src/kr/index.ts +2 -0
  274. package/src/kr/rrn.spec.ts +34 -0
  275. package/src/kr/rrn.ts +104 -0
  276. package/src/li/index.ts +1 -0
  277. package/src/li/peid.spec.ts +22 -0
  278. package/src/li/peid.ts +71 -0
  279. package/src/lt/asmens.spec.ts +28 -0
  280. package/src/lt/asmens.ts +73 -0
  281. package/src/lt/index.ts +2 -0
  282. package/src/lt/pvm.spec.ts +34 -0
  283. package/src/lt/pvm.ts +75 -0
  284. package/src/lu/index.ts +1 -0
  285. package/src/lu/tva.spec.ts +28 -0
  286. package/src/lu/tva.ts +70 -0
  287. package/src/lv/index.ts +1 -0
  288. package/src/lv/pvn.spec.ts +44 -0
  289. package/src/lv/pvn.ts +102 -0
  290. package/src/ma/ice.spec.ts +39 -0
  291. package/src/ma/ice.ts +72 -0
  292. package/src/ma/ice9.spec.ts +28 -0
  293. package/src/ma/ice9.ts +62 -0
  294. package/src/ma/index.ts +2 -0
  295. package/src/mc/index.ts +1 -0
  296. package/src/mc/tva.spec.ts +28 -0
  297. package/src/mc/tva.ts +67 -0
  298. package/src/md/idno.spec.ts +28 -0
  299. package/src/md/idno.ts +78 -0
  300. package/src/md/index.ts +1 -0
  301. package/src/me/index.ts +2 -0
  302. package/src/me/jmbg.ts +17 -0
  303. package/src/me/pib.spec.ts +158 -0
  304. package/src/me/pib.ts +77 -0
  305. package/src/mk/edb.spec.ts +50 -0
  306. package/src/mk/edb.ts +88 -0
  307. package/src/mk/index.ts +2 -0
  308. package/src/mk/jmbg.ts +17 -0
  309. package/src/mt/index.ts +1 -0
  310. package/src/mt/vat.spec.ts +28 -0
  311. package/src/mt/vat.ts +69 -0
  312. package/src/mu/index.ts +1 -0
  313. package/src/mu/nid.spec.ts +34 -0
  314. package/src/mu/nid.ts +89 -0
  315. package/src/mx/banks.ts +658 -0
  316. package/src/mx/clabe.spec.ts +68 -0
  317. package/src/mx/clabe.ts +105 -0
  318. package/src/mx/curp.spec.ts +28 -0
  319. package/src/mx/curp.ts +261 -0
  320. package/src/mx/index.ts +3 -0
  321. package/src/mx/rfc.spec.ts +69 -0
  322. package/src/mx/rfc.ts +193 -0
  323. package/src/my/index.ts +1 -0
  324. package/src/my/nric.spec.ts +40 -0
  325. package/src/my/nric.ts +91 -0
  326. package/src/nl/bsn.spec.ts +68 -0
  327. package/src/nl/bsn.ts +81 -0
  328. package/src/nl/btw.spec.ts +40 -0
  329. package/src/nl/btw.ts +95 -0
  330. package/src/nl/index.ts +3 -0
  331. package/src/nl/onderwijsnummer.spec.ts +34 -0
  332. package/src/nl/onderwijsnummer.ts +77 -0
  333. package/src/no/fodselsnummer.spec.ts +56 -0
  334. package/src/no/fodselsnummer.ts +118 -0
  335. package/src/no/index.ts +4 -0
  336. package/src/no/kontonr.spec.ts +34 -0
  337. package/src/no/kontonr.ts +84 -0
  338. package/src/no/mva.spec.ts +28 -0
  339. package/src/no/mva.ts +80 -0
  340. package/src/no/orgnr.spec.ts +28 -0
  341. package/src/no/orgnr.ts +75 -0
  342. package/src/nz/bank.spec.ts +28 -0
  343. package/src/nz/bank.ts +238 -0
  344. package/src/nz/index.ts +2 -0
  345. package/src/nz/ird.spec.ts +34 -0
  346. package/src/nz/ird.ts +102 -0
  347. package/src/pe/ce.spec.ts +46 -0
  348. package/src/pe/ce.ts +61 -0
  349. package/src/pe/cui.spec.ts +28 -0
  350. package/src/pe/cui.ts +85 -0
  351. package/src/pe/index.ts +3 -0
  352. package/src/pe/ruc.spec.ts +46 -0
  353. package/src/pe/ruc.ts +84 -0
  354. package/src/pk/cnic.spec.ts +34 -0
  355. package/src/pk/cnic.ts +97 -0
  356. package/src/pk/index.ts +2 -0
  357. package/src/pk/ntn.spec.ts +22 -0
  358. package/src/pk/ntn.ts +65 -0
  359. package/src/pl/index.ts +3 -0
  360. package/src/pl/nip.spec.ts +34 -0
  361. package/src/pl/nip.ts +74 -0
  362. package/src/pl/pesel.spec.ts +34 -0
  363. package/src/pl/pesel.ts +97 -0
  364. package/src/pl/regon.spec.ts +52 -0
  365. package/src/pl/regon.ts +88 -0
  366. package/src/pt/cc.spec.ts +43 -0
  367. package/src/pt/cc.ts +74 -0
  368. package/src/pt/index.ts +3 -0
  369. package/src/pt/nif.spec.ts +28 -0
  370. package/src/pt/nif.ts +78 -0
  371. package/src/pt/nipc.ts +27 -0
  372. package/src/py/cedula.spec.ts +46 -0
  373. package/src/py/cedula.ts +73 -0
  374. package/src/py/index.ts +2 -0
  375. package/src/py/ruc.spec.ts +40 -0
  376. package/src/py/ruc.ts +93 -0
  377. package/src/ro/cif.spec.ts +40 -0
  378. package/src/ro/cif.ts +62 -0
  379. package/src/ro/cnp.spec.ts +50 -0
  380. package/src/ro/cnp.ts +158 -0
  381. package/src/ro/cui.spec.ts +28 -0
  382. package/src/ro/cui.ts +83 -0
  383. package/src/ro/index.ts +4 -0
  384. package/src/ro/onrc.spec.ts +28 -0
  385. package/src/ro/onrc.ts +109 -0
  386. package/src/rs/index.ts +2 -0
  387. package/src/rs/jmbg.ts +16 -0
  388. package/src/rs/pib.spec.ts +28 -0
  389. package/src/rs/pib.ts +69 -0
  390. package/src/ru/index.ts +1 -0
  391. package/src/ru/inn.spec.ts +32 -0
  392. package/src/ru/inn.ts +106 -0
  393. package/src/se/index.ts +3 -0
  394. package/src/se/orgnr.spec.ts +28 -0
  395. package/src/se/orgnr.ts +68 -0
  396. package/src/se/personnummer.spec.ts +45 -0
  397. package/src/se/personnummer.ts +143 -0
  398. package/src/se/vat.spec.ts +28 -0
  399. package/src/se/vat.ts +73 -0
  400. package/src/sg/index.ts +1 -0
  401. package/src/sg/uen.spec.ts +46 -0
  402. package/src/sg/uen.ts +209 -0
  403. package/src/si/ddv.spec.ts +28 -0
  404. package/src/si/ddv.ts +76 -0
  405. package/src/si/emso.spec.ts +15 -0
  406. package/src/si/emso.ts +27 -0
  407. package/src/si/index.ts +3 -0
  408. package/src/si/jmbg.ts +20 -0
  409. package/src/sk/dph.spec.ts +28 -0
  410. package/src/sk/dph.ts +71 -0
  411. package/src/sk/index.ts +2 -0
  412. package/src/sk/rc.ts +12 -0
  413. package/src/sm/coe.spec.ts +34 -0
  414. package/src/sm/coe.ts +80 -0
  415. package/src/sm/index.ts +1 -0
  416. package/src/sv/index.ts +1 -0
  417. package/src/sv/nit.spec.ts +34 -0
  418. package/src/sv/nit.ts +117 -0
  419. package/src/th/idnr.spec.ts +41 -0
  420. package/src/th/idnr.ts +80 -0
  421. package/src/th/index.ts +3 -0
  422. package/src/th/moa.spec.ts +62 -0
  423. package/src/th/moa.ts +85 -0
  424. package/src/th/tin.spec.ts +77 -0
  425. package/src/th/tin.ts +56 -0
  426. package/src/tn/index.ts +1 -0
  427. package/src/tn/mf.spec.ts +37 -0
  428. package/src/tn/mf.ts +169 -0
  429. package/src/tr/index.ts +2 -0
  430. package/src/tr/tckimlik.spec.ts +40 -0
  431. package/src/tr/tckimlik.ts +87 -0
  432. package/src/tr/vkn.spec.ts +28 -0
  433. package/src/tr/vkn.ts +87 -0
  434. package/src/tw/ban.spec.ts +28 -0
  435. package/src/tw/ban.ts +67 -0
  436. package/src/tw/index.ts +5 -0
  437. package/src/tw/natid.spec.ts +28 -0
  438. package/src/tw/natid.ts +105 -0
  439. package/src/tw/tax_code.spec.ts +34 -0
  440. package/src/tw/tax_code.ts +98 -0
  441. package/src/tw/ubn.spec.ts +28 -0
  442. package/src/tw/ubn.ts +80 -0
  443. package/src/tw/ui.spec.ts +38 -0
  444. package/src/tw/ui.ts +107 -0
  445. package/src/types.ts +82 -0
  446. package/src/ua/edrpou.spec.ts +28 -0
  447. package/src/ua/edrpou.ts +88 -0
  448. package/src/ua/index.ts +2 -0
  449. package/src/ua/rntrc.spec.ts +28 -0
  450. package/src/ua/rntrc.ts +77 -0
  451. package/src/us/ein.spec.ts +28 -0
  452. package/src/us/ein.ts +179 -0
  453. package/src/us/index.ts +2 -0
  454. package/src/us/ssn.spec.ts +28 -0
  455. package/src/us/ssn.ts +117 -0
  456. package/src/util/checksum.spec.ts +70 -0
  457. package/src/util/checksum.ts +258 -0
  458. package/src/util/index.ts +13 -0
  459. package/src/util/isValidDate.spec.ts +49 -0
  460. package/src/util/isValidDate.ts +87 -0
  461. package/src/util/iso7064.spec.ts +17 -0
  462. package/src/util/iso7064.ts +8 -0
  463. package/src/util/pymod.ts +8 -0
  464. package/src/util/strings/char.ts +18 -0
  465. package/src/util/strings/clean.spec.ts +15 -0
  466. package/src/util/strings/clean.ts +305 -0
  467. package/src/util/strings/format.ts +18 -0
  468. package/src/util/strings/index.ts +5 -0
  469. package/src/util/strings/reverseString.ts +3 -0
  470. package/src/util/strings/splitAt.spec.ts +15 -0
  471. package/src/util/strings/splitAt.ts +16 -0
  472. package/src/uy/cedula.spec.ts +28 -0
  473. package/src/uy/cedula.ts +74 -0
  474. package/src/uy/index.ts +3 -0
  475. package/src/uy/nie.spec.ts +28 -0
  476. package/src/uy/nie.ts +84 -0
  477. package/src/uy/rut.spec.ts +34 -0
  478. package/src/uy/rut.ts +99 -0
  479. package/src/ve/index.ts +1 -0
  480. package/src/ve/rif.spec.ts +38 -0
  481. package/src/ve/rif.ts +92 -0
  482. package/src/vn/index.ts +1 -0
  483. package/src/vn/mst.spec.ts +40 -0
  484. package/src/vn/mst.ts +100 -0
  485. package/src/za/idnr.spec.ts +28 -0
  486. package/src/za/idnr.ts +84 -0
  487. package/src/za/index.ts +2 -0
  488. package/src/za/tin.spec.ts +28 -0
  489. package/src/za/tin.ts +75 -0
@@ -0,0 +1,37 @@
1
+ import { validate, format } from './hetu';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('fi/hetu', () => {
5
+ it('format:131052-308T', () => {
6
+ const result = format('131052-308T');
7
+
8
+ expect(result).toEqual('131052-308T');
9
+ });
10
+
11
+ it('validate:131052-308T', () => {
12
+ const result = validate('131052-308T');
13
+
14
+ expect(result.isValid && result.compact).toEqual('131052-308T');
15
+ });
16
+
17
+ test.each(['131022B3082', '131052X308T', '131052-308T'])(
18
+ 'validate:%s',
19
+ value => {
20
+ const result = validate(value);
21
+
22
+ expect(result.isValid).toEqual(true);
23
+ },
24
+ );
25
+
26
+ it('validate:12345678', () => {
27
+ const result = validate('12345678');
28
+
29
+ expect(result.error).toBeInstanceOf(InvalidLength);
30
+ });
31
+
32
+ it('validate:131052-308U', () => {
33
+ const result = validate('131052-308U');
34
+
35
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
36
+ });
37
+ });
package/src/fi/hetu.ts ADDED
@@ -0,0 +1,108 @@
1
+ /**
2
+ * HETU (Henkilötunnus, Finnish personal identity code).
3
+ *
4
+ * Module for handling Finnish personal identity codes (HETU, Henkilötunnus).
5
+ * See https://www.vaestorekisterikeskus.fi/default.aspx?id=45 for checksum
6
+ * calculation details and https://tarkistusmerkit.teppovuori.fi/tarkmerk.htm#hetu1
7
+ * for historical details.
8
+ *
9
+ * PERSON
10
+ */
11
+
12
+ import * as exceptions from '../exceptions';
13
+ import { isValidDate, strings } from '../util';
14
+ import { Validator, ValidateReturn } from '../types';
15
+
16
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
17
+ return strings.cleanUnicode(input, ' ');
18
+ }
19
+
20
+ const CHECK_ALPHA = '0123456789ABCDEFHJKLMNPRSTUVWXY';
21
+ const CENTURY: Record<string, string> = {
22
+ '+': '18',
23
+ '-': '19',
24
+ Y: '19',
25
+ X: '19',
26
+ W: '19',
27
+ V: '19',
28
+ U: '19',
29
+ A: '20',
30
+ B: '20',
31
+ C: '20',
32
+ D: '20',
33
+ E: '20',
34
+ F: '20',
35
+ };
36
+ const VALID_CENTURY = Object.keys(CENTURY);
37
+
38
+ const impl: Validator = {
39
+ name: 'Finnish Personal Identity Code',
40
+ localName: 'Henkilötunnus',
41
+ abbreviation: 'HETU',
42
+
43
+ compact(input: string): string {
44
+ const [value, err] = clean(input);
45
+
46
+ if (err) {
47
+ throw err;
48
+ }
49
+
50
+ return value;
51
+ },
52
+
53
+ format(input: string): string {
54
+ const [value] = clean(input);
55
+
56
+ return value;
57
+ },
58
+
59
+ validate(input: string): ValidateReturn {
60
+ const [value, error] = clean(input);
61
+
62
+ if (error) {
63
+ return { isValid: false, error };
64
+ }
65
+ if (value.length !== 11) {
66
+ return { isValid: false, error: new exceptions.InvalidLength() };
67
+ }
68
+
69
+ const [front, , back, check2] = strings.splitAt(value, 6, 7, -1);
70
+ if (
71
+ !strings.isdigits(front) ||
72
+ !strings.isdigits(back) ||
73
+ !CHECK_ALPHA.includes(check2)
74
+ ) {
75
+ return { isValid: false, error: new exceptions.InvalidFormat() };
76
+ }
77
+ if (!VALID_CENTURY.includes(value[6])) {
78
+ return { isValid: false, error: new exceptions.InvalidComponent() };
79
+ }
80
+
81
+ const [dd, mm, yy, century, person, check] = strings.splitAt(
82
+ value,
83
+ 2,
84
+ 4,
85
+ 6,
86
+ 7,
87
+ 10,
88
+ );
89
+ if (!isValidDate(`${CENTURY[century]}${yy}`, mm, dd, true)) {
90
+ return { isValid: false, error: new exceptions.InvalidComponent() };
91
+ }
92
+
93
+ const checkable = `${dd}${mm}${yy}${person}`;
94
+ if (CHECK_ALPHA[parseInt(checkable, 10) % CHECK_ALPHA.length] !== check) {
95
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
96
+ }
97
+
98
+ return {
99
+ isValid: true,
100
+ compact: value,
101
+ isIndividual: true,
102
+ isCompany: false,
103
+ };
104
+ },
105
+ };
106
+
107
+ export const { name, localName, abbreviation, validate, format, compact } =
108
+ impl;
@@ -0,0 +1,3 @@
1
+ export * as alv from './alv';
2
+ export * as hetu from './hetu';
3
+ export * as ytunnus from './ytunnus';
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './ytunnus';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('fi/ytunnus', () => {
5
+ it('format:20774740', () => {
6
+ const result = format('20774740');
7
+
8
+ expect(result).toEqual('2077474-0');
9
+ });
10
+
11
+ it('validate:2077474-0', () => {
12
+ const result = validate('2077474-0');
13
+
14
+ expect(result.isValid && result.compact).toEqual('20774740');
15
+ });
16
+
17
+ it('validate:1234567', () => {
18
+ const result = validate('1234567');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:2077474-1', () => {
24
+ const result = validate('2077474-1');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Y-tunnus (Finnish business identifier).
3
+ *
4
+ * The number is an 8-digit code with a weighted checksum.
5
+ *
6
+ * ENTITY
7
+ */
8
+
9
+ import { strings } from '../util';
10
+ import { Validator, ValidateReturn } from '../types';
11
+ import { validate as alvValidate } from './alv';
12
+
13
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
14
+ return strings.cleanUnicode(input, ' -');
15
+ }
16
+
17
+ const impl: Validator = {
18
+ name: 'Finnish Business Identifier',
19
+ localName: 'Yritys- ja yhteisötunnus',
20
+ abbreviation: 'Y-tunnus',
21
+ compact(input: string): string {
22
+ const [value, err] = clean(input);
23
+
24
+ if (err) {
25
+ throw err;
26
+ }
27
+
28
+ return value;
29
+ },
30
+
31
+ format(input: string): string {
32
+ const [value] = clean(input);
33
+
34
+ return strings.splitAt(value, -1).join('-');
35
+ },
36
+
37
+ validate(input: string): ValidateReturn {
38
+ const [value, error] = clean(input);
39
+
40
+ if (error) {
41
+ return { isValid: false, error };
42
+ }
43
+
44
+ return alvValidate(value);
45
+ },
46
+ };
47
+
48
+ export const { name, localName, abbreviation, validate, format, compact } =
49
+ impl;
@@ -0,0 +1 @@
1
+ export * as vn from './vn';
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './vn';
2
+ import { InvalidLength, InvalidFormat } from '../exceptions';
3
+
4
+ describe('fo/vn', () => {
5
+ it('format:623857', () => {
6
+ const result = format('623857');
7
+
8
+ expect(result).toEqual('623857');
9
+ });
10
+
11
+ it('fvalidate:623857', () => {
12
+ const result = validate('623857');
13
+
14
+ expect(result.isValid && result.compact).toEqual('623857');
15
+ });
16
+
17
+ test.each(['623857', '33 28 28', '563.609'])('validate:%s', value => {
18
+ const result = validate(value);
19
+
20
+ expect(result.isValid).toEqual(true);
21
+ });
22
+
23
+ it('validate:62385', () => {
24
+ const result = validate('62385');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+
29
+ it('validate:62385A', () => {
30
+ const result = validate('62385A');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidFormat);
33
+ });
34
+ });
package/src/fo/vn.ts ADDED
@@ -0,0 +1,71 @@
1
+ /**
2
+ * V-number (Vinnutal, Faroe Islands tax number).
3
+ *
4
+ * In the Faroe Islands the legal persons TIN equals the V number issued by the
5
+ * Faroese Tax Administration. It is a consecutive number.
6
+ *
7
+ * Source
8
+ * https://www.taks.fo/fo/borgari/bolkar/at-stovna-virki/
9
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Faroe-islands-TIN.pdf
10
+ *
11
+ * ENTITY/PERSON
12
+ */
13
+
14
+ import * as exceptions from '../exceptions';
15
+ import { strings } from '../util';
16
+ import { Validator, ValidateReturn } from '../types';
17
+
18
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
19
+ return strings.cleanUnicode(input, ' -.');
20
+ }
21
+
22
+ // const validRe = /^[PCGQV]{1}00[A-Z0-9]{8}$/;
23
+
24
+ // const ALPHABET = '0123456789X';
25
+
26
+ const impl: Validator = {
27
+ name: 'Vinnutal',
28
+ localName: 'NAME',
29
+ abbreviation: 'VN',
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 value;
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 !== 6) {
54
+ return { isValid: false, error: new exceptions.InvalidLength() };
55
+ }
56
+
57
+ if (!strings.isdigits(value)) {
58
+ return { isValid: false, error: new exceptions.InvalidFormat() };
59
+ }
60
+
61
+ return {
62
+ isValid: true,
63
+ compact: value,
64
+ isIndividual: false,
65
+ isCompany: false,
66
+ };
67
+ },
68
+ };
69
+
70
+ export const { name, localName, abbreviation, validate, format, compact } =
71
+ impl;
@@ -0,0 +1,5 @@
1
+ export * as nif from './nif';
2
+ export * as nir from './nir';
3
+ export * as siren from './siren';
4
+ export * as siret from './siret';
5
+ export * as tva from './tva';
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './nif';
2
+ import { InvalidComponent, InvalidLength } from '../exceptions';
3
+
4
+ describe('fr/nif', () => {
5
+ it('format:0701987765432', () => {
6
+ const result = format('0701987765432');
7
+
8
+ expect(result).toEqual('07 01 987 765 432');
9
+ });
10
+
11
+ test.each(['3023217600053', '0701987765493'])('validate:%s', value => {
12
+ const result = validate(value);
13
+
14
+ expect(result.isValid && result.compact).toEqual(value);
15
+ });
16
+
17
+ test.each(['0000000000000'])('validate:%s', value => {
18
+ const result = validate(value);
19
+
20
+ expect(result.isValid).toEqual(false);
21
+ });
22
+
23
+ it('validate:12345678', () => {
24
+ const result = validate('12345678');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+
29
+ it('validate:9701987765432', () => {
30
+ const result = validate('9701987765432');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidComponent);
33
+ });
34
+ });
package/src/fr/nif.ts ADDED
@@ -0,0 +1,82 @@
1
+ /**
2
+ * NIF (Numéro d'Immatriculation Fiscale, French tax identification number).
3
+ *
4
+ * The NIF (Numéro d'Immatriculation Fiscale, Numéro d'Identité Fiscale or
5
+ * Numéro d'Identification Fiscale) also known as numéro fiscal de référence or
6
+ * SPI (Simplification des Procédures d'Identification) is a 13-digit number
7
+ * issued by the French tax authorities to people for tax reporting purposes.
8
+ *
9
+ * Source
10
+ * https://ec.europa.eu/taxation_customs/tin/tinByCountry.html
11
+ * https://fr.wikipedia.org/wiki/Numéro_d%27Immatriculation_Fiscale#France
12
+ *
13
+ * PERSON
14
+ */
15
+
16
+ import * as exceptions from '../exceptions';
17
+ import { strings } 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: 'French Tax Identification Number',
26
+ localName: "Numéro d'Immatriculation Fiscale",
27
+ abbreviation: 'NIF',
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, 2, 4, 7, 10).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 !== 13) {
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 [prefix, check] = strings.splitAt(value, 10);
58
+ const pvalue = parseInt(prefix, 10);
59
+
60
+ if (!'0123'.includes(value[0])) {
61
+ return { isValid: false, error: new exceptions.InvalidComponent() };
62
+ }
63
+ // A zero value is not a valid value
64
+ if (pvalue === 0) {
65
+ return { isValid: false, error: new exceptions.InvalidComponent() };
66
+ }
67
+
68
+ if (String(pvalue % 511).padStart(3, '0') !== check) {
69
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
70
+ }
71
+
72
+ return {
73
+ isValid: true,
74
+ compact: value,
75
+ isIndividual: true,
76
+ isCompany: false,
77
+ };
78
+ },
79
+ };
80
+
81
+ export const { name, localName, abbreviation, validate, format, compact } =
82
+ impl;
@@ -0,0 +1,36 @@
1
+ import { validate, format } from './nir';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('fr/nir', () => {
5
+ it('format:295109912611193', () => {
6
+ const result = format('295109912611193');
7
+
8
+ expect(result).toEqual('2 95 10 99 126 111 93');
9
+ });
10
+
11
+ test.each(['186022A21532523', '2 95 10 99 126 111 93'])(
12
+ 'validate-list:%s',
13
+ value => {
14
+ const result = validate(value);
15
+ expect(result.isValid).toEqual(true);
16
+ },
17
+ );
18
+
19
+ it('validate:2 95 10 99 126 111 93', () => {
20
+ const result = validate('2 95 10 99 126 111 93');
21
+
22
+ expect(result.isValid && result.compact).toEqual('295109912611193');
23
+ });
24
+
25
+ it('validate:12345678', () => {
26
+ const result = validate('12345678');
27
+
28
+ expect(result.error).toBeInstanceOf(InvalidLength);
29
+ });
30
+
31
+ it('validate:295109912611199', () => {
32
+ const result = validate('295109912611199');
33
+
34
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
35
+ });
36
+ });
package/src/fr/nir.ts ADDED
@@ -0,0 +1,98 @@
1
+ /**
2
+ * NIR (French personal identification number).
3
+ *
4
+ * The NIR (Numero d'Inscription au Repertoire national d'identification des
5
+ * personnes physiques) is used to identify persons in France. It is popularly
6
+ * known as the "social security number" and sometimes referred to as an INSEE
7
+ * number. All persons born in France are registered in the Repertoire national
8
+ * d'identification des personnes physiques (RNIPP) and assigned a NIR.
9
+ *
10
+ * The number consists of 15 digits: the first digit indicates the gender,
11
+ * followed by 2 digits for the year or birth, 2 for the month of birth, 5 for
12
+ * the location of birth (COG), 3 for a serial and 2 check digits.
13
+ *
14
+ * More information:
15
+ * https://www.insee.fr/en/metadonnees/definition/c1409
16
+ * https://en.wikipedia.org/wiki/INSEE_code
17
+ * http://resoo.org/docs/_docs/regles-numero-insee.pdf
18
+ * https://fr.wikipedia.org/wiki/Numéro_de_sécurité_sociale_en_France
19
+ * https://xml.insee.fr/schema/nir.html
20
+ *
21
+ * PERSON
22
+ */
23
+
24
+ import * as exceptions from '../exceptions';
25
+ import { strings } from '../util';
26
+ import { Validator, ValidateReturn } from '../types';
27
+
28
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
29
+ return strings.cleanUnicode(input, ' .');
30
+ }
31
+
32
+ const impl: Validator = {
33
+ name: 'French Personal Identification Number',
34
+ localName: 'Numéro d’Inscription au RNIPP',
35
+ abbreviation: 'NIR',
36
+ compact(input: string): string {
37
+ const [value, err] = clean(input);
38
+
39
+ if (err) {
40
+ throw err;
41
+ }
42
+
43
+ return value;
44
+ },
45
+
46
+ format(input: string): string {
47
+ const [value] = clean(input);
48
+
49
+ return strings.splitAt(value, 1, 3, 5, 7, 10, 13).join(' ');
50
+ },
51
+
52
+ validate(input: string): ValidateReturn {
53
+ const [value, error] = clean(input);
54
+
55
+ if (error) {
56
+ return { isValid: false, error };
57
+ }
58
+ if (value.length !== 15) {
59
+ return { isValid: false, error: new exceptions.InvalidLength() };
60
+ }
61
+
62
+ const [pre, dept, post, check] = strings.splitAt(value, 5, 7, 13);
63
+
64
+ if (
65
+ !strings.isdigits(pre) ||
66
+ !strings.isdigits(post) ||
67
+ !strings.isdigits(check)
68
+ ) {
69
+ return { isValid: false, error: new exceptions.InvalidFormat() };
70
+ }
71
+ let add = '';
72
+ if (dept === '2A') {
73
+ add = '19';
74
+ } else if (dept === '2B') {
75
+ add = '18';
76
+ } else if (strings.isdigits(dept)) {
77
+ add = dept;
78
+ } else {
79
+ return { isValid: false, error: new exceptions.InvalidComponent() };
80
+ }
81
+
82
+ const sum = parseInt(`${pre}${add}${post}`, 10) % 97;
83
+
84
+ if (String(97 - sum).padStart(2, '0') !== check) {
85
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
86
+ }
87
+
88
+ return {
89
+ isValid: true,
90
+ compact: value,
91
+ isIndividual: true,
92
+ isCompany: false,
93
+ };
94
+ },
95
+ };
96
+
97
+ export const { name, localName, abbreviation, validate, format, compact } =
98
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './siren';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('fr/siren', () => {
5
+ it('format:552 008 443', () => {
6
+ const result = format('552008443');
7
+
8
+ expect(result).toEqual('552 008 443');
9
+ });
10
+
11
+ it('validate:552 008 443', () => {
12
+ const result = validate('552 008 443');
13
+
14
+ expect(result.isValid && result.compact).toEqual('552008443');
15
+ });
16
+
17
+ it('validate:12345678', () => {
18
+ const result = validate('12345678');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:552 008 442', () => {
24
+ const result = validate('552 008 442');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
@@ -0,0 +1,68 @@
1
+ /**
2
+ * SIREN (a French company identification number).
3
+ *
4
+ * The SIREN (Système d'Identification du Répertoire des Entreprises) is a 9
5
+ * digit number used to identify French companies. The Luhn checksum is used
6
+ * to validate the numbers.
7
+ *
8
+ * ENTITY
9
+ */
10
+
11
+ import * as exceptions from '../exceptions';
12
+ import { strings } from '../util';
13
+ import { Validator, ValidateReturn } from '../types';
14
+ import { luhnChecksumValidate } from '../util/checksum';
15
+
16
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
17
+ return strings.cleanUnicode(input, ' .');
18
+ }
19
+
20
+ const impl: Validator = {
21
+ name: 'French Company Identification Number',
22
+ localName: "Système d'Identification du Répertoire des Entreprises",
23
+ abbreviation: 'SIREN',
24
+
25
+ compact(input: string): string {
26
+ const [value, err] = clean(input);
27
+
28
+ if (err) {
29
+ throw err;
30
+ }
31
+
32
+ return value;
33
+ },
34
+
35
+ format(input: string): string {
36
+ const [value] = clean(input);
37
+
38
+ return strings.splitAt(value, 3, 6).join(' ');
39
+ },
40
+
41
+ validate(input: string): ValidateReturn {
42
+ const [value, error] = clean(input);
43
+
44
+ if (error) {
45
+ return { isValid: false, error };
46
+ }
47
+ if (value.length !== 9) {
48
+ return { isValid: false, error: new exceptions.InvalidLength() };
49
+ }
50
+ if (!strings.isdigits(value)) {
51
+ return { isValid: false, error: new exceptions.InvalidFormat() };
52
+ }
53
+
54
+ if (!luhnChecksumValidate(value)) {
55
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
56
+ }
57
+
58
+ return {
59
+ isValid: true,
60
+ compact: value,
61
+ isIndividual: false,
62
+ isCompany: true,
63
+ };
64
+ },
65
+ };
66
+
67
+ export const { name, localName, abbreviation, validate, format, compact } =
68
+ impl;