@stll/stdnum 0.0.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 (1130) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +323 -0
  3. package/dist/_checksums/luhn.d.ts +12 -0
  4. package/dist/_checksums/luhn.js +26 -0
  5. package/dist/_checksums/luhn.js.map +1 -0
  6. package/dist/_checksums/mod1110.d.ts +12 -0
  7. package/dist/_checksums/mod1110.js +25 -0
  8. package/dist/_checksums/mod1110.js.map +1 -0
  9. package/dist/_checksums/mod112.d.ts +24 -0
  10. package/dist/_checksums/mod112.js +53 -0
  11. package/dist/_checksums/mod112.js.map +1 -0
  12. package/dist/_checksums/mod97.d.ts +23 -0
  13. package/dist/_checksums/mod97.js +28 -0
  14. package/dist/_checksums/mod97.js.map +1 -0
  15. package/dist/_checksums/verhoeff.d.ts +22 -0
  16. package/dist/_checksums/verhoeff.js +271 -0
  17. package/dist/_checksums/verhoeff.js.map +1 -0
  18. package/dist/_checksums/weighted-sum.d.ts +13 -0
  19. package/dist/_checksums/weighted-sum.js +22 -0
  20. package/dist/_checksums/weighted-sum.js.map +1 -0
  21. package/dist/_util/arabic.d.ts +19 -0
  22. package/dist/_util/arabic.js +41 -0
  23. package/dist/_util/arabic.js.map +1 -0
  24. package/dist/_util/clean.d.ts +13 -0
  25. package/dist/_util/clean.js +71 -0
  26. package/dist/_util/clean.js.map +1 -0
  27. package/dist/_util/date.d.ts +12 -0
  28. package/dist/_util/date.js +19 -0
  29. package/dist/_util/date.js.map +1 -0
  30. package/dist/_util/generate.d.ts +16 -0
  31. package/dist/_util/generate.js +21 -0
  32. package/dist/_util/generate.js.map +1 -0
  33. package/dist/_util/result.d.ts +8 -0
  34. package/dist/_util/result.js +13 -0
  35. package/dist/_util/result.js.map +1 -0
  36. package/dist/_util/strings.d.ts +21 -0
  37. package/dist/_util/strings.js +28 -0
  38. package/dist/_util/strings.js.map +1 -0
  39. package/dist/_virtual/_rolldown/runtime.js +13 -0
  40. package/dist/ad/mod.d.ts +8 -0
  41. package/dist/ad/mod.js +8 -0
  42. package/dist/ad/mod.js.map +1 -0
  43. package/dist/ad/nrt.d.ts +13 -0
  44. package/dist/ad/nrt.js +69 -0
  45. package/dist/ad/nrt.js.map +1 -0
  46. package/dist/ae/eid.d.ts +17 -0
  47. package/dist/ae/eid.js +79 -0
  48. package/dist/ae/eid.js.map +1 -0
  49. package/dist/ae/mod.d.ts +8 -0
  50. package/dist/ae/mod.js +8 -0
  51. package/dist/ae/mod.js.map +1 -0
  52. package/dist/ai/mod.d.ts +8 -0
  53. package/dist/ai/mod.js +8 -0
  54. package/dist/ai/mod.js.map +1 -0
  55. package/dist/ai/tin.d.ts +19 -0
  56. package/dist/ai/tin.js +72 -0
  57. package/dist/ai/tin.js.map +1 -0
  58. package/dist/al/mod.d.ts +8 -0
  59. package/dist/al/mod.js +8 -0
  60. package/dist/al/mod.js.map +1 -0
  61. package/dist/al/nipt.d.ts +13 -0
  62. package/dist/al/nipt.js +56 -0
  63. package/dist/al/nipt.js.map +1 -0
  64. package/dist/am/mod.d.ts +8 -0
  65. package/dist/am/mod.js +8 -0
  66. package/dist/am/mod.js.map +1 -0
  67. package/dist/am/tin.d.ts +13 -0
  68. package/dist/am/tin.js +53 -0
  69. package/dist/am/tin.js.map +1 -0
  70. package/dist/ar/cbu.d.ts +14 -0
  71. package/dist/ar/cbu.js +88 -0
  72. package/dist/ar/cbu.js.map +1 -0
  73. package/dist/ar/cuit.d.ts +19 -0
  74. package/dist/ar/cuit.js +123 -0
  75. package/dist/ar/cuit.js.map +1 -0
  76. package/dist/ar/dni.d.ts +13 -0
  77. package/dist/ar/dni.js +57 -0
  78. package/dist/ar/dni.js.map +1 -0
  79. package/dist/ar/mod.d.ts +10 -0
  80. package/dist/ar/mod.js +14 -0
  81. package/dist/ar/mod.js.map +1 -0
  82. package/dist/at/businessid.d.ts +13 -0
  83. package/dist/at/businessid.js +56 -0
  84. package/dist/at/businessid.js.map +1 -0
  85. package/dist/at/mod.d.ts +11 -0
  86. package/dist/at/mod.js +16 -0
  87. package/dist/at/mod.js.map +1 -0
  88. package/dist/at/tin.d.ts +14 -0
  89. package/dist/at/tin.js +70 -0
  90. package/dist/at/tin.js.map +1 -0
  91. package/dist/at/uid.d.ts +14 -0
  92. package/dist/at/uid.js +64 -0
  93. package/dist/at/uid.js.map +1 -0
  94. package/dist/at/vnr.d.ts +12 -0
  95. package/dist/at/vnr.js +79 -0
  96. package/dist/at/vnr.js.map +1 -0
  97. package/dist/au/abn.d.ts +14 -0
  98. package/dist/au/abn.js +77 -0
  99. package/dist/au/abn.js.map +1 -0
  100. package/dist/au/acn.d.ts +14 -0
  101. package/dist/au/acn.js +70 -0
  102. package/dist/au/acn.js.map +1 -0
  103. package/dist/au/mod.d.ts +10 -0
  104. package/dist/au/mod.js +14 -0
  105. package/dist/au/mod.js.map +1 -0
  106. package/dist/au/tfn.d.ts +14 -0
  107. package/dist/au/tfn.js +71 -0
  108. package/dist/au/tfn.js.map +1 -0
  109. package/dist/az/mod.d.ts +8 -0
  110. package/dist/az/mod.js +8 -0
  111. package/dist/az/mod.js.map +1 -0
  112. package/dist/az/voen.d.ts +21 -0
  113. package/dist/az/voen.js +100 -0
  114. package/dist/az/voen.js.map +1 -0
  115. package/dist/ba/jmbg.d.ts +15 -0
  116. package/dist/ba/jmbg.js +97 -0
  117. package/dist/ba/jmbg.js.map +1 -0
  118. package/dist/ba/mod.d.ts +8 -0
  119. package/dist/ba/mod.js +8 -0
  120. package/dist/ba/mod.js.map +1 -0
  121. package/dist/bd/mod.d.ts +8 -0
  122. package/dist/bd/mod.js +8 -0
  123. package/dist/bd/mod.js.map +1 -0
  124. package/dist/bd/nid.d.ts +13 -0
  125. package/dist/bd/nid.js +116 -0
  126. package/dist/bd/nid.js.map +1 -0
  127. package/dist/be/bis.d.ts +14 -0
  128. package/dist/be/bis.js +65 -0
  129. package/dist/be/bis.js.map +1 -0
  130. package/dist/be/mod.d.ts +10 -0
  131. package/dist/be/mod.js +14 -0
  132. package/dist/be/mod.js.map +1 -0
  133. package/dist/be/nn.d.ts +21 -0
  134. package/dist/be/nn.js +84 -0
  135. package/dist/be/nn.js.map +1 -0
  136. package/dist/be/vat.d.ts +14 -0
  137. package/dist/be/vat.js +70 -0
  138. package/dist/be/vat.js.map +1 -0
  139. package/dist/bg/egn.d.ts +19 -0
  140. package/dist/bg/egn.js +122 -0
  141. package/dist/bg/egn.js.map +1 -0
  142. package/dist/bg/mod.d.ts +10 -0
  143. package/dist/bg/mod.js +14 -0
  144. package/dist/bg/mod.js.map +1 -0
  145. package/dist/bg/pnf.d.ts +14 -0
  146. package/dist/bg/pnf.js +70 -0
  147. package/dist/bg/pnf.js.map +1 -0
  148. package/dist/bg/vat.d.ts +14 -0
  149. package/dist/bg/vat.js +153 -0
  150. package/dist/bg/vat.js.map +1 -0
  151. package/dist/bh/cpr.d.ts +12 -0
  152. package/dist/bh/cpr.js +58 -0
  153. package/dist/bh/cpr.js.map +1 -0
  154. package/dist/bh/mod.d.ts +8 -0
  155. package/dist/bh/mod.js +8 -0
  156. package/dist/bh/mod.js.map +1 -0
  157. package/dist/bic.d.ts +13 -0
  158. package/dist/bic.js +72 -0
  159. package/dist/bic.js.map +1 -0
  160. package/dist/br/cnpj.d.ts +21 -0
  161. package/dist/br/cnpj.js +132 -0
  162. package/dist/br/cnpj.js.map +1 -0
  163. package/dist/br/cpf.d.ts +14 -0
  164. package/dist/br/cpf.js +83 -0
  165. package/dist/br/cpf.js.map +1 -0
  166. package/dist/br/mod.d.ts +9 -0
  167. package/dist/br/mod.js +12 -0
  168. package/dist/br/mod.js.map +1 -0
  169. package/dist/by/mod.d.ts +8 -0
  170. package/dist/by/mod.js +8 -0
  171. package/dist/by/mod.js.map +1 -0
  172. package/dist/by/unp.d.ts +14 -0
  173. package/dist/by/unp.js +114 -0
  174. package/dist/by/unp.js.map +1 -0
  175. package/dist/bz/mod.d.ts +8 -0
  176. package/dist/bz/mod.js +8 -0
  177. package/dist/bz/mod.js.map +1 -0
  178. package/dist/bz/tin.d.ts +16 -0
  179. package/dist/bz/tin.js +85 -0
  180. package/dist/bz/tin.js.map +1 -0
  181. package/dist/ca/bn.d.ts +14 -0
  182. package/dist/ca/bn.js +73 -0
  183. package/dist/ca/bn.js.map +1 -0
  184. package/dist/ca/mod.d.ts +9 -0
  185. package/dist/ca/mod.js +12 -0
  186. package/dist/ca/mod.js.map +1 -0
  187. package/dist/ca/sin.d.ts +14 -0
  188. package/dist/ca/sin.js +62 -0
  189. package/dist/ca/sin.js.map +1 -0
  190. package/dist/ch/mod.d.ts +10 -0
  191. package/dist/ch/mod.js +14 -0
  192. package/dist/ch/mod.js.map +1 -0
  193. package/dist/ch/ssn.d.ts +14 -0
  194. package/dist/ch/ssn.js +67 -0
  195. package/dist/ch/ssn.js.map +1 -0
  196. package/dist/ch/uid.d.ts +14 -0
  197. package/dist/ch/uid.js +81 -0
  198. package/dist/ch/uid.js.map +1 -0
  199. package/dist/ch/vat.d.ts +14 -0
  200. package/dist/ch/vat.js +70 -0
  201. package/dist/ch/vat.js.map +1 -0
  202. package/dist/cl/mod.d.ts +8 -0
  203. package/dist/cl/mod.js +8 -0
  204. package/dist/cl/mod.js.map +1 -0
  205. package/dist/cl/rut.d.ts +19 -0
  206. package/dist/cl/rut.js +95 -0
  207. package/dist/cl/rut.js.map +1 -0
  208. package/dist/cn/mod.d.ts +9 -0
  209. package/dist/cn/mod.js +12 -0
  210. package/dist/cn/mod.js.map +1 -0
  211. package/dist/cn/ric.d.ts +19 -0
  212. package/dist/cn/ric.js +108 -0
  213. package/dist/cn/ric.js.map +1 -0
  214. package/dist/cn/uscc.d.ts +14 -0
  215. package/dist/cn/uscc.js +88 -0
  216. package/dist/cn/uscc.js.map +1 -0
  217. package/dist/co/mod.d.ts +8 -0
  218. package/dist/co/mod.js +8 -0
  219. package/dist/co/mod.js.map +1 -0
  220. package/dist/co/nit.d.ts +14 -0
  221. package/dist/co/nit.js +109 -0
  222. package/dist/co/nit.js.map +1 -0
  223. package/dist/cr/cpf.d.ts +21 -0
  224. package/dist/cr/cpf.js +79 -0
  225. package/dist/cr/cpf.js.map +1 -0
  226. package/dist/cr/mod.d.ts +8 -0
  227. package/dist/cr/mod.js +8 -0
  228. package/dist/cr/mod.js.map +1 -0
  229. package/dist/creditcard.d.ts +25 -0
  230. package/dist/creditcard.js +121 -0
  231. package/dist/creditcard.js.map +1 -0
  232. package/dist/cu/mod.d.ts +8 -0
  233. package/dist/cu/mod.js +8 -0
  234. package/dist/cu/mod.js.map +1 -0
  235. package/dist/cu/ni.d.ts +21 -0
  236. package/dist/cu/ni.js +90 -0
  237. package/dist/cu/ni.js.map +1 -0
  238. package/dist/cy/mod.d.ts +8 -0
  239. package/dist/cy/mod.js +8 -0
  240. package/dist/cy/mod.js.map +1 -0
  241. package/dist/cy/vat.d.ts +14 -0
  242. package/dist/cy/vat.js +88 -0
  243. package/dist/cy/vat.js.map +1 -0
  244. package/dist/cz/dic.d.ts +14 -0
  245. package/dist/cz/dic.js +97 -0
  246. package/dist/cz/dic.js.map +1 -0
  247. package/dist/cz/ico.d.ts +14 -0
  248. package/dist/cz/ico.js +70 -0
  249. package/dist/cz/ico.js.map +1 -0
  250. package/dist/cz/mod.d.ts +10 -0
  251. package/dist/cz/mod.js +14 -0
  252. package/dist/cz/mod.js.map +1 -0
  253. package/dist/cz/rc.d.ts +22 -0
  254. package/dist/cz/rc.js +116 -0
  255. package/dist/cz/rc.js.map +1 -0
  256. package/dist/de/handelsreg.d.ts +17 -0
  257. package/dist/de/handelsreg.js +86 -0
  258. package/dist/de/handelsreg.js.map +1 -0
  259. package/dist/de/idnr.d.ts +14 -0
  260. package/dist/de/idnr.js +102 -0
  261. package/dist/de/idnr.js.map +1 -0
  262. package/dist/de/mod.d.ts +12 -0
  263. package/dist/de/mod.js +18 -0
  264. package/dist/de/mod.js.map +1 -0
  265. package/dist/de/stnr.d.ts +22 -0
  266. package/dist/de/stnr.js +144 -0
  267. package/dist/de/stnr.js.map +1 -0
  268. package/dist/de/svnr.d.ts +14 -0
  269. package/dist/de/svnr.js +108 -0
  270. package/dist/de/svnr.js.map +1 -0
  271. package/dist/de/vat.d.ts +14 -0
  272. package/dist/de/vat.js +65 -0
  273. package/dist/de/vat.js.map +1 -0
  274. package/dist/dk/cpr.d.ts +17 -0
  275. package/dist/dk/cpr.js +81 -0
  276. package/dist/dk/cpr.js.map +1 -0
  277. package/dist/dk/cvr.d.ts +14 -0
  278. package/dist/dk/cvr.js +70 -0
  279. package/dist/dk/cvr.js.map +1 -0
  280. package/dist/dk/mod.d.ts +10 -0
  281. package/dist/dk/mod.js +14 -0
  282. package/dist/dk/mod.js.map +1 -0
  283. package/dist/dk/vat.d.ts +14 -0
  284. package/dist/dk/vat.js +72 -0
  285. package/dist/dk/vat.js.map +1 -0
  286. package/dist/do/mod.d.ts +8 -0
  287. package/dist/do/mod.js +8 -0
  288. package/dist/do/mod.js.map +1 -0
  289. package/dist/do/rnc.d.ts +18 -0
  290. package/dist/do/rnc.js +95 -0
  291. package/dist/do/rnc.js.map +1 -0
  292. package/dist/ec/mod.d.ts +8 -0
  293. package/dist/ec/mod.js +8 -0
  294. package/dist/ec/mod.js.map +1 -0
  295. package/dist/ec/ruc.d.ts +14 -0
  296. package/dist/ec/ruc.js +150 -0
  297. package/dist/ec/ruc.js.map +1 -0
  298. package/dist/ee/ik.d.ts +24 -0
  299. package/dist/ee/ik.js +131 -0
  300. package/dist/ee/ik.js.map +1 -0
  301. package/dist/ee/mod.d.ts +10 -0
  302. package/dist/ee/mod.js +14 -0
  303. package/dist/ee/mod.js.map +1 -0
  304. package/dist/ee/registrikood.d.ts +14 -0
  305. package/dist/ee/registrikood.js +63 -0
  306. package/dist/ee/registrikood.js.map +1 -0
  307. package/dist/ee/vat.d.ts +14 -0
  308. package/dist/ee/vat.js +69 -0
  309. package/dist/ee/vat.js.map +1 -0
  310. package/dist/eg/mod.d.ts +8 -0
  311. package/dist/eg/mod.js +8 -0
  312. package/dist/eg/mod.js.map +1 -0
  313. package/dist/eg/tn.d.ts +13 -0
  314. package/dist/eg/tn.js +81 -0
  315. package/dist/eg/tn.js.map +1 -0
  316. package/dist/es/cif.d.ts +14 -0
  317. package/dist/es/cif.js +66 -0
  318. package/dist/es/cif.js.map +1 -0
  319. package/dist/es/dni.d.ts +15 -0
  320. package/dist/es/dni.js +58 -0
  321. package/dist/es/dni.js.map +1 -0
  322. package/dist/es/mod.d.ts +12 -0
  323. package/dist/es/mod.js +18 -0
  324. package/dist/es/mod.js.map +1 -0
  325. package/dist/es/nie.d.ts +14 -0
  326. package/dist/es/nie.js +78 -0
  327. package/dist/es/nie.js.map +1 -0
  328. package/dist/es/nss.d.ts +14 -0
  329. package/dist/es/nss.js +72 -0
  330. package/dist/es/nss.js.map +1 -0
  331. package/dist/es/vat.d.ts +15 -0
  332. package/dist/es/vat.js +104 -0
  333. package/dist/es/vat.js.map +1 -0
  334. package/dist/eu/mod.d.ts +8 -0
  335. package/dist/eu/mod.js +8 -0
  336. package/dist/eu/mod.js.map +1 -0
  337. package/dist/eu/vat.d.ts +20 -0
  338. package/dist/eu/vat.js +145 -0
  339. package/dist/eu/vat.js.map +1 -0
  340. package/dist/fi/hetu.d.ts +17 -0
  341. package/dist/fi/hetu.js +107 -0
  342. package/dist/fi/hetu.js.map +1 -0
  343. package/dist/fi/mod.d.ts +10 -0
  344. package/dist/fi/mod.js +14 -0
  345. package/dist/fi/mod.js.map +1 -0
  346. package/dist/fi/vat.d.ts +14 -0
  347. package/dist/fi/vat.js +68 -0
  348. package/dist/fi/vat.js.map +1 -0
  349. package/dist/fi/ytunnus.d.ts +14 -0
  350. package/dist/fi/ytunnus.js +71 -0
  351. package/dist/fi/ytunnus.js.map +1 -0
  352. package/dist/fr/mod.d.ts +12 -0
  353. package/dist/fr/mod.js +18 -0
  354. package/dist/fr/mod.js.map +1 -0
  355. package/dist/fr/nif.d.ts +14 -0
  356. package/dist/fr/nif.js +64 -0
  357. package/dist/fr/nif.js.map +1 -0
  358. package/dist/fr/nir.d.ts +15 -0
  359. package/dist/fr/nir.js +106 -0
  360. package/dist/fr/nir.js.map +1 -0
  361. package/dist/fr/siren.d.ts +14 -0
  362. package/dist/fr/siren.js +56 -0
  363. package/dist/fr/siren.js.map +1 -0
  364. package/dist/fr/siret.d.ts +14 -0
  365. package/dist/fr/siret.js +73 -0
  366. package/dist/fr/siret.js.map +1 -0
  367. package/dist/fr/tva.d.ts +14 -0
  368. package/dist/fr/tva.js +80 -0
  369. package/dist/fr/tva.js.map +1 -0
  370. package/dist/gb/mod.d.ts +11 -0
  371. package/dist/gb/mod.js +16 -0
  372. package/dist/gb/mod.js.map +1 -0
  373. package/dist/gb/nino.d.ts +13 -0
  374. package/dist/gb/nino.js +103 -0
  375. package/dist/gb/nino.js.map +1 -0
  376. package/dist/gb/sedol.d.ts +15 -0
  377. package/dist/gb/sedol.js +85 -0
  378. package/dist/gb/sedol.js.map +1 -0
  379. package/dist/gb/utr.d.ts +14 -0
  380. package/dist/gb/utr.js +69 -0
  381. package/dist/gb/utr.js.map +1 -0
  382. package/dist/gb/vat.d.ts +14 -0
  383. package/dist/gb/vat.js +102 -0
  384. package/dist/gb/vat.js.map +1 -0
  385. package/dist/ge/mod.d.ts +8 -0
  386. package/dist/ge/mod.js +8 -0
  387. package/dist/ge/mod.js.map +1 -0
  388. package/dist/ge/pin.d.ts +13 -0
  389. package/dist/ge/pin.js +51 -0
  390. package/dist/ge/pin.js.map +1 -0
  391. package/dist/gh/mod.d.ts +8 -0
  392. package/dist/gh/mod.js +8 -0
  393. package/dist/gh/mod.js.map +1 -0
  394. package/dist/gh/tin.d.ts +14 -0
  395. package/dist/gh/tin.js +80 -0
  396. package/dist/gh/tin.js.map +1 -0
  397. package/dist/gr/amka.d.ts +14 -0
  398. package/dist/gr/amka.js +71 -0
  399. package/dist/gr/amka.js.map +1 -0
  400. package/dist/gr/mod.d.ts +9 -0
  401. package/dist/gr/mod.js +12 -0
  402. package/dist/gr/mod.js.map +1 -0
  403. package/dist/gr/vat.d.ts +14 -0
  404. package/dist/gr/vat.js +66 -0
  405. package/dist/gr/vat.js.map +1 -0
  406. package/dist/gt/mod.d.ts +8 -0
  407. package/dist/gt/mod.js +8 -0
  408. package/dist/gt/mod.js.map +1 -0
  409. package/dist/gt/nit.d.ts +21 -0
  410. package/dist/gt/nit.js +98 -0
  411. package/dist/gt/nit.js.map +1 -0
  412. package/dist/hk/hkid.d.ts +15 -0
  413. package/dist/hk/hkid.js +92 -0
  414. package/dist/hk/hkid.js.map +1 -0
  415. package/dist/hk/mod.d.ts +8 -0
  416. package/dist/hk/mod.js +8 -0
  417. package/dist/hk/mod.js.map +1 -0
  418. package/dist/hr/mod.d.ts +8 -0
  419. package/dist/hr/mod.js +8 -0
  420. package/dist/hr/mod.js.map +1 -0
  421. package/dist/hr/vat.d.ts +14 -0
  422. package/dist/hr/vat.js +55 -0
  423. package/dist/hr/vat.js.map +1 -0
  424. package/dist/hu/mod.d.ts +8 -0
  425. package/dist/hu/mod.js +8 -0
  426. package/dist/hu/mod.js.map +1 -0
  427. package/dist/hu/vat.d.ts +14 -0
  428. package/dist/hu/vat.js +68 -0
  429. package/dist/hu/vat.js.map +1 -0
  430. package/dist/iban.d.ts +16 -0
  431. package/dist/iban.js +282 -0
  432. package/dist/iban.js.map +1 -0
  433. package/dist/id/mod.d.ts +8 -0
  434. package/dist/id/mod.js +8 -0
  435. package/dist/id/mod.js.map +1 -0
  436. package/dist/id/npwp.d.ts +14 -0
  437. package/dist/id/npwp.js +133 -0
  438. package/dist/id/npwp.js.map +1 -0
  439. package/dist/ie/mod.d.ts +9 -0
  440. package/dist/ie/mod.js +12 -0
  441. package/dist/ie/mod.js.map +1 -0
  442. package/dist/ie/pps.d.ts +14 -0
  443. package/dist/ie/pps.js +69 -0
  444. package/dist/ie/pps.js.map +1 -0
  445. package/dist/ie/vat.d.ts +14 -0
  446. package/dist/ie/vat.js +83 -0
  447. package/dist/ie/vat.js.map +1 -0
  448. package/dist/il/idnr.d.ts +14 -0
  449. package/dist/il/idnr.js +61 -0
  450. package/dist/il/idnr.js.map +1 -0
  451. package/dist/il/mod.d.ts +8 -0
  452. package/dist/il/mod.js +8 -0
  453. package/dist/il/mod.js.map +1 -0
  454. package/dist/in/aadhaar.d.ts +14 -0
  455. package/dist/in/aadhaar.js +61 -0
  456. package/dist/in/aadhaar.js.map +1 -0
  457. package/dist/in/gstin.d.ts +14 -0
  458. package/dist/in/gstin.js +130 -0
  459. package/dist/in/gstin.js.map +1 -0
  460. package/dist/in/mod.d.ts +10 -0
  461. package/dist/in/mod.js +14 -0
  462. package/dist/in/mod.js.map +1 -0
  463. package/dist/in/pan.d.ts +13 -0
  464. package/dist/in/pan.js +58 -0
  465. package/dist/in/pan.js.map +1 -0
  466. package/dist/index.d.ts +105 -0
  467. package/dist/index.js +104 -0
  468. package/dist/iq/mod.d.ts +8 -0
  469. package/dist/iq/mod.js +8 -0
  470. package/dist/iq/mod.js.map +1 -0
  471. package/dist/iq/nid.d.ts +14 -0
  472. package/dist/iq/nid.js +56 -0
  473. package/dist/iq/nid.js.map +1 -0
  474. package/dist/ir/mod.d.ts +8 -0
  475. package/dist/ir/mod.js +8 -0
  476. package/dist/ir/mod.js.map +1 -0
  477. package/dist/ir/nid.d.ts +18 -0
  478. package/dist/ir/nid.js +90 -0
  479. package/dist/ir/nid.js.map +1 -0
  480. package/dist/is/kennitala.d.ts +14 -0
  481. package/dist/is/kennitala.js +92 -0
  482. package/dist/is/kennitala.js.map +1 -0
  483. package/dist/is/mod.d.ts +9 -0
  484. package/dist/is/mod.js +12 -0
  485. package/dist/is/mod.js.map +1 -0
  486. package/dist/is/vsk.d.ts +13 -0
  487. package/dist/is/vsk.js +47 -0
  488. package/dist/is/vsk.js.map +1 -0
  489. package/dist/isin.d.ts +14 -0
  490. package/dist/isin.js +85 -0
  491. package/dist/isin.js.map +1 -0
  492. package/dist/it/codicefiscale.d.ts +18 -0
  493. package/dist/it/codicefiscale.js +214 -0
  494. package/dist/it/codicefiscale.js.map +1 -0
  495. package/dist/it/iva.d.ts +14 -0
  496. package/dist/it/iva.js +71 -0
  497. package/dist/it/iva.js.map +1 -0
  498. package/dist/it/mod.d.ts +9 -0
  499. package/dist/it/mod.js +12 -0
  500. package/dist/it/mod.js.map +1 -0
  501. package/dist/jp/cn.d.ts +14 -0
  502. package/dist/jp/cn.js +68 -0
  503. package/dist/jp/cn.js.map +1 -0
  504. package/dist/jp/mod.d.ts +9 -0
  505. package/dist/jp/mod.js +12 -0
  506. package/dist/jp/mod.js.map +1 -0
  507. package/dist/jp/mynumber.d.ts +14 -0
  508. package/dist/jp/mynumber.js +86 -0
  509. package/dist/jp/mynumber.js.map +1 -0
  510. package/dist/kr/brn.d.ts +13 -0
  511. package/dist/kr/brn.js +67 -0
  512. package/dist/kr/brn.js.map +1 -0
  513. package/dist/kr/mod.d.ts +9 -0
  514. package/dist/kr/mod.js +12 -0
  515. package/dist/kr/mod.js.map +1 -0
  516. package/dist/kr/rrn.d.ts +22 -0
  517. package/dist/kr/rrn.js +133 -0
  518. package/dist/kr/rrn.js.map +1 -0
  519. package/dist/kw/civil.d.ts +18 -0
  520. package/dist/kw/civil.js +99 -0
  521. package/dist/kw/civil.js.map +1 -0
  522. package/dist/kw/mod.d.ts +8 -0
  523. package/dist/kw/mod.js +8 -0
  524. package/dist/kw/mod.js.map +1 -0
  525. package/dist/kz/iin.d.ts +23 -0
  526. package/dist/kz/iin.js +150 -0
  527. package/dist/kz/iin.js.map +1 -0
  528. package/dist/kz/mod.d.ts +8 -0
  529. package/dist/kz/mod.js +8 -0
  530. package/dist/kz/mod.js.map +1 -0
  531. package/dist/lei.d.ts +14 -0
  532. package/dist/lei.js +68 -0
  533. package/dist/lei.js.map +1 -0
  534. package/dist/li/mod.d.ts +8 -0
  535. package/dist/li/mod.js +8 -0
  536. package/dist/li/mod.js.map +1 -0
  537. package/dist/li/peid.d.ts +13 -0
  538. package/dist/li/peid.js +61 -0
  539. package/dist/li/peid.js.map +1 -0
  540. package/dist/lk/mod.d.ts +8 -0
  541. package/dist/lk/mod.js +8 -0
  542. package/dist/lk/mod.js.map +1 -0
  543. package/dist/lk/nic.d.ts +17 -0
  544. package/dist/lk/nic.js +139 -0
  545. package/dist/lk/nic.js.map +1 -0
  546. package/dist/lt/asmens.d.ts +14 -0
  547. package/dist/lt/asmens.js +81 -0
  548. package/dist/lt/asmens.js.map +1 -0
  549. package/dist/lt/mod.d.ts +9 -0
  550. package/dist/lt/mod.js +12 -0
  551. package/dist/lt/mod.js.map +1 -0
  552. package/dist/lt/vat.d.ts +14 -0
  553. package/dist/lt/vat.js +72 -0
  554. package/dist/lt/vat.js.map +1 -0
  555. package/dist/lu/mod.d.ts +8 -0
  556. package/dist/lu/mod.js +8 -0
  557. package/dist/lu/mod.js.map +1 -0
  558. package/dist/lu/vat.d.ts +14 -0
  559. package/dist/lu/vat.js +56 -0
  560. package/dist/lu/vat.js.map +1 -0
  561. package/dist/luhn.d.ts +17 -0
  562. package/dist/luhn.js +51 -0
  563. package/dist/luhn.js.map +1 -0
  564. package/dist/lv/mod.d.ts +8 -0
  565. package/dist/lv/mod.js +8 -0
  566. package/dist/lv/mod.js.map +1 -0
  567. package/dist/lv/vat.d.ts +14 -0
  568. package/dist/lv/vat.js +104 -0
  569. package/dist/lv/vat.js.map +1 -0
  570. package/dist/ma/ice.d.ts +14 -0
  571. package/dist/ma/ice.js +57 -0
  572. package/dist/ma/ice.js.map +1 -0
  573. package/dist/ma/mod.d.ts +8 -0
  574. package/dist/ma/mod.js +8 -0
  575. package/dist/ma/mod.js.map +1 -0
  576. package/dist/mc/mod.d.ts +8 -0
  577. package/dist/mc/mod.js +8 -0
  578. package/dist/mc/mod.js.map +1 -0
  579. package/dist/mc/tva.d.ts +14 -0
  580. package/dist/mc/tva.js +53 -0
  581. package/dist/mc/tva.js.map +1 -0
  582. package/dist/md/idno.d.ts +12 -0
  583. package/dist/md/idno.js +71 -0
  584. package/dist/md/idno.js.map +1 -0
  585. package/dist/md/mod.d.ts +8 -0
  586. package/dist/md/mod.js +8 -0
  587. package/dist/md/mod.js.map +1 -0
  588. package/dist/me/mod.d.ts +8 -0
  589. package/dist/me/mod.js +8 -0
  590. package/dist/me/mod.js.map +1 -0
  591. package/dist/me/pib.d.ts +14 -0
  592. package/dist/me/pib.js +63 -0
  593. package/dist/me/pib.js.map +1 -0
  594. package/dist/mk/edb.d.ts +14 -0
  595. package/dist/mk/edb.js +77 -0
  596. package/dist/mk/edb.js.map +1 -0
  597. package/dist/mk/mod.d.ts +8 -0
  598. package/dist/mk/mod.js +8 -0
  599. package/dist/mk/mod.js.map +1 -0
  600. package/dist/mt/mod.d.ts +8 -0
  601. package/dist/mt/mod.js +8 -0
  602. package/dist/mt/mod.js.map +1 -0
  603. package/dist/mt/vat.d.ts +14 -0
  604. package/dist/mt/vat.js +69 -0
  605. package/dist/mt/vat.js.map +1 -0
  606. package/dist/mu/brn.d.ts +13 -0
  607. package/dist/mu/brn.js +68 -0
  608. package/dist/mu/brn.js.map +1 -0
  609. package/dist/mu/mod.d.ts +8 -0
  610. package/dist/mu/mod.js +8 -0
  611. package/dist/mu/mod.js.map +1 -0
  612. package/dist/mx/clabe.d.ts +18 -0
  613. package/dist/mx/clabe.js +87 -0
  614. package/dist/mx/clabe.js.map +1 -0
  615. package/dist/mx/curp.d.ts +21 -0
  616. package/dist/mx/curp.js +140 -0
  617. package/dist/mx/curp.js.map +1 -0
  618. package/dist/mx/mod.d.ts +10 -0
  619. package/dist/mx/mod.js +14 -0
  620. package/dist/mx/mod.js.map +1 -0
  621. package/dist/mx/rfc.d.ts +16 -0
  622. package/dist/mx/rfc.js +92 -0
  623. package/dist/mx/rfc.js.map +1 -0
  624. package/dist/my/mod.d.ts +8 -0
  625. package/dist/my/mod.js +8 -0
  626. package/dist/my/mod.js.map +1 -0
  627. package/dist/my/nric.d.ts +17 -0
  628. package/dist/my/nric.js +186 -0
  629. package/dist/my/nric.js.map +1 -0
  630. package/dist/ng/mod.d.ts +8 -0
  631. package/dist/ng/mod.js +8 -0
  632. package/dist/ng/mod.js.map +1 -0
  633. package/dist/ng/nin.d.ts +13 -0
  634. package/dist/ng/nin.js +54 -0
  635. package/dist/ng/nin.js.map +1 -0
  636. package/dist/ni/mod.d.ts +8 -0
  637. package/dist/ni/mod.js +8 -0
  638. package/dist/ni/mod.js.map +1 -0
  639. package/dist/ni/ruc.d.ts +23 -0
  640. package/dist/ni/ruc.js +113 -0
  641. package/dist/ni/ruc.js.map +1 -0
  642. package/dist/nl/bsn.d.ts +14 -0
  643. package/dist/nl/bsn.js +70 -0
  644. package/dist/nl/bsn.js.map +1 -0
  645. package/dist/nl/kvk.d.ts +13 -0
  646. package/dist/nl/kvk.js +45 -0
  647. package/dist/nl/kvk.js.map +1 -0
  648. package/dist/nl/mod.d.ts +10 -0
  649. package/dist/nl/mod.js +14 -0
  650. package/dist/nl/mod.js.map +1 -0
  651. package/dist/nl/vat.d.ts +14 -0
  652. package/dist/nl/vat.js +94 -0
  653. package/dist/nl/vat.js.map +1 -0
  654. package/dist/no/fodselsnummer.d.ts +20 -0
  655. package/dist/no/fodselsnummer.js +134 -0
  656. package/dist/no/fodselsnummer.js.map +1 -0
  657. package/dist/no/mod.d.ts +10 -0
  658. package/dist/no/mod.js +14 -0
  659. package/dist/no/mod.js.map +1 -0
  660. package/dist/no/mva.d.ts +14 -0
  661. package/dist/no/mva.js +54 -0
  662. package/dist/no/mva.js.map +1 -0
  663. package/dist/no/orgnr.d.ts +14 -0
  664. package/dist/no/orgnr.js +66 -0
  665. package/dist/no/orgnr.js.map +1 -0
  666. package/dist/nz/ird.d.ts +14 -0
  667. package/dist/nz/ird.js +105 -0
  668. package/dist/nz/ird.js.map +1 -0
  669. package/dist/nz/mod.d.ts +8 -0
  670. package/dist/nz/mod.js +8 -0
  671. package/dist/nz/mod.js.map +1 -0
  672. package/dist/pa/mod.d.ts +8 -0
  673. package/dist/pa/mod.js +8 -0
  674. package/dist/pa/mod.js.map +1 -0
  675. package/dist/pa/ruc.d.ts +23 -0
  676. package/dist/pa/ruc.js +200 -0
  677. package/dist/pa/ruc.js.map +1 -0
  678. package/dist/patterns.d.ts +45 -0
  679. package/dist/patterns.js +123 -0
  680. package/dist/patterns.js.map +1 -0
  681. package/dist/pe/mod.d.ts +8 -0
  682. package/dist/pe/mod.js +8 -0
  683. package/dist/pe/mod.js.map +1 -0
  684. package/dist/pe/ruc.d.ts +19 -0
  685. package/dist/pe/ruc.js +109 -0
  686. package/dist/pe/ruc.js.map +1 -0
  687. package/dist/ph/mod.d.ts +8 -0
  688. package/dist/ph/mod.js +8 -0
  689. package/dist/ph/mod.js.map +1 -0
  690. package/dist/ph/philid.d.ts +13 -0
  691. package/dist/ph/philid.js +60 -0
  692. package/dist/ph/philid.js.map +1 -0
  693. package/dist/pk/cnic.d.ts +13 -0
  694. package/dist/pk/cnic.js +69 -0
  695. package/dist/pk/cnic.js.map +1 -0
  696. package/dist/pk/mod.d.ts +8 -0
  697. package/dist/pk/mod.js +8 -0
  698. package/dist/pk/mod.js.map +1 -0
  699. package/dist/pl/mod.d.ts +10 -0
  700. package/dist/pl/mod.js +14 -0
  701. package/dist/pl/mod.js.map +1 -0
  702. package/dist/pl/nip.d.ts +18 -0
  703. package/dist/pl/nip.js +77 -0
  704. package/dist/pl/nip.js.map +1 -0
  705. package/dist/pl/pesel.d.ts +19 -0
  706. package/dist/pl/pesel.js +109 -0
  707. package/dist/pl/pesel.js.map +1 -0
  708. package/dist/pl/regon.d.ts +14 -0
  709. package/dist/pl/regon.js +85 -0
  710. package/dist/pl/regon.js.map +1 -0
  711. package/dist/pt/cc.d.ts +14 -0
  712. package/dist/pt/cc.js +77 -0
  713. package/dist/pt/cc.js.map +1 -0
  714. package/dist/pt/mod.d.ts +9 -0
  715. package/dist/pt/mod.js +12 -0
  716. package/dist/pt/mod.js.map +1 -0
  717. package/dist/pt/vat.d.ts +14 -0
  718. package/dist/pt/vat.js +73 -0
  719. package/dist/pt/vat.js.map +1 -0
  720. package/dist/ro/cnp.d.ts +19 -0
  721. package/dist/ro/cnp.js +176 -0
  722. package/dist/ro/cnp.js.map +1 -0
  723. package/dist/ro/mod.d.ts +9 -0
  724. package/dist/ro/mod.js +12 -0
  725. package/dist/ro/mod.js.map +1 -0
  726. package/dist/ro/vat.d.ts +14 -0
  727. package/dist/ro/vat.js +76 -0
  728. package/dist/ro/vat.js.map +1 -0
  729. package/dist/rs/mod.d.ts +8 -0
  730. package/dist/rs/mod.js +8 -0
  731. package/dist/rs/mod.js.map +1 -0
  732. package/dist/rs/pib.d.ts +14 -0
  733. package/dist/rs/pib.js +60 -0
  734. package/dist/rs/pib.js.map +1 -0
  735. package/dist/ru/inn.d.ts +14 -0
  736. package/dist/ru/inn.js +103 -0
  737. package/dist/ru/inn.js.map +1 -0
  738. package/dist/ru/mod.d.ts +8 -0
  739. package/dist/ru/mod.js +8 -0
  740. package/dist/ru/mod.js.map +1 -0
  741. package/dist/se/mod.d.ts +10 -0
  742. package/dist/se/mod.js +14 -0
  743. package/dist/se/mod.js.map +1 -0
  744. package/dist/se/orgnr.d.ts +14 -0
  745. package/dist/se/orgnr.js +59 -0
  746. package/dist/se/orgnr.js.map +1 -0
  747. package/dist/se/personnummer.d.ts +23 -0
  748. package/dist/se/personnummer.js +122 -0
  749. package/dist/se/personnummer.js.map +1 -0
  750. package/dist/se/vat.d.ts +14 -0
  751. package/dist/se/vat.js +63 -0
  752. package/dist/se/vat.js.map +1 -0
  753. package/dist/sg/mod.d.ts +8 -0
  754. package/dist/sg/mod.js +8 -0
  755. package/dist/sg/mod.js.map +1 -0
  756. package/dist/sg/uen.d.ts +14 -0
  757. package/dist/sg/uen.js +207 -0
  758. package/dist/sg/uen.js.map +1 -0
  759. package/dist/si/emso.d.ts +19 -0
  760. package/dist/si/emso.js +108 -0
  761. package/dist/si/emso.js.map +1 -0
  762. package/dist/si/mod.d.ts +9 -0
  763. package/dist/si/mod.js +12 -0
  764. package/dist/si/mod.js.map +1 -0
  765. package/dist/si/vat.d.ts +14 -0
  766. package/dist/si/vat.js +74 -0
  767. package/dist/si/vat.js.map +1 -0
  768. package/dist/sk/dic.d.ts +14 -0
  769. package/dist/sk/dic.js +66 -0
  770. package/dist/sk/dic.js.map +1 -0
  771. package/dist/sk/ico.d.ts +10 -0
  772. package/dist/sk/ico.js +30 -0
  773. package/dist/sk/ico.js.map +1 -0
  774. package/dist/sk/mod.d.ts +10 -0
  775. package/dist/sk/mod.js +14 -0
  776. package/dist/sk/mod.js.map +1 -0
  777. package/dist/sk/rc.d.ts +10 -0
  778. package/dist/sk/rc.js +30 -0
  779. package/dist/sk/rc.js.map +1 -0
  780. package/dist/th/mod.d.ts +8 -0
  781. package/dist/th/mod.js +8 -0
  782. package/dist/th/mod.js.map +1 -0
  783. package/dist/th/tin.d.ts +14 -0
  784. package/dist/th/tin.js +63 -0
  785. package/dist/th/tin.js.map +1 -0
  786. package/dist/tr/mod.d.ts +9 -0
  787. package/dist/tr/mod.js +12 -0
  788. package/dist/tr/mod.js.map +1 -0
  789. package/dist/tr/tckimlik.d.ts +15 -0
  790. package/dist/tr/tckimlik.js +79 -0
  791. package/dist/tr/tckimlik.js.map +1 -0
  792. package/dist/tr/vkn.d.ts +15 -0
  793. package/dist/tr/vkn.js +79 -0
  794. package/dist/tr/vkn.js.map +1 -0
  795. package/dist/tw/mod.d.ts +8 -0
  796. package/dist/tw/mod.js +8 -0
  797. package/dist/tw/mod.js.map +1 -0
  798. package/dist/tw/ubn.d.ts +14 -0
  799. package/dist/tw/ubn.js +86 -0
  800. package/dist/tw/ubn.js.map +1 -0
  801. package/dist/types.d.ts +95 -0
  802. package/dist/types.js +1 -0
  803. package/dist/ua/edrpou.d.ts +14 -0
  804. package/dist/ua/edrpou.js +103 -0
  805. package/dist/ua/edrpou.js.map +1 -0
  806. package/dist/ua/mod.d.ts +8 -0
  807. package/dist/ua/mod.js +8 -0
  808. package/dist/ua/mod.js.map +1 -0
  809. package/dist/us/ein.d.ts +13 -0
  810. package/dist/us/ein.js +234 -0
  811. package/dist/us/ein.js.map +1 -0
  812. package/dist/us/itin.d.ts +15 -0
  813. package/dist/us/itin.js +69 -0
  814. package/dist/us/itin.js.map +1 -0
  815. package/dist/us/mod.d.ts +11 -0
  816. package/dist/us/mod.js +16 -0
  817. package/dist/us/mod.js.map +1 -0
  818. package/dist/us/rtn.d.ts +14 -0
  819. package/dist/us/rtn.js +91 -0
  820. package/dist/us/rtn.js.map +1 -0
  821. package/dist/us/ssn.d.ts +13 -0
  822. package/dist/us/ssn.js +77 -0
  823. package/dist/us/ssn.js.map +1 -0
  824. package/dist/uy/mod.d.ts +8 -0
  825. package/dist/uy/mod.js +8 -0
  826. package/dist/uy/mod.js.map +1 -0
  827. package/dist/uy/rut.d.ts +18 -0
  828. package/dist/uy/rut.js +105 -0
  829. package/dist/uy/rut.js.map +1 -0
  830. package/dist/ve/mod.d.ts +8 -0
  831. package/dist/ve/mod.js +8 -0
  832. package/dist/ve/mod.js.map +1 -0
  833. package/dist/ve/rif.d.ts +18 -0
  834. package/dist/ve/rif.js +109 -0
  835. package/dist/ve/rif.js.map +1 -0
  836. package/dist/vn/mod.d.ts +8 -0
  837. package/dist/vn/mod.js +8 -0
  838. package/dist/vn/mod.js.map +1 -0
  839. package/dist/vn/mst.d.ts +14 -0
  840. package/dist/vn/mst.js +82 -0
  841. package/dist/vn/mst.js.map +1 -0
  842. package/dist/za/idnr.d.ts +19 -0
  843. package/dist/za/idnr.js +110 -0
  844. package/dist/za/idnr.js.map +1 -0
  845. package/dist/za/mod.d.ts +8 -0
  846. package/dist/za/mod.js +8 -0
  847. package/dist/za/mod.js.map +1 -0
  848. package/package.json +936 -0
  849. package/src/_checksums/luhn.ts +24 -0
  850. package/src/_checksums/mod1110.ts +24 -0
  851. package/src/_checksums/mod112.ts +40 -0
  852. package/src/_checksums/mod97.ts +28 -0
  853. package/src/_checksums/verhoeff.ts +71 -0
  854. package/src/_checksums/weighted-sum.ts +23 -0
  855. package/src/_util/arabic.ts +48 -0
  856. package/src/_util/clean.ts +86 -0
  857. package/src/_util/date.ts +23 -0
  858. package/src/_util/generate.ts +24 -0
  859. package/src/_util/result.ts +10 -0
  860. package/src/_util/strings.ts +32 -0
  861. package/src/ad/mod.ts +1 -0
  862. package/src/ad/nrt.ts +111 -0
  863. package/src/ae/eid.ts +106 -0
  864. package/src/ae/mod.ts +1 -0
  865. package/src/ai/mod.ts +1 -0
  866. package/src/ai/tin.ts +98 -0
  867. package/src/al/mod.ts +1 -0
  868. package/src/al/nipt.ts +78 -0
  869. package/src/am/mod.ts +1 -0
  870. package/src/am/tin.ts +73 -0
  871. package/src/ar/cbu.ts +106 -0
  872. package/src/ar/cuit.ts +137 -0
  873. package/src/ar/dni.ts +79 -0
  874. package/src/ar/mod.ts +3 -0
  875. package/src/at/businessid.ts +74 -0
  876. package/src/at/mod.ts +4 -0
  877. package/src/at/tin.ts +90 -0
  878. package/src/at/uid.ts +92 -0
  879. package/src/at/vnr.ts +111 -0
  880. package/src/au/abn.ts +85 -0
  881. package/src/au/acn.ts +86 -0
  882. package/src/au/mod.ts +3 -0
  883. package/src/au/tfn.ts +85 -0
  884. package/src/az/mod.ts +1 -0
  885. package/src/az/voen.ts +125 -0
  886. package/src/ba/jmbg.ts +128 -0
  887. package/src/ba/mod.ts +1 -0
  888. package/src/bd/mod.ts +1 -0
  889. package/src/bd/nid.ts +139 -0
  890. package/src/be/bis.ts +105 -0
  891. package/src/be/mod.ts +3 -0
  892. package/src/be/nn.ts +125 -0
  893. package/src/be/vat.ts +107 -0
  894. package/src/bg/egn.ts +155 -0
  895. package/src/bg/mod.ts +3 -0
  896. package/src/bg/pnf.ts +86 -0
  897. package/src/bg/vat.ts +155 -0
  898. package/src/bh/cpr.ts +81 -0
  899. package/src/bh/mod.ts +1 -0
  900. package/src/bic.ts +99 -0
  901. package/src/br/cnpj.ts +152 -0
  902. package/src/br/cpf.ts +114 -0
  903. package/src/br/mod.ts +2 -0
  904. package/src/by/mod.ts +1 -0
  905. package/src/by/unp.ts +153 -0
  906. package/src/bz/mod.ts +1 -0
  907. package/src/bz/tin.ts +107 -0
  908. package/src/ca/bn.ts +107 -0
  909. package/src/ca/mod.ts +2 -0
  910. package/src/ca/sin.ts +91 -0
  911. package/src/ch/mod.ts +3 -0
  912. package/src/ch/ssn.ts +95 -0
  913. package/src/ch/uid.ts +108 -0
  914. package/src/ch/vat.ts +85 -0
  915. package/src/cl/mod.ts +1 -0
  916. package/src/cl/rut.ts +118 -0
  917. package/src/cn/mod.ts +2 -0
  918. package/src/cn/ric.ts +180 -0
  919. package/src/cn/uscc.ts +111 -0
  920. package/src/co/mod.ts +1 -0
  921. package/src/co/nit.ts +108 -0
  922. package/src/cr/cpf.ts +111 -0
  923. package/src/cr/mod.ts +1 -0
  924. package/src/creditcard.ts +190 -0
  925. package/src/cu/mod.ts +1 -0
  926. package/src/cu/ni.ts +125 -0
  927. package/src/cy/mod.ts +1 -0
  928. package/src/cy/vat.ts +130 -0
  929. package/src/cz/dic.ts +135 -0
  930. package/src/cz/ico.ts +82 -0
  931. package/src/cz/mod.ts +3 -0
  932. package/src/cz/rc.ts +190 -0
  933. package/src/de/handelsreg.ts +107 -0
  934. package/src/de/idnr.ts +140 -0
  935. package/src/de/mod.ts +5 -0
  936. package/src/de/stnr.ts +214 -0
  937. package/src/de/svnr.ts +162 -0
  938. package/src/de/vat.ts +98 -0
  939. package/src/dk/cpr.ts +122 -0
  940. package/src/dk/cvr.ts +87 -0
  941. package/src/dk/mod.ts +3 -0
  942. package/src/dk/vat.ts +91 -0
  943. package/src/do/mod.ts +1 -0
  944. package/src/do/rnc.ts +126 -0
  945. package/src/ec/mod.ts +1 -0
  946. package/src/ec/ruc.ts +195 -0
  947. package/src/ee/ik.ts +156 -0
  948. package/src/ee/mod.ts +3 -0
  949. package/src/ee/registrikood.ts +81 -0
  950. package/src/ee/vat.ts +85 -0
  951. package/src/eg/mod.ts +1 -0
  952. package/src/eg/tn.ts +103 -0
  953. package/src/es/cif.ts +105 -0
  954. package/src/es/dni.ts +90 -0
  955. package/src/es/mod.ts +5 -0
  956. package/src/es/nie.ts +102 -0
  957. package/src/es/nss.ts +109 -0
  958. package/src/es/vat.ts +178 -0
  959. package/src/eu/mod.ts +1 -0
  960. package/src/eu/vat.ts +171 -0
  961. package/src/fi/hetu.ts +182 -0
  962. package/src/fi/mod.ts +3 -0
  963. package/src/fi/vat.ts +82 -0
  964. package/src/fi/ytunnus.ts +83 -0
  965. package/src/fr/mod.ts +5 -0
  966. package/src/fr/nif.ts +93 -0
  967. package/src/fr/nir.ts +195 -0
  968. package/src/fr/siren.ts +79 -0
  969. package/src/fr/siret.ts +122 -0
  970. package/src/fr/tva.ts +146 -0
  971. package/src/gb/mod.ts +4 -0
  972. package/src/gb/nino.ts +153 -0
  973. package/src/gb/sedol.ts +137 -0
  974. package/src/gb/utr.ts +81 -0
  975. package/src/gb/vat.ts +158 -0
  976. package/src/ge/mod.ts +1 -0
  977. package/src/ge/pin.ts +71 -0
  978. package/src/gh/mod.ts +1 -0
  979. package/src/gh/tin.ts +100 -0
  980. package/src/gr/amka.ts +104 -0
  981. package/src/gr/mod.ts +2 -0
  982. package/src/gr/vat.ts +96 -0
  983. package/src/gt/mod.ts +1 -0
  984. package/src/gt/nit.ts +116 -0
  985. package/src/hk/hkid.ts +131 -0
  986. package/src/hk/mod.ts +1 -0
  987. package/src/hr/mod.ts +1 -0
  988. package/src/hr/vat.ts +79 -0
  989. package/src/hu/mod.ts +1 -0
  990. package/src/hu/vat.ts +82 -0
  991. package/src/iban.ts +340 -0
  992. package/src/id/mod.ts +1 -0
  993. package/src/id/npwp.ts +187 -0
  994. package/src/ie/mod.ts +2 -0
  995. package/src/ie/pps.ts +105 -0
  996. package/src/ie/vat.ts +138 -0
  997. package/src/il/idnr.ts +87 -0
  998. package/src/il/mod.ts +1 -0
  999. package/src/in/aadhaar.ts +96 -0
  1000. package/src/in/gstin.ts +169 -0
  1001. package/src/in/mod.ts +3 -0
  1002. package/src/in/pan.ts +88 -0
  1003. package/src/index.ts +116 -0
  1004. package/src/iq/mod.ts +1 -0
  1005. package/src/iq/nid.ts +71 -0
  1006. package/src/ir/mod.ts +1 -0
  1007. package/src/ir/nid.ts +120 -0
  1008. package/src/is/kennitala.ts +125 -0
  1009. package/src/is/mod.ts +2 -0
  1010. package/src/is/vsk.ts +63 -0
  1011. package/src/isin.ts +114 -0
  1012. package/src/it/codicefiscale.ts +290 -0
  1013. package/src/it/iva.ts +115 -0
  1014. package/src/it/mod.ts +2 -0
  1015. package/src/jp/cn.ts +91 -0
  1016. package/src/jp/mod.ts +2 -0
  1017. package/src/jp/mynumber.ts +103 -0
  1018. package/src/kr/brn.ts +101 -0
  1019. package/src/kr/mod.ts +2 -0
  1020. package/src/kr/rrn.ts +170 -0
  1021. package/src/kw/civil.ts +144 -0
  1022. package/src/kw/mod.ts +1 -0
  1023. package/src/kz/iin.ts +183 -0
  1024. package/src/kz/mod.ts +1 -0
  1025. package/src/lei.ts +98 -0
  1026. package/src/li/mod.ts +1 -0
  1027. package/src/li/peid.ts +66 -0
  1028. package/src/lk/mod.ts +1 -0
  1029. package/src/lk/nic.ts +210 -0
  1030. package/src/lt/asmens.ts +120 -0
  1031. package/src/lt/mod.ts +2 -0
  1032. package/src/lt/vat.ts +109 -0
  1033. package/src/lu/mod.ts +1 -0
  1034. package/src/lu/vat.ts +80 -0
  1035. package/src/luhn.ts +72 -0
  1036. package/src/lv/mod.ts +1 -0
  1037. package/src/lv/vat.ts +139 -0
  1038. package/src/ma/ice.ts +79 -0
  1039. package/src/ma/mod.ts +1 -0
  1040. package/src/mc/mod.ts +1 -0
  1041. package/src/mc/tva.ts +74 -0
  1042. package/src/md/idno.ts +86 -0
  1043. package/src/md/mod.ts +1 -0
  1044. package/src/me/mod.ts +1 -0
  1045. package/src/me/pib.ts +79 -0
  1046. package/src/mk/edb.ts +91 -0
  1047. package/src/mk/mod.ts +1 -0
  1048. package/src/mt/mod.ts +1 -0
  1049. package/src/mt/vat.ts +88 -0
  1050. package/src/mu/brn.ts +102 -0
  1051. package/src/mu/mod.ts +1 -0
  1052. package/src/mx/clabe.ts +111 -0
  1053. package/src/mx/curp.ts +210 -0
  1054. package/src/mx/mod.ts +3 -0
  1055. package/src/mx/rfc.ts +144 -0
  1056. package/src/my/mod.ts +1 -0
  1057. package/src/my/nric.ts +235 -0
  1058. package/src/ng/mod.ts +1 -0
  1059. package/src/ng/nin.ts +72 -0
  1060. package/src/ni/mod.ts +1 -0
  1061. package/src/ni/ruc.ts +176 -0
  1062. package/src/nl/bsn.ts +87 -0
  1063. package/src/nl/kvk.ts +59 -0
  1064. package/src/nl/mod.ts +3 -0
  1065. package/src/nl/vat.ts +146 -0
  1066. package/src/no/fodselsnummer.ts +192 -0
  1067. package/src/no/mod.ts +3 -0
  1068. package/src/no/mva.ts +73 -0
  1069. package/src/no/orgnr.ts +79 -0
  1070. package/src/nz/ird.ts +128 -0
  1071. package/src/nz/mod.ts +1 -0
  1072. package/src/pa/mod.ts +1 -0
  1073. package/src/pa/ruc.ts +359 -0
  1074. package/src/patterns.ts +252 -0
  1075. package/src/pe/mod.ts +1 -0
  1076. package/src/pe/ruc.ts +121 -0
  1077. package/src/ph/mod.ts +1 -0
  1078. package/src/ph/philid.ts +76 -0
  1079. package/src/pk/cnic.ts +103 -0
  1080. package/src/pk/mod.ts +1 -0
  1081. package/src/pl/mod.ts +3 -0
  1082. package/src/pl/nip.ts +96 -0
  1083. package/src/pl/pesel.ts +153 -0
  1084. package/src/pl/regon.ts +98 -0
  1085. package/src/pt/cc.ts +106 -0
  1086. package/src/pt/mod.ts +2 -0
  1087. package/src/pt/vat.ts +93 -0
  1088. package/src/ro/cnp.ts +171 -0
  1089. package/src/ro/mod.ts +2 -0
  1090. package/src/ro/vat.ts +94 -0
  1091. package/src/rs/mod.ts +1 -0
  1092. package/src/rs/pib.ts +83 -0
  1093. package/src/ru/inn.ts +109 -0
  1094. package/src/ru/mod.ts +1 -0
  1095. package/src/se/mod.ts +3 -0
  1096. package/src/se/orgnr.ts +81 -0
  1097. package/src/se/personnummer.ts +180 -0
  1098. package/src/se/vat.ts +92 -0
  1099. package/src/sg/mod.ts +1 -0
  1100. package/src/sg/uen.ts +267 -0
  1101. package/src/si/emso.ts +152 -0
  1102. package/src/si/mod.ts +2 -0
  1103. package/src/si/vat.ts +108 -0
  1104. package/src/sk/dic.ts +106 -0
  1105. package/src/sk/ico.ts +39 -0
  1106. package/src/sk/mod.ts +3 -0
  1107. package/src/sk/rc.ts +31 -0
  1108. package/src/th/mod.ts +1 -0
  1109. package/src/th/tin.ts +102 -0
  1110. package/src/tr/mod.ts +2 -0
  1111. package/src/tr/tckimlik.ts +111 -0
  1112. package/src/tr/vkn.ts +97 -0
  1113. package/src/tw/mod.ts +1 -0
  1114. package/src/tw/ubn.ts +108 -0
  1115. package/src/types.ts +200 -0
  1116. package/src/ua/edrpou.ts +103 -0
  1117. package/src/ua/mod.ts +1 -0
  1118. package/src/us/ein.ts +257 -0
  1119. package/src/us/itin.ts +126 -0
  1120. package/src/us/mod.ts +4 -0
  1121. package/src/us/rtn.ts +126 -0
  1122. package/src/us/ssn.ts +117 -0
  1123. package/src/uy/mod.ts +1 -0
  1124. package/src/uy/rut.ts +146 -0
  1125. package/src/ve/mod.ts +1 -0
  1126. package/src/ve/rif.ts +140 -0
  1127. package/src/vn/mod.ts +1 -0
  1128. package/src/vn/mst.ts +128 -0
  1129. package/src/za/idnr.ts +157 -0
  1130. package/src/za/mod.ts +1 -0
package/dist/es/nss.js ADDED
@@ -0,0 +1,72 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { isdigits } from "../_util/strings.js";
5
+ //#region src/es/nss.ts
6
+ /**
7
+ * NSS (Número de la Seguridad Social).
8
+ *
9
+ * Spanish Social Security Number. 12 digits:
10
+ * 2-digit province code (01–52) + 8-digit affiliate
11
+ * number + 2-digit check digits.
12
+ *
13
+ * Check digits are computed as:
14
+ * if affiliate < 10_000_000:
15
+ * (affiliate + province × 10_000_000) mod 97
16
+ * else:
17
+ * parseInt(province + affiliate) mod 97
18
+ *
19
+ * @see https://www.seg-social.es/
20
+ * @see https://intervia.com/doc/validar-numeros-de-la-seguridad-social/
21
+ */
22
+ const compact = (value) => clean(value, " -/.");
23
+ const validate = (value) => {
24
+ const v = compact(value);
25
+ if (v.length !== 12) return err("INVALID_LENGTH", "Spanish NSS must be 12 digits");
26
+ if (!isdigits(v)) return err("INVALID_FORMAT", "Spanish NSS must contain only digits");
27
+ const province = Number(v.slice(0, 2));
28
+ if (province < 1 || province > 52) return err("INVALID_COMPONENT", "Spanish NSS province code must be 01–52");
29
+ const affiliate = Number(v.slice(2, 10));
30
+ const check = Number(v.slice(10, 12));
31
+ let base;
32
+ if (affiliate < 1e7) base = affiliate + province * 1e7;
33
+ else base = Number(`${province}${v.slice(2, 10)}`);
34
+ if (base % 97 !== check) return err("INVALID_CHECKSUM", "Spanish NSS check digits do not match");
35
+ return {
36
+ valid: true,
37
+ compact: v
38
+ };
39
+ };
40
+ const format = (value) => {
41
+ const v = compact(value);
42
+ return `${v.slice(0, 2)}/${v.slice(2, 10)}/${v.slice(10)}`;
43
+ };
44
+ /** Generate a random valid Spanish NSS. */
45
+ const generate = () => {
46
+ for (;;) {
47
+ const c = randomDigits(12);
48
+ if (validate(c).valid) return c;
49
+ }
50
+ };
51
+ /** Spanish Social Security Number. */
52
+ const nss = {
53
+ name: "Spanish Social Security Number",
54
+ localName: "Número de la Seguridad Social",
55
+ abbreviation: "NSS",
56
+ aliases: ["NSS", "número de seguridad social"],
57
+ candidatePattern: "\\d{12}",
58
+ country: "ES",
59
+ entityType: "person",
60
+ description: "Spanish Social Security affiliation number with mod-97 check digits",
61
+ sourceUrl: "https://www.seg-social.es/",
62
+ lengths: [12],
63
+ examples: ["281234567840"],
64
+ compact,
65
+ format,
66
+ validate,
67
+ generate
68
+ };
69
+ //#endregion
70
+ export { compact, nss as default, format, generate, validate };
71
+
72
+ //# sourceMappingURL=nss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nss.js","names":[],"sources":["../../src/es/nss.ts"],"sourcesContent":["/**\n * NSS (Número de la Seguridad Social).\n *\n * Spanish Social Security Number. 12 digits:\n * 2-digit province code (01–52) + 8-digit affiliate\n * number + 2-digit check digits.\n *\n * Check digits are computed as:\n * if affiliate < 10_000_000:\n * (affiliate + province × 10_000_000) mod 97\n * else:\n * parseInt(province + affiliate) mod 97\n *\n * @see https://www.seg-social.es/\n * @see https://intervia.com/doc/validar-numeros-de-la-seguridad-social/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string =>\n clean(value, \" -/.\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"Spanish NSS must be 12 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish NSS must contain only digits\",\n );\n }\n\n const province = Number(v.slice(0, 2));\n if (province < 1 || province > 52) {\n return err(\n \"INVALID_COMPONENT\",\n \"Spanish NSS province code must be 01–52\",\n );\n }\n\n const affiliate = Number(v.slice(2, 10));\n const check = Number(v.slice(10, 12));\n\n let base: number;\n if (affiliate < 10_000_000) {\n base = affiliate + province * 10_000_000;\n } else {\n // Concatenate province and affiliate as a number\n base = Number(`${province}${v.slice(2, 10)}`);\n }\n\n const expected = base % 97;\n\n if (expected !== check) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish NSS check digits do not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)}/${v.slice(2, 10)}/${v.slice(10)}`;\n};\n\n/** Generate a random valid Spanish NSS. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(12);\n if (validate(c).valid) return c;\n }\n};\n\n/** Spanish Social Security Number. */\nconst nss: Validator = {\n name: \"Spanish Social Security Number\",\n localName: \"Número de la Seguridad Social\",\n abbreviation: \"NSS\",\n aliases: [\"NSS\", \"número de seguridad social\"] as const,\n candidatePattern: \"\\\\d{12}\",\n country: \"ES\",\n entityType: \"person\",\n description:\n \"Spanish Social Security affiliation number \" +\n \"with mod-97 check digits\",\n sourceUrl: \"https://www.seg-social.es/\",\n lengths: [12] as const,\n examples: [\"281234567840\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nss;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,WAAW,UACf,MAAM,OAAO,OAAO;AAEtB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,gCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,uCACD;CAGH,MAAM,WAAW,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;AACtC,KAAI,WAAW,KAAK,WAAW,GAC7B,QAAO,IACL,qBACA,0CACD;CAGH,MAAM,YAAY,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;CACxC,MAAM,QAAQ,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC;CAErC,IAAI;AACJ,KAAI,YAAY,IACd,QAAO,YAAY,WAAW;KAG9B,QAAO,OAAO,GAAG,WAAW,EAAE,MAAM,GAAG,GAAG,GAAG;AAK/C,KAFiB,OAAO,OAEP,MACf,QAAO,IACL,oBACA,wCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG;;;AAI1D,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,IAAI,aAAa,GAAG;AAC1B,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,6BAA6B;CAC9C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,aACE;CAEF,WAAW;CACX,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,eAAe;CAC1B;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,15 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/es/vat.d.ts
4
+
5
+ declare const compact: (value: string) => string;
6
+ declare const cifChecksum: (digits: string) => number;
7
+ declare const validate: (value: string) => ValidateResult;
8
+ declare const format: (value: string) => string;
9
+ /** Generate a random valid Spanish VAT (DNI form). */
10
+ declare const generate: () => string;
11
+ /** Spanish VAT Number. */
12
+ declare const vat: Validator;
13
+ //#endregion
14
+ export { cifChecksum, compact, vat as default, format, generate, validate };
15
+ //# sourceMappingURL=vat.d.ts.map
package/dist/es/vat.js ADDED
@@ -0,0 +1,104 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { isdigits } from "../_util/strings.js";
5
+ //#region src/es/vat.ts
6
+ /**
7
+ * NIF/CIF (Spanish VAT number).
8
+ *
9
+ * 9 characters with 4 subtypes: DNI, NIE, CIF,
10
+ * and K/L/M personal numbers.
11
+ *
12
+ * @see https://www.vatify.eu/spain-vat-number.html
13
+ * @see https://www.agenciatributaria.es/
14
+ */
15
+ const DNI_LETTERS = "TRWAGMYFPDXBNJZSQVHLCKE";
16
+ const CIF_LETTERS = "JABCDEFGHI";
17
+ const compact = (value) => {
18
+ let v = clean(value, " -/.");
19
+ if (v.startsWith("ES") || v.startsWith("es")) v = v.slice(2);
20
+ return v.toUpperCase();
21
+ };
22
+ const cifChecksum = (digits) => {
23
+ let even = 0;
24
+ let odd = 0;
25
+ for (let i = 0; i < 7; i++) {
26
+ const d = Number(digits.charAt(i));
27
+ if (i % 2 === 0) {
28
+ const doubled = d * 2;
29
+ odd += Math.floor(doubled / 10) + doubled % 10;
30
+ } else even += d;
31
+ }
32
+ return (10 - (even + odd) % 10) % 10;
33
+ };
34
+ const validate = (value) => {
35
+ const v = compact(value);
36
+ if (v.length !== 9) return err("INVALID_LENGTH", "Spanish VAT number must be 9 characters");
37
+ const first = v.charAt(0);
38
+ const last = v.charAt(8);
39
+ if (isdigits(v.slice(0, 8))) {
40
+ if (last !== DNI_LETTERS.charAt(Number.parseInt(v.slice(0, 8), 10) % 23)) return err("INVALID_CHECKSUM", "Spanish DNI check letter mismatch");
41
+ return {
42
+ valid: true,
43
+ compact: v
44
+ };
45
+ }
46
+ if (first === "X" || first === "Y" || first === "Z") {
47
+ const digits = (first === "X" ? "0" : first === "Y" ? "1" : "2") + v.slice(1, 8);
48
+ if (!isdigits(digits) || !isdigits(v.slice(1, 8))) return err("INVALID_FORMAT", "Spanish NIE must have 7 digits after prefix");
49
+ if (last !== DNI_LETTERS.charAt(Number.parseInt(digits, 10) % 23)) return err("INVALID_CHECKSUM", "Spanish NIE check letter mismatch");
50
+ return {
51
+ valid: true,
52
+ compact: v
53
+ };
54
+ }
55
+ if (first === "K" || first === "L" || first === "M") {
56
+ if (!isdigits(v.slice(1, 8))) return err("INVALID_FORMAT", "Spanish K/L/M number must have 7 digits");
57
+ if (last !== DNI_LETTERS.charAt(Number.parseInt(v.slice(1, 8), 10) % 23)) return err("INVALID_CHECKSUM", "Spanish K/L/M check letter mismatch");
58
+ return {
59
+ valid: true,
60
+ compact: v
61
+ };
62
+ }
63
+ if ("ABCDEFGHJNPQRSUVW".includes(first)) {
64
+ if (!isdigits(v.slice(1, 8))) return err("INVALID_FORMAT", "Spanish CIF must have 7 digits after prefix");
65
+ const check = cifChecksum(v.slice(1, 8));
66
+ if (last !== String(check) && last !== CIF_LETTERS.charAt(check)) return err("INVALID_CHECKSUM", "Spanish CIF check digit/letter mismatch");
67
+ return {
68
+ valid: true,
69
+ compact: v
70
+ };
71
+ }
72
+ return err("INVALID_FORMAT", "Spanish VAT number has invalid format");
73
+ };
74
+ const format = (value) => `ES${compact(value)}`;
75
+ /** Generate a random valid Spanish VAT (DNI form). */
76
+ const generate = () => {
77
+ const letters = "TRWAGMYFPDXBNJZSQVHLCKE";
78
+ const num = randomDigits(8);
79
+ return num + letters.charAt(Number(num) % 23);
80
+ };
81
+ /** Spanish VAT Number. */
82
+ const vat = {
83
+ name: "Spanish VAT Number",
84
+ localName: "Número de Identificación Fiscal",
85
+ abbreviation: "NIF",
86
+ aliases: [
87
+ "NIF",
88
+ "CIF",
89
+ "número de identificación fiscal"
90
+ ],
91
+ candidatePattern: "ES[A-Z]\\d{7}[A-Z\\d]",
92
+ country: "ES",
93
+ entityType: "any",
94
+ sourceUrl: "https://www.agenciatributaria.es/",
95
+ examples: ["12345678Z", "A78304516"],
96
+ compact,
97
+ format,
98
+ validate,
99
+ generate
100
+ };
101
+ //#endregion
102
+ export { cifChecksum, compact, vat as default, format, generate, validate };
103
+
104
+ //# sourceMappingURL=vat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vat.js","names":[],"sources":["../../src/es/vat.ts"],"sourcesContent":["/**\n * NIF/CIF (Spanish VAT number).\n *\n * 9 characters with 4 subtypes: DNI, NIE, CIF,\n * and K/L/M personal numbers.\n *\n * @see https://www.vatify.eu/spain-vat-number.html\n * @see https://www.agenciatributaria.es/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst DNI_LETTERS = \"TRWAGMYFPDXBNJZSQVHLCKE\";\nconst CIF_LETTERS = \"JABCDEFGHI\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"ES\") || v.startsWith(\"es\")) {\n v = v.slice(2);\n }\n return v.toUpperCase();\n};\n\nconst cifChecksum = (digits: string): number => {\n let even = 0;\n let odd = 0;\n for (let i = 0; i < 7; i++) {\n const d = Number(digits.charAt(i));\n if (i % 2 === 0) {\n // Odd positions (1-indexed): double and sum digits\n const doubled = d * 2;\n odd += Math.floor(doubled / 10) + (doubled % 10);\n } else {\n even += d;\n }\n }\n return (10 - ((even + odd) % 10)) % 10;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Spanish VAT number must be 9 characters\",\n );\n }\n\n const first = v.charAt(0);\n const last = v.charAt(8);\n\n // DNI: 8 digits + letter\n if (isdigits(v.slice(0, 8))) {\n const expected = DNI_LETTERS.charAt(\n Number.parseInt(v.slice(0, 8), 10) % 23,\n );\n if (last !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish DNI check letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // NIE: X/Y/Z + 7 digits + letter\n if (first === \"X\" || first === \"Y\" || first === \"Z\") {\n const prefix =\n first === \"X\" ? \"0\" : first === \"Y\" ? \"1\" : \"2\";\n const digits = prefix + v.slice(1, 8);\n if (!isdigits(digits) || !isdigits(v.slice(1, 8))) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish NIE must have 7 digits after prefix\",\n );\n }\n const expected = DNI_LETTERS.charAt(\n Number.parseInt(digits, 10) % 23,\n );\n if (last !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish NIE check letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // K, L, M: personal number, letter + 7 digits +\n // check letter\n if (first === \"K\" || first === \"L\" || first === \"M\") {\n if (!isdigits(v.slice(1, 8))) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish K/L/M number must have 7 digits\",\n );\n }\n const expected = DNI_LETTERS.charAt(\n Number.parseInt(v.slice(1, 8), 10) % 23,\n );\n if (last !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish K/L/M check letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // CIF: letter + 7 digits + check digit/letter\n const CIF_PREFIXES = \"ABCDEFGHJNPQRSUVW\";\n if (CIF_PREFIXES.includes(first)) {\n if (!isdigits(v.slice(1, 8))) {\n return err(\n \"INVALID_FORMAT\",\n \"Spanish CIF must have 7 digits after prefix\",\n );\n }\n const check = cifChecksum(v.slice(1, 8));\n // Accept either numeric or alphabetic check digit\n // for all CIF prefixes (sources conflict on which\n // prefixes require which type)\n if (\n last !== String(check) &&\n last !== CIF_LETTERS.charAt(check)\n ) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Spanish CIF check digit/letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n return err(\n \"INVALID_FORMAT\",\n \"Spanish VAT number has invalid format\",\n );\n};\n\nconst format = (value: string): string =>\n `ES${compact(value)}`;\n\n/** Generate a random valid Spanish VAT (DNI form). */\nconst generate = (): string => {\n const letters = \"TRWAGMYFPDXBNJZSQVHLCKE\";\n const num = randomDigits(8);\n return num + letters.charAt(Number(num) % 23);\n};\n\n/** Spanish VAT Number. */\nconst vat: Validator = {\n name: \"Spanish VAT Number\",\n localName: \"Número de Identificación Fiscal\",\n abbreviation: \"NIF\",\n aliases: [\n \"NIF\",\n \"CIF\",\n \"número de identificación fiscal\",\n ] as const,\n candidatePattern: \"ES[A-Z]\\\\d{7}[A-Z\\\\d]\",\n country: \"ES\",\n entityType: \"any\",\n sourceUrl: \"https://www.agenciatributaria.es/\",\n examples: [\"12345678Z\", \"A78304516\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { cifChecksum, compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,cAAc;AACpB,MAAM,cAAc;AAEpB,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,OAAO;AAC5B,KAAI,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,CAC1C,KAAI,EAAE,MAAM,EAAE;AAEhB,QAAO,EAAE,aAAa;;AAGxB,MAAM,eAAe,WAA2B;CAC9C,IAAI,OAAO;CACX,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,IAAI,OAAO,OAAO,OAAO,EAAE,CAAC;AAClC,MAAI,IAAI,MAAM,GAAG;GAEf,MAAM,UAAU,IAAI;AACpB,UAAO,KAAK,MAAM,UAAU,GAAG,GAAI,UAAU;QAE7C,SAAQ;;AAGZ,SAAQ,MAAO,OAAO,OAAO,MAAO;;AAGtC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,0CACD;CAGH,MAAM,QAAQ,EAAE,OAAO,EAAE;CACzB,MAAM,OAAO,EAAE,OAAO,EAAE;AAGxB,KAAI,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE;AAI3B,MAAI,SAHa,YAAY,OAC3B,OAAO,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG,GACtC,CAEC,QAAO,IACL,oBACA,oCACD;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;AAIpC,KAAI,UAAU,OAAO,UAAU,OAAO,UAAU,KAAK;EAGnD,MAAM,UADJ,UAAU,MAAM,MAAM,UAAU,MAAM,MAAM,OACtB,EAAE,MAAM,GAAG,EAAE;AACrC,MAAI,CAAC,SAAS,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,CAC/C,QAAO,IACL,kBACA,8CACD;AAKH,MAAI,SAHa,YAAY,OAC3B,OAAO,SAAS,QAAQ,GAAG,GAAG,GAC/B,CAEC,QAAO,IACL,oBACA,oCACD;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;AAKpC,KAAI,UAAU,OAAO,UAAU,OAAO,UAAU,KAAK;AACnD,MAAI,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,CAC1B,QAAO,IACL,kBACA,0CACD;AAKH,MAAI,SAHa,YAAY,OAC3B,OAAO,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG,GACtC,CAEC,QAAO,IACL,oBACA,sCACD;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;AAKpC,KADqB,oBACJ,SAAS,MAAM,EAAE;AAChC,MAAI,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,CAC1B,QAAO,IACL,kBACA,8CACD;EAEH,MAAM,QAAQ,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AAIxC,MACE,SAAS,OAAO,MAAM,IACtB,SAAS,YAAY,OAAO,MAAM,CAElC,QAAO,IACL,oBACA,0CACD;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;AAGpC,QAAO,IACL,kBACA,wCACD;;AAGH,MAAM,UAAU,UACd,KAAK,QAAQ,MAAM;;AAGrB,MAAM,iBAAyB;CAC7B,MAAM,UAAU;CAChB,MAAM,MAAM,aAAa,EAAE;AAC3B,QAAO,MAAM,QAAQ,OAAO,OAAO,IAAI,GAAG,GAAG;;;AAI/C,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa,YAAY;CACpC;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import euVat from "./vat.js";
3
+
4
+ //#region src/eu/mod.d.ts
5
+
6
+ //#endregion
7
+ export { mod_d_exports, euVat as vat };
8
+ //# sourceMappingURL=mod.d.ts.map
package/dist/eu/mod.js ADDED
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import euVat from "./vat.js";
3
+ //#region src/eu/mod.ts
4
+ var eu_exports = /* @__PURE__ */ __exportAll({ vat: () => euVat });
5
+ //#endregion
6
+ export { eu_exports, euVat as vat };
7
+
8
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/eu/mod.ts"],"sourcesContent":["export { default as vat } from \"./vat\";\n"],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/eu/vat.d.ts
4
+
5
+ declare const compact: (value: string) => string;
6
+ declare const validate: (value: string) => ValidateResult;
7
+ /**
8
+ * Format returns the compact EU VAT form:
9
+ * `CC` + country-compacted number. Equivalent to
10
+ * compact() because country format() methods
11
+ * prepend their own prefix (e.g., AT UID format
12
+ * returns "ATU..."), which would cause double-
13
+ * prefixing if used here.
14
+ */
15
+ declare const format: (value: string) => string;
16
+ /** European Union VAT Number. */
17
+ declare const euVat: Validator;
18
+ //#endregion
19
+ export { compact, euVat as default, format, validate };
20
+ //# sourceMappingURL=vat.d.ts.map
package/dist/eu/vat.js ADDED
@@ -0,0 +1,145 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { err } from "../_util/result.js";
3
+ import uid from "../at/uid.js";
4
+ import vat from "../be/vat.js";
5
+ import vat$1 from "../bg/vat.js";
6
+ import vat$2 from "../cy/vat.js";
7
+ import dic from "../cz/dic.js";
8
+ import vat$3 from "../de/vat.js";
9
+ import vat$4 from "../dk/vat.js";
10
+ import vat$5 from "../ee/vat.js";
11
+ import vat$6 from "../es/vat.js";
12
+ import vat$7 from "../fi/vat.js";
13
+ import tva from "../fr/tva.js";
14
+ import vat$8 from "../gb/vat.js";
15
+ import vat$9 from "../gr/vat.js";
16
+ import vat$10 from "../hr/vat.js";
17
+ import vat$11 from "../hu/vat.js";
18
+ import vat$12 from "../ie/vat.js";
19
+ import iva from "../it/iva.js";
20
+ import vat$13 from "../lt/vat.js";
21
+ import vat$14 from "../lu/vat.js";
22
+ import vat$15 from "../lv/vat.js";
23
+ import vat$16 from "../mt/vat.js";
24
+ import vat$17 from "../nl/vat.js";
25
+ import nip from "../pl/nip.js";
26
+ import vat$18 from "../pt/vat.js";
27
+ import vat$19 from "../ro/vat.js";
28
+ import vat$20 from "../se/vat.js";
29
+ import vat$21 from "../si/vat.js";
30
+ import dic$1 from "../sk/dic.js";
31
+ //#region src/eu/vat.ts
32
+ /**
33
+ * EU VAT (European Union VAT Number).
34
+ *
35
+ * Dispatcher that routes to per-country VAT
36
+ * validators. Extracts the 2-letter country prefix
37
+ * and delegates to the matching country module.
38
+ *
39
+ * Special cases:
40
+ * - EL → Greece (gr.vat)
41
+ * - XI → Northern Ireland (gb.vat)
42
+ *
43
+ * @see https://ec.europa.eu/taxation_customs/vies/
44
+ */
45
+ /**
46
+ * Map of EU VAT country prefixes to their
47
+ * country-specific validators.
48
+ */
49
+ const VALIDATORS = {
50
+ AT: uid,
51
+ BE: vat,
52
+ BG: vat$1,
53
+ CY: vat$2,
54
+ CZ: dic,
55
+ DE: vat$3,
56
+ DK: vat$4,
57
+ EE: vat$5,
58
+ EL: vat$9,
59
+ ES: vat$6,
60
+ FI: vat$7,
61
+ FR: tva,
62
+ GR: vat$9,
63
+ HR: vat$10,
64
+ HU: vat$11,
65
+ IE: vat$12,
66
+ IT: iva,
67
+ LT: vat$13,
68
+ LU: vat$14,
69
+ LV: vat$15,
70
+ MT: vat$16,
71
+ NL: vat$17,
72
+ PL: nip,
73
+ PT: vat$18,
74
+ RO: vat$19,
75
+ SE: vat$20,
76
+ SI: vat$21,
77
+ SK: dic$1,
78
+ XI: vat$8
79
+ };
80
+ /**
81
+ * Extract the 2-letter country prefix and the
82
+ * remaining number from an EU VAT string.
83
+ */
84
+ const splitPrefix = (value) => {
85
+ const v = clean(value, " -").toUpperCase();
86
+ if (v.length < 3) return void 0;
87
+ const cc = v.slice(0, 2);
88
+ if (!/^[A-Z]{2}$/.test(cc)) return void 0;
89
+ return {
90
+ cc,
91
+ rest: v.slice(2)
92
+ };
93
+ };
94
+ const compact = (value) => {
95
+ const parts = splitPrefix(value);
96
+ if (parts === void 0) return clean(value, " -").toUpperCase();
97
+ const validator = VALIDATORS[parts.cc];
98
+ if (validator === void 0) return clean(value, " -").toUpperCase();
99
+ return `${parts.cc}${validator.compact(parts.rest)}`;
100
+ };
101
+ const validate = (value) => {
102
+ const parts = splitPrefix(value);
103
+ if (parts === void 0) return err("INVALID_FORMAT", "EU VAT must start with a 2-letter country code");
104
+ const validator = VALIDATORS[parts.cc];
105
+ if (validator === void 0) return err("INVALID_COMPONENT", `Unsupported EU VAT country: ${parts.cc}`);
106
+ const result = validator.validate(parts.rest);
107
+ if (!result.valid) return result;
108
+ return {
109
+ valid: true,
110
+ compact: `${parts.cc}${result.compact}`
111
+ };
112
+ };
113
+ /**
114
+ * Format returns the compact EU VAT form:
115
+ * `CC` + country-compacted number. Equivalent to
116
+ * compact() because country format() methods
117
+ * prepend their own prefix (e.g., AT UID format
118
+ * returns "ATU..."), which would cause double-
119
+ * prefixing if used here.
120
+ */
121
+ const format = (value) => {
122
+ const parts = splitPrefix(value);
123
+ if (parts === void 0) return value;
124
+ const validator = VALIDATORS[parts.cc];
125
+ if (validator === void 0) return value;
126
+ return `${parts.cc}${validator.compact(parts.rest)}`;
127
+ };
128
+ /** European Union VAT Number. */
129
+ const euVat = {
130
+ name: "EU VAT Number",
131
+ localName: "EU VAT Number",
132
+ abbreviation: "EU VAT",
133
+ aliases: ["EU VAT", "VAT identification number"],
134
+ candidatePattern: "[A-Z]{2}\\d{8,12}",
135
+ entityType: "company",
136
+ sourceUrl: "https://ec.europa.eu/taxation_customs/vies/",
137
+ examples: ["ATU13585627", "DE136695976"],
138
+ compact,
139
+ format,
140
+ validate
141
+ };
142
+ //#endregion
143
+ export { compact, euVat as default, format, validate };
144
+
145
+ //# sourceMappingURL=vat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vat.js","names":["atUid","beVat","bgVat","cyVat","czDic","deVat","dkVat","eeVat","grVat","esVat","fiVat","frTva","hrVat","huVat","ieVat","itIva","ltVat","luVat","lvVat","mtVat","nlVat","plNip","ptVat","roVat","seVat","siVat","skDic","gbVat"],"sources":["../../src/eu/vat.ts"],"sourcesContent":["/**\n * EU VAT (European Union VAT Number).\n *\n * Dispatcher that routes to per-country VAT\n * validators. Extracts the 2-letter country prefix\n * and delegates to the matching country module.\n *\n * Special cases:\n * - EL → Greece (gr.vat)\n * - XI → Northern Ireland (gb.vat)\n *\n * @see https://ec.europa.eu/taxation_customs/vies/\n */\n\nimport { clean } from \"#util/clean\";\nimport { err } from \"#util/result\";\n\nimport atUid from \"../at/uid\";\nimport beVat from \"../be/vat\";\nimport bgVat from \"../bg/vat\";\nimport cyVat from \"../cy/vat\";\nimport czDic from \"../cz/dic\";\nimport deVat from \"../de/vat\";\nimport dkVat from \"../dk/vat\";\nimport eeVat from \"../ee/vat\";\nimport esVat from \"../es/vat\";\nimport fiVat from \"../fi/vat\";\nimport frTva from \"../fr/tva\";\nimport gbVat from \"../gb/vat\";\nimport grVat from \"../gr/vat\";\nimport hrVat from \"../hr/vat\";\nimport huVat from \"../hu/vat\";\nimport ieVat from \"../ie/vat\";\nimport itIva from \"../it/iva\";\nimport ltVat from \"../lt/vat\";\nimport luVat from \"../lu/vat\";\nimport lvVat from \"../lv/vat\";\nimport mtVat from \"../mt/vat\";\nimport nlVat from \"../nl/vat\";\nimport plNip from \"../pl/nip\";\nimport ptVat from \"../pt/vat\";\nimport roVat from \"../ro/vat\";\nimport seVat from \"../se/vat\";\nimport siVat from \"../si/vat\";\nimport skDic from \"../sk/dic\";\nimport type { Validator, ValidateResult } from \"../types\";\n\ntype CountryValidator = {\n compact: (value: string) => string;\n validate: (value: string) => ValidateResult;\n format: (value: string) => string;\n};\n\n/**\n * Map of EU VAT country prefixes to their\n * country-specific validators.\n */\nconst VALIDATORS: Record<string, CountryValidator> = {\n AT: atUid,\n BE: beVat,\n BG: bgVat,\n CY: cyVat,\n CZ: czDic,\n DE: deVat,\n DK: dkVat,\n EE: eeVat,\n EL: grVat, // Greece uses EL prefix in EU VAT\n ES: esVat,\n FI: fiVat,\n FR: frTva,\n GR: grVat,\n HR: hrVat,\n HU: huVat,\n IE: ieVat,\n IT: itIva,\n LT: ltVat,\n LU: luVat,\n LV: lvVat,\n MT: mtVat,\n NL: nlVat,\n PL: plNip,\n PT: ptVat,\n RO: roVat,\n SE: seVat,\n SI: siVat,\n SK: skDic,\n XI: gbVat, // Northern Ireland\n};\n\n/**\n * Extract the 2-letter country prefix and the\n * remaining number from an EU VAT string.\n */\nconst splitPrefix = (\n value: string,\n): { cc: string; rest: string } | undefined => {\n const v = clean(value, \" -\").toUpperCase();\n if (v.length < 3) return undefined;\n const cc = v.slice(0, 2);\n if (!/^[A-Z]{2}$/.test(cc)) return undefined;\n return { cc, rest: v.slice(2) };\n};\n\nconst compact = (value: string): string => {\n const parts = splitPrefix(value);\n if (parts === undefined) {\n return clean(value, \" -\").toUpperCase();\n }\n const validator = VALIDATORS[parts.cc];\n if (validator === undefined) {\n return clean(value, \" -\").toUpperCase();\n }\n return `${parts.cc}${validator.compact(parts.rest)}`;\n};\n\nconst validate = (value: string): ValidateResult => {\n const parts = splitPrefix(value);\n if (parts === undefined) {\n return err(\n \"INVALID_FORMAT\",\n \"EU VAT must start with a 2-letter country code\",\n );\n }\n const validator = VALIDATORS[parts.cc];\n if (validator === undefined) {\n return err(\n \"INVALID_COMPONENT\",\n `Unsupported EU VAT country: ${parts.cc}`,\n );\n }\n const result = validator.validate(parts.rest);\n if (!result.valid) return result;\n return {\n valid: true,\n compact: `${parts.cc}${result.compact}`,\n };\n};\n\n/**\n * Format returns the compact EU VAT form:\n * `CC` + country-compacted number. Equivalent to\n * compact() because country format() methods\n * prepend their own prefix (e.g., AT UID format\n * returns \"ATU...\"), which would cause double-\n * prefixing if used here.\n */\nconst format = (value: string): string => {\n const parts = splitPrefix(value);\n if (parts === undefined) return value;\n const validator = VALIDATORS[parts.cc];\n if (validator === undefined) return value;\n return `${parts.cc}${validator.compact(parts.rest)}`;\n};\n\n/** European Union VAT Number. */\nconst euVat: Validator = {\n name: \"EU VAT Number\",\n localName: \"EU VAT Number\",\n abbreviation: \"EU VAT\",\n aliases: [\"EU VAT\", \"VAT identification number\"] as const,\n candidatePattern: \"[A-Z]{2}\\\\d{8,12}\",\n entityType: \"company\",\n sourceUrl: \"https://ec.europa.eu/taxation_customs/vies/\",\n examples: [\"ATU13585627\", \"DE136695976\"] as const,\n compact,\n format,\n validate,\n};\n\nexport default euVat;\nexport { compact, format, validate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,MAAM,aAA+C;CACnD,IAAIA;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIH;CACJ,IAAII;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACL;;;;;AAMD,MAAM,eACJ,UAC6C;CAC7C,MAAM,IAAI,MAAM,OAAO,KAAK,CAAC,aAAa;AAC1C,KAAI,EAAE,SAAS,EAAG,QAAO,KAAA;CACzB,MAAM,KAAK,EAAE,MAAM,GAAG,EAAE;AACxB,KAAI,CAAC,aAAa,KAAK,GAAG,CAAE,QAAO,KAAA;AACnC,QAAO;EAAE;EAAI,MAAM,EAAE,MAAM,EAAE;EAAE;;AAGjC,MAAM,WAAW,UAA0B;CACzC,MAAM,QAAQ,YAAY,MAAM;AAChC,KAAI,UAAU,KAAA,EACZ,QAAO,MAAM,OAAO,KAAK,CAAC,aAAa;CAEzC,MAAM,YAAY,WAAW,MAAM;AACnC,KAAI,cAAc,KAAA,EAChB,QAAO,MAAM,OAAO,KAAK,CAAC,aAAa;AAEzC,QAAO,GAAG,MAAM,KAAK,UAAU,QAAQ,MAAM,KAAK;;AAGpD,MAAM,YAAY,UAAkC;CAClD,MAAM,QAAQ,YAAY,MAAM;AAChC,KAAI,UAAU,KAAA,EACZ,QAAO,IACL,kBACA,iDACD;CAEH,MAAM,YAAY,WAAW,MAAM;AACnC,KAAI,cAAc,KAAA,EAChB,QAAO,IACL,qBACA,+BAA+B,MAAM,KACtC;CAEH,MAAM,SAAS,UAAU,SAAS,MAAM,KAAK;AAC7C,KAAI,CAAC,OAAO,MAAO,QAAO;AAC1B,QAAO;EACL,OAAO;EACP,SAAS,GAAG,MAAM,KAAK,OAAO;EAC/B;;;;;;;;;;AAWH,MAAM,UAAU,UAA0B;CACxC,MAAM,QAAQ,YAAY,MAAM;AAChC,KAAI,UAAU,KAAA,EAAW,QAAO;CAChC,MAAM,YAAY,WAAW,MAAM;AACnC,KAAI,cAAc,KAAA,EAAW,QAAO;AACpC,QAAO,GAAG,MAAM,KAAK,UAAU,QAAQ,MAAM,KAAK;;;AAIpD,MAAM,QAAmB;CACvB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,UAAU,4BAA4B;CAChD,kBAAkB;CAClB,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,eAAe,cAAc;CACxC;CACA;CACA;CACD"}
@@ -0,0 +1,17 @@
1
+ import { ParsedPersonId, ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/fi/hetu.d.ts
4
+
5
+ declare const compact: (value: string) => string;
6
+ declare const validate: (value: string) => ValidateResult;
7
+ declare const format: (value: string) => string;
8
+ /**
9
+ * Extract birth date and gender from a HETU.
10
+ * Returns null if the value is not valid.
11
+ */
12
+ declare const parse: (value: string) => ParsedPersonId | null;
13
+ /** Finnish Personal Identity Code. */
14
+ declare const hetu: Validator;
15
+ //#endregion
16
+ export { compact, hetu as default, format, parse, validate };
17
+ //# sourceMappingURL=hetu.d.ts.map
@@ -0,0 +1,107 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { err } from "../_util/result.js";
3
+ import { isdigits } from "../_util/strings.js";
4
+ import { isValidDate } from "../_util/date.js";
5
+ //#region src/fi/hetu.ts
6
+ /**
7
+ * HETU (Henkilötunnus).
8
+ *
9
+ * Finnish personal identity code. 11 characters in
10
+ * format DDMMYY+CCC+X where the separator indicates
11
+ * the century and X is a check character.
12
+ *
13
+ * @see https://dvv.fi/en/personal-identity-code
14
+ */
15
+ const CHECK_CHARS = "0123456789ABCDEFHJKLMNPRSTUVWXY";
16
+ const SEPARATORS_1800 = new Set(["+"]);
17
+ const SEPARATORS_1900 = new Set([
18
+ "-",
19
+ "Y",
20
+ "X",
21
+ "W",
22
+ "V",
23
+ "U"
24
+ ]);
25
+ const SEPARATORS_2000 = new Set([
26
+ "A",
27
+ "B",
28
+ "C",
29
+ "D",
30
+ "E",
31
+ "F"
32
+ ]);
33
+ const compact = (value) => clean(value, " ").toUpperCase();
34
+ const validate = (value) => {
35
+ const v = compact(value);
36
+ if (v.length !== 11) return err("INVALID_LENGTH", "HETU must be exactly 11 characters");
37
+ const dd = v.slice(0, 2);
38
+ const mm = v.slice(2, 4);
39
+ const yy = v.slice(4, 6);
40
+ const separator = v.charAt(6);
41
+ const serial = v.slice(7, 10);
42
+ const checkChar = v.charAt(10);
43
+ if (!isdigits(dd) || !isdigits(mm) || !isdigits(yy)) return err("INVALID_FORMAT", "HETU date part must be digits");
44
+ if (!isdigits(serial)) return err("INVALID_FORMAT", "HETU serial must be digits");
45
+ let century;
46
+ if (SEPARATORS_1800.has(separator)) century = 1800;
47
+ else if (SEPARATORS_1900.has(separator)) century = 1900;
48
+ else if (SEPARATORS_2000.has(separator)) century = 2e3;
49
+ else return err("INVALID_COMPONENT", "HETU separator is invalid");
50
+ if (!isValidDate(century + Number(yy), Number(mm), Number(dd))) return err("INVALID_COMPONENT", "HETU contains an invalid date");
51
+ const serialNum = Number(serial);
52
+ if (serialNum < 2) return err("INVALID_COMPONENT", "HETU individual number must be >= 002");
53
+ if (serialNum >= 900) return err("INVALID_COMPONENT", "HETU temporary individual range 900-999");
54
+ const checkNum = Number(`${dd}${mm}${yy}${serial}`);
55
+ if (checkChar !== CHECK_CHARS.charAt(checkNum % 31)) return err("INVALID_CHECKSUM", "HETU check character does not match");
56
+ return {
57
+ valid: true,
58
+ compact: v
59
+ };
60
+ };
61
+ const format = (value) => compact(value);
62
+ /**
63
+ * Extract birth date and gender from a HETU.
64
+ * Returns null if the value is not valid.
65
+ */
66
+ const parse = (value) => {
67
+ const result = validate(value);
68
+ if (!result.valid) return null;
69
+ const v = result.compact;
70
+ const dd = Number(v.slice(0, 2));
71
+ const mm = Number(v.slice(2, 4));
72
+ const yy = Number(v.slice(4, 6));
73
+ const separator = v.charAt(6);
74
+ const serial = Number(v.slice(7, 10));
75
+ let century;
76
+ if (SEPARATORS_1800.has(separator)) century = 1800;
77
+ else if (SEPARATORS_1900.has(separator)) century = 1900;
78
+ else century = 2e3;
79
+ const year = century + yy;
80
+ return {
81
+ birthDate: new Date(year, mm - 1, dd),
82
+ gender: serial % 2 === 0 ? "female" : "male"
83
+ };
84
+ };
85
+ /** Finnish Personal Identity Code. */
86
+ const hetu = {
87
+ name: "Finnish Personal ID",
88
+ localName: "Henkilötunnus",
89
+ abbreviation: "HETU",
90
+ aliases: [
91
+ "henkilötunnus",
92
+ "HETU",
93
+ "sosiaaliturvatunnus"
94
+ ],
95
+ candidatePattern: "\\d{6}[-+A]\\d{3}[\\dA-Z]",
96
+ country: "FI",
97
+ entityType: "person",
98
+ sourceUrl: "https://dvv.fi/en/personal-identity-code",
99
+ examples: ["131052-308T"],
100
+ compact,
101
+ format,
102
+ validate
103
+ };
104
+ //#endregion
105
+ export { compact, hetu as default, format, parse, validate };
106
+
107
+ //# sourceMappingURL=hetu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hetu.js","names":[],"sources":["../../src/fi/hetu.ts"],"sourcesContent":["/**\n * HETU (Henkilötunnus).\n *\n * Finnish personal identity code. 11 characters in\n * format DDMMYY+CCC+X where the separator indicates\n * the century and X is a check character.\n *\n * @see https://dvv.fi/en/personal-identity-code\n */\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n Validator,\n} from \"../types\";\n\nconst CHECK_CHARS = \"0123456789ABCDEFHJKLMNPRSTUVWXY\";\n\nconst SEPARATORS_1800 = new Set([\"+\"]);\nconst SEPARATORS_1900 = new Set([\n \"-\",\n \"Y\",\n \"X\",\n \"W\",\n \"V\",\n \"U\",\n]);\nconst SEPARATORS_2000 = new Set([\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n]);\n\nconst compact = (value: string): string =>\n clean(value, \" \").toUpperCase();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"HETU must be exactly 11 characters\",\n );\n }\n\n const dd = v.slice(0, 2);\n const mm = v.slice(2, 4);\n const yy = v.slice(4, 6);\n const separator = v.charAt(6);\n const serial = v.slice(7, 10);\n const checkChar = v.charAt(10);\n\n if (!isdigits(dd) || !isdigits(mm) || !isdigits(yy)) {\n return err(\n \"INVALID_FORMAT\",\n \"HETU date part must be digits\",\n );\n }\n if (!isdigits(serial)) {\n return err(\n \"INVALID_FORMAT\",\n \"HETU serial must be digits\",\n );\n }\n\n let century: number;\n if (SEPARATORS_1800.has(separator)) {\n century = 1800;\n } else if (SEPARATORS_1900.has(separator)) {\n century = 1900;\n } else if (SEPARATORS_2000.has(separator)) {\n century = 2000;\n } else {\n return err(\n \"INVALID_COMPONENT\",\n \"HETU separator is invalid\",\n );\n }\n\n const year = century + Number(yy);\n const month = Number(mm);\n const day = Number(dd);\n\n if (!isValidDate(year, month, day)) {\n return err(\n \"INVALID_COMPONENT\",\n \"HETU contains an invalid date\",\n );\n }\n\n // Individual number must be >= 002\n const serialNum = Number(serial);\n if (serialNum < 2) {\n return err(\n \"INVALID_COMPONENT\",\n \"HETU individual number must be >= 002\",\n );\n }\n // Temporary range 900-999 is not valid\n if (serialNum >= 900) {\n return err(\n \"INVALID_COMPONENT\",\n \"HETU temporary individual range 900-999\",\n );\n }\n\n const checkNum = Number(`${dd}${mm}${yy}${serial}`);\n const expected = CHECK_CHARS.charAt(checkNum % 31);\n if (checkChar !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"HETU check character does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/**\n * Extract birth date and gender from a HETU.\n * Returns null if the value is not valid.\n */\nconst parse = (value: string): ParsedPersonId | null => {\n const result = validate(value);\n if (!result.valid) return null;\n\n const v = result.compact;\n const dd = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const yy = Number(v.slice(4, 6));\n const separator = v.charAt(6);\n const serial = Number(v.slice(7, 10));\n\n let century: number;\n if (SEPARATORS_1800.has(separator)) {\n century = 1800;\n } else if (SEPARATORS_1900.has(separator)) {\n century = 1900;\n } else {\n century = 2000;\n }\n\n const year = century + yy;\n\n return {\n birthDate: new Date(year, mm - 1, dd),\n gender: serial % 2 === 0 ? \"female\" : \"male\",\n };\n};\n\n/** Finnish Personal Identity Code. */\nconst hetu: Validator = {\n name: \"Finnish Personal ID\",\n localName: \"Henkilötunnus\",\n abbreviation: \"HETU\",\n aliases: [\n \"henkilötunnus\",\n \"HETU\",\n \"sosiaaliturvatunnus\",\n ] as const,\n candidatePattern: \"\\\\d{6}[-+A]\\\\d{3}[\\\\dA-Z]\",\n country: \"FI\",\n entityType: \"person\",\n sourceUrl: \"https://dvv.fi/en/personal-identity-code\",\n examples: [\"131052-308T\"] as const,\n compact,\n format,\n validate,\n};\n\nexport default hetu;\nexport { compact, format, parse, validate };\n"],"mappings":";;;;;;;;;;;;;;AAqBA,MAAM,cAAc;AAEpB,MAAM,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC;AACtC,MAAM,kBAAkB,IAAI,IAAI;CAC9B;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AACF,MAAM,kBAAkB,IAAI,IAAI;CAC9B;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,CAAC,aAAa;AAEjC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,qCACD;CAGH,MAAM,KAAK,EAAE,MAAM,GAAG,EAAE;CACxB,MAAM,KAAK,EAAE,MAAM,GAAG,EAAE;CACxB,MAAM,KAAK,EAAE,MAAM,GAAG,EAAE;CACxB,MAAM,YAAY,EAAE,OAAO,EAAE;CAC7B,MAAM,SAAS,EAAE,MAAM,GAAG,GAAG;CAC7B,MAAM,YAAY,EAAE,OAAO,GAAG;AAE9B,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CACjD,QAAO,IACL,kBACA,gCACD;AAEH,KAAI,CAAC,SAAS,OAAO,CACnB,QAAO,IACL,kBACA,6BACD;CAGH,IAAI;AACJ,KAAI,gBAAgB,IAAI,UAAU,CAChC,WAAU;UACD,gBAAgB,IAAI,UAAU,CACvC,WAAU;UACD,gBAAgB,IAAI,UAAU,CACvC,WAAU;KAEV,QAAO,IACL,qBACA,4BACD;AAOH,KAAI,CAAC,YAJQ,UAAU,OAAO,GAAG,EACnB,OAAO,GAAG,EACZ,OAAO,GAAG,CAEY,CAChC,QAAO,IACL,qBACA,gCACD;CAIH,MAAM,YAAY,OAAO,OAAO;AAChC,KAAI,YAAY,EACd,QAAO,IACL,qBACA,wCACD;AAGH,KAAI,aAAa,IACf,QAAO,IACL,qBACA,0CACD;CAGH,MAAM,WAAW,OAAO,GAAG,KAAK,KAAK,KAAK,SAAS;AAEnD,KAAI,cADa,YAAY,OAAO,WAAW,GAAG,CAEhD,QAAO,IACL,oBACA,sCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;;;;AAMxD,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,MAAM;AAC9B,KAAI,CAAC,OAAO,MAAO,QAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,YAAY,EAAE,OAAO,EAAE;CAC7B,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;CAErC,IAAI;AACJ,KAAI,gBAAgB,IAAI,UAAU,CAChC,WAAU;UACD,gBAAgB,IAAI,UAAU,CACvC,WAAU;KAEV,WAAU;CAGZ,MAAM,OAAO,UAAU;AAEvB,QAAO;EACL,WAAW,IAAI,KAAK,MAAM,KAAK,GAAG,GAAG;EACrC,QAAQ,SAAS,MAAM,IAAI,WAAW;EACvC;;;AAIH,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,cAAc;CACzB;CACA;CACA;CACD"}
@@ -0,0 +1,10 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import hetu from "./hetu.js";
3
+ import vat from "./vat.js";
4
+ import ytunnus from "./ytunnus.js";
5
+
6
+ //#region src/fi/mod.d.ts
7
+
8
+ //#endregion
9
+ export { hetu, mod_d_exports, vat, ytunnus };
10
+ //# sourceMappingURL=mod.d.ts.map
package/dist/fi/mod.js ADDED
@@ -0,0 +1,14 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import vat from "./vat.js";
3
+ import hetu from "./hetu.js";
4
+ import ytunnus from "./ytunnus.js";
5
+ //#region src/fi/mod.ts
6
+ var fi_exports = /* @__PURE__ */ __exportAll({
7
+ hetu: () => hetu,
8
+ vat: () => vat,
9
+ ytunnus: () => ytunnus
10
+ });
11
+ //#endregion
12
+ export { fi_exports, hetu, vat, ytunnus };
13
+
14
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/fi/mod.ts"],"sourcesContent":["export { default as hetu } from \"./hetu\";\nexport { default as vat } from \"./vat\";\nexport { default as ytunnus } from \"./ytunnus\";\n"],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/fi/vat.d.ts
4
+
5
+ declare const compact: (value: string) => string;
6
+ declare const validate: (value: string) => ValidateResult;
7
+ declare const format: (value: string) => string;
8
+ /** Generate a random valid Finnish VAT number. */
9
+ declare const generate: () => string;
10
+ /** Finnish VAT Number. */
11
+ declare const vat: Validator;
12
+ //#endregion
13
+ export { compact, vat as default, format, generate, validate };
14
+ //# sourceMappingURL=vat.d.ts.map