@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iban.js","names":[],"sources":["../src/iban.ts"],"sourcesContent":["/**\n * IBAN (International Bank Account Number).\n *\n * ISO 13616. Format: 2-letter country code +\n * 2 check digits + up to 30 alphanumeric BBAN\n * characters. Validated using ISO 7064 Mod 97-10.\n */\n\nimport { mod97 } from \"#checksums/mod97\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { charValue, isalnum } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"./types\";\n\n/**\n * BBAN format regex by country code.\n * Sourced from SWIFT IBAN Registry.\n */\nconst BBAN_FORMAT: Record<string, RegExp> = {\n AD: /^\\d{8}[A-Z0-9]{12}$/,\n AE: /^\\d{19}$/,\n AL: /^\\d{8}[A-Z0-9]{16}$/,\n AT: /^\\d{16}$/,\n AZ: /^[A-Z]{4}[A-Z0-9]{20}$/,\n BA: /^\\d{16}$/,\n BE: /^\\d{12}$/,\n BG: /^[A-Z]{4}\\d{6}[A-Z0-9]{8}$/,\n BH: /^[A-Z]{4}[A-Z0-9]{14}$/,\n BR: /^\\d{23}[A-Z]{1}[A-Z0-9]{1}$/,\n BY: /^[A-Z0-9]{4}\\d{20}$/,\n CH: /^\\d{17}$/,\n CR: /^0\\d{17}$/,\n CY: /^\\d{8}[A-Z0-9]{16}$/,\n CZ: /^\\d{20}$/,\n DE: /^\\d{18}$/,\n DK: /^\\d{14}$/,\n DO: /^[A-Z0-9]{4}\\d{20}$/,\n EE: /^\\d{16}$/,\n EG: /^\\d{25}$/,\n ES: /^\\d{20}$/,\n FI: /^\\d{14}$/,\n FO: /^\\d{14}$/,\n FR: /^\\d{10}[A-Z0-9]{11}\\d{2}$/,\n GB: /^[A-Z]{4}\\d{14}$/,\n GE: /^[A-Z]{2}\\d{16}$/,\n GI: /^[A-Z]{4}[A-Z0-9]{15}$/,\n GL: /^\\d{14}$/,\n GR: /^\\d{7}[A-Z0-9]{16}$/,\n GT: /^[A-Z0-9]{24}$/,\n HR: /^\\d{17}$/,\n HU: /^\\d{24}$/,\n IE: /^[A-Z]{4}\\d{14}$/,\n IL: /^\\d{19}$/,\n IQ: /^[A-Z]{4}\\d{15}$/,\n IS: /^\\d{22}$/,\n IT: /^[A-Z]\\d{10}[A-Z0-9]{12}$/,\n JO: /^[A-Z]{4}\\d{22}$/,\n KW: /^[A-Z]{4}[A-Z0-9]{22}$/,\n KZ: /^\\d{16}$/,\n LB: /^\\d{4}[A-Z0-9]{20}$/,\n LC: /^[A-Z]{4}[A-Z0-9]{24}$/,\n LI: /^\\d{17}$/,\n LT: /^\\d{16}$/,\n LU: /^\\d{16}$/,\n LV: /^[A-Z]{4}[A-Z0-9]{13}$/,\n MC: /^\\d{10}[A-Z0-9]{11}\\d{2}$/,\n MD: /^[A-Z0-9]{20}$/,\n ME: /^\\d{18}$/,\n MK: /^\\d{3}[A-Z0-9]{10}\\d{2}$/,\n MR: /^\\d{23}$/,\n MT: /^[A-Z]{4}\\d{5}[A-Z0-9]{18}$/,\n MU: /^[A-Z]{4}\\d{19}[A-Z]{3}$/,\n NI: /^[A-Z]{4}\\d{24}$/,\n NL: /^[A-Z]{4}\\d{10}$/,\n NO: /^\\d{11}$/,\n PK: /^[A-Z]{4}[A-Z0-9]{16}$/,\n PL: /^\\d{24}$/,\n PS: /^[A-Z]{4}[A-Z0-9]{21}$/,\n PT: /^\\d{21}$/,\n QA: /^[A-Z]{4}[A-Z0-9]{21}$/,\n RO: /^[A-Z]{4}[A-Z0-9]{16}$/,\n RS: /^\\d{18}$/,\n SA: /^\\d{20}$/,\n SC: /^[A-Z]{4}\\d{20}[A-Z]{3}$/,\n SD: /^\\d{14}$/,\n SE: /^\\d{20}$/,\n SI: /^\\d{15}$/,\n SK: /^\\d{20}$/,\n SM: /^[A-Z]\\d{10}[A-Z0-9]{12}$/,\n ST: /^\\d{21}$/,\n SV: /^[A-Z]{4}\\d{20}$/,\n TL: /^\\d{19}$/,\n TN: /^\\d{20}$/,\n TR: /^\\d{6}[A-Z0-9]{16}$/,\n UA: /^\\d{6}[A-Z0-9]{19}$/,\n VA: /^\\d{18}$/,\n VG: /^[A-Z]{4}\\d{16}$/,\n XK: /^\\d{16}$/,\n};\n\n/** IBAN total length by country code. */\nconst LENGTHS: Record<string, number> = {\n AD: 24,\n AE: 23,\n AL: 28,\n AT: 20,\n AZ: 28,\n BA: 20,\n BE: 16,\n BG: 22,\n BH: 22,\n BI: 27,\n BR: 29,\n BY: 28,\n CH: 21,\n CR: 22,\n CY: 28,\n CZ: 24,\n DE: 22,\n DJ: 27,\n DK: 18,\n DO: 28,\n EE: 20,\n EG: 29,\n ES: 24,\n FI: 18,\n FO: 18,\n FR: 27,\n GB: 22,\n GE: 22,\n GI: 23,\n GL: 18,\n GR: 27,\n GT: 28,\n HR: 21,\n HU: 28,\n IE: 22,\n IL: 23,\n IQ: 23,\n IS: 26,\n IT: 27,\n JO: 30,\n KW: 30,\n KZ: 20,\n LB: 28,\n LC: 32,\n LI: 21,\n LT: 20,\n LU: 20,\n LV: 21,\n LY: 25,\n MC: 27,\n MD: 24,\n ME: 22,\n MK: 19,\n MN: 20,\n MR: 27,\n MT: 31,\n MU: 30,\n NI: 28,\n NL: 18,\n NO: 15,\n PK: 24,\n PL: 28,\n PS: 29,\n PT: 25,\n QA: 29,\n RO: 24,\n RS: 22,\n RU: 33,\n SA: 24,\n SC: 31,\n SD: 18,\n SE: 24,\n SI: 19,\n SK: 24,\n SM: 27,\n SN: 28,\n SO: 23,\n ST: 25,\n SV: 28,\n TL: 23,\n TN: 24,\n TR: 26,\n UA: 29,\n VA: 22,\n VG: 24,\n XK: 20,\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\n/**\n * Convert letters to numbers (A=10, ..., Z=35)\n * and rearrange for mod-97 check.\n */\nconst toNumeric = (iban: string): string => {\n const rearranged = iban.slice(4) + iban.slice(0, 4);\n let result = \"\";\n for (let i = 0; i < rearranged.length; i++) {\n const ch = rearranged[i];\n if (ch !== undefined) {\n result += String(charValue(ch));\n }\n }\n return result;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length < 5) {\n return err(\"INVALID_LENGTH\", \"IBAN is too short\");\n }\n if (!isalnum(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"IBAN must contain only letters and digits\",\n );\n }\n const cc = v.slice(0, 2);\n if (!/^[A-Z]{2}$/.test(cc)) {\n return err(\n \"INVALID_COMPONENT\",\n \"IBAN must start with a 2-letter country code\",\n );\n }\n const expectedLen = LENGTHS[cc];\n if (\n expectedLen !== undefined &&\n v.length !== expectedLen\n ) {\n return err(\n \"INVALID_LENGTH\",\n `IBAN for ${cc} must be ${String(expectedLen)} characters`,\n );\n }\n // Validate BBAN format (country-specific)\n const bban = v.slice(4);\n const bbanRegex = BBAN_FORMAT[cc];\n if (bbanRegex !== undefined && !bbanRegex.test(bban)) {\n return err(\n \"INVALID_FORMAT\",\n `IBAN BBAN format is invalid for ${cc}`,\n );\n }\n const numeric = toNumeric(v);\n if (mod97(numeric) !== 1) {\n return err(\n \"INVALID_CHECKSUM\",\n \"IBAN check digits are incorrect\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n const groups: string[] = [];\n for (let i = 0; i < v.length; i += 4) {\n groups.push(v.slice(i, i + 4));\n }\n return groups.join(\" \");\n};\n\n/**\n * Countries supported by generate(). All have\n * all-digit BBANs for simplicity.\n */\nconst GENERATE_COUNTRIES = [\"CZ\", \"DE\", \"SK\"] as const;\n\ntype GenerateCountry = (typeof GENERATE_COUNTRIES)[number];\n\n/** BBAN lengths for generate()-supported countries. */\nconst BBAN_LENGTHS: Record<GenerateCountry, number> = {\n CZ: 20,\n DE: 18,\n SK: 20,\n};\n\n/**\n * Compute IBAN check digits for a country code\n * and BBAN. Returns a 2-character string.\n */\nconst computeCheckDigits = (\n cc: string,\n bban: string,\n): string => {\n const placeholder = `${bban}${cc}00`;\n let numeric = \"\";\n for (let i = 0; i < placeholder.length; i++) {\n const ch = placeholder[i];\n if (ch !== undefined) {\n numeric += String(charValue(ch));\n }\n }\n const remainder = mod97(numeric);\n const check = 98 - remainder;\n return String(check).padStart(2, \"0\");\n};\n\n/**\n * Generate a random valid IBAN for CZ, DE, or SK.\n */\nconst generate = (): string => {\n const idx = randomInt(0, GENERATE_COUNTRIES.length - 1);\n const cc = GENERATE_COUNTRIES[idx] as GenerateCountry;\n const bbanLen = BBAN_LENGTHS[cc];\n const bban = randomDigits(bbanLen);\n const checkDigits = computeCheckDigits(cc, bban);\n return `${cc}${checkDigits}${bban}`;\n};\n\n/** International Bank Account Number. */\nconst iban: Validator = {\n name: \"IBAN\",\n localName: \"IBAN\",\n abbreviation: \"IBAN\",\n aliases: [\"IBAN\"] as const,\n candidatePattern:\n \"[A-Z]{2}\\\\d{2}[\\\\s]?[A-Z0-9]{4}[\\\\s]?(?:[A-Z0-9]{4}[\\\\s]?){2,7}[A-Z0-9]{1,4}\",\n entityType: \"any\",\n description:\n \"International bank account number per ISO 13616\",\n sourceUrl:\n \"https://www.swift.com/standards/data-standards/iban-international-bank-account-number\",\n examples: [\n \"GB29NWBK60161331926819\",\n \"DE89370400440532013000\",\n ] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default iban;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,MAAM,cAAsC;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;;AAGD,MAAM,UAAkC;CACtC,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;AAED,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,aAAa;;;;;AAMlC,MAAM,aAAa,SAAyB;CAC1C,MAAM,aAAa,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM,GAAG,EAAE;CACnD,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;EAC1C,MAAM,KAAK,WAAW;AACtB,MAAI,OAAO,KAAA,EACT,WAAU,OAAO,UAAU,GAAG,CAAC;;AAGnC,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,SAAS,EACb,QAAO,IAAI,kBAAkB,oBAAoB;AAEnD,KAAI,CAAC,QAAQ,EAAE,CACb,QAAO,IACL,kBACA,4CACD;CAEH,MAAM,KAAK,EAAE,MAAM,GAAG,EAAE;AACxB,KAAI,CAAC,aAAa,KAAK,GAAG,CACxB,QAAO,IACL,qBACA,+CACD;CAEH,MAAM,cAAc,QAAQ;AAC5B,KACE,gBAAgB,KAAA,KAChB,EAAE,WAAW,YAEb,QAAO,IACL,kBACA,YAAY,GAAG,WAAW,OAAO,YAAY,CAAC,aAC/C;CAGH,MAAM,OAAO,EAAE,MAAM,EAAE;CACvB,MAAM,YAAY,YAAY;AAC9B,KAAI,cAAc,KAAA,KAAa,CAAC,UAAU,KAAK,KAAK,CAClD,QAAO,IACL,kBACA,mCAAmC,KACpC;AAGH,KAAI,MADY,UAAU,EAAE,CACV,KAAK,EACrB,QAAO,IACL,oBACA,kCACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;CACxB,MAAM,SAAmB,EAAE;AAC3B,MAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,EACjC,QAAO,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC;AAEhC,QAAO,OAAO,KAAK,IAAI;;;;;;AAOzB,MAAM,qBAAqB;CAAC;CAAM;CAAM;CAAK;;AAK7C,MAAM,eAAgD;CACpD,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;;;;;AAMD,MAAM,sBACJ,IACA,SACW;CACX,MAAM,cAAc,GAAG,OAAO,GAAG;CACjC,IAAI,UAAU;AACd,MAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;EAC3C,MAAM,KAAK,YAAY;AACvB,MAAI,OAAO,KAAA,EACT,YAAW,OAAO,UAAU,GAAG,CAAC;;CAIpC,MAAM,QAAQ,KADI,MAAM,QAAQ;AAEhC,QAAO,OAAO,MAAM,CAAC,SAAS,GAAG,IAAI;;;;;AAMvC,MAAM,iBAAyB;CAE7B,MAAM,KAAK,mBADC,UAAU,GAAG,mBAAmB,SAAS,EAAE;CAEvD,MAAM,UAAU,aAAa;CAC7B,MAAM,OAAO,aAAa,QAAQ;AAElC,QAAO,GAAG,KADU,mBAAmB,IAAI,KAAK,GACnB;;;AAI/B,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO;CACjB,kBACE;CACF,YAAY;CACZ,aACE;CACF,WACE;CACF,UAAU,CACR,0BACA,yBACD;CACD;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import npwp from "./npwp.js";
3
+
4
+ //#region src/id/mod.d.ts
5
+
6
+ //#endregion
7
+ export { mod_d_exports, npwp };
8
+ //# sourceMappingURL=mod.d.ts.map
package/dist/id/mod.js ADDED
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import npwp from "./npwp.js";
3
+ //#region src/id/mod.ts
4
+ var id_exports = /* @__PURE__ */ __exportAll({ npwp: () => npwp });
5
+ //#endregion
6
+ export { id_exports, npwp };
7
+
8
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/id/mod.ts"],"sourcesContent":["export { default as npwp } from \"./npwp\";\n"],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/id/npwp.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 15-digit NPWP. */
9
+ declare const generate: () => string;
10
+ /** Indonesian Taxpayer Identification Number. */
11
+ declare const npwp: Validator;
12
+ //#endregion
13
+ export { compact, npwp as default, format, generate, validate };
14
+ //# sourceMappingURL=npwp.d.ts.map
@@ -0,0 +1,133 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
5
+ import { isdigits } from "../_util/strings.js";
6
+ import { isValidDate } from "../_util/date.js";
7
+ //#region src/id/npwp.ts
8
+ /**
9
+ * NPWP (Nomor Pokok Wajib Pajak, Indonesian tax ID).
10
+ *
11
+ * 15 or 16 digits. The 15-digit (legacy) format has a
12
+ * Luhn check on the first 9 digits. The 16-digit format
13
+ * is either a NIK (starts with non-zero) validated as a
14
+ * province-code and birth-date checks, or the legacy
15
+ * format prefixed with 0 (Luhn on first 10 digits).
16
+ *
17
+ * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Indonesia-TIN.pdf
18
+ */
19
+ const compact = (value) => clean(value, " .-");
20
+ /**
21
+ * Valid 2-digit province codes for NIK, sourced from
22
+ * python-stdnum's id/loc numdb.
23
+ */
24
+ const NIK_PROVINCES = new Set([
25
+ "11",
26
+ "12",
27
+ "13",
28
+ "14",
29
+ "15",
30
+ "16",
31
+ "17",
32
+ "18",
33
+ "19",
34
+ "21",
35
+ "31",
36
+ "32",
37
+ "33",
38
+ "34",
39
+ "35",
40
+ "36",
41
+ "51",
42
+ "52",
43
+ "53",
44
+ "61",
45
+ "62",
46
+ "63",
47
+ "64",
48
+ "71",
49
+ "72",
50
+ "73",
51
+ "74",
52
+ "75",
53
+ "76",
54
+ "81",
55
+ "82",
56
+ "91",
57
+ "94"
58
+ ]);
59
+ /**
60
+ * Validate a 16-digit NIK (Nomor Induk Kependudukan).
61
+ * Format: PPRRSSDDMMYYXXXX where PP = province,
62
+ * RRSS = regency/city + sub-district,
63
+ * DDMMYY = birth date (DD+40 for females),
64
+ * XXXX = serial.
65
+ */
66
+ const validateNik = (v) => {
67
+ if (!NIK_PROVINCES.has(v.slice(0, 2))) return err("INVALID_COMPONENT", "NIK province code is invalid");
68
+ let day = Number(v.slice(6, 8));
69
+ const month = Number(v.slice(8, 10));
70
+ const year = Number(v.slice(10, 12));
71
+ if (day > 40) day -= 40;
72
+ if (!isValidDate(1900 + year, month, day) && !isValidDate(2e3 + year, month, day)) return err("INVALID_COMPONENT", "NIK contains an invalid date");
73
+ return {
74
+ valid: true,
75
+ compact: v
76
+ };
77
+ };
78
+ const validate = (value) => {
79
+ const v = compact(value);
80
+ if (!isdigits(v)) return err("INVALID_FORMAT", "NPWP must contain only digits");
81
+ if (v.length === 15) {
82
+ if (!luhnValidate(v.slice(0, 9))) return err("INVALID_CHECKSUM", "NPWP Luhn check on first 9 digits failed");
83
+ return {
84
+ valid: true,
85
+ compact: v
86
+ };
87
+ }
88
+ if (v.length === 16) {
89
+ if (v[0] !== "0") return validateNik(v);
90
+ if (!luhnValidate(v.slice(0, 10))) return err("INVALID_CHECKSUM", "NPWP Luhn check on first 10 digits failed");
91
+ return {
92
+ valid: true,
93
+ compact: v
94
+ };
95
+ }
96
+ return err("INVALID_LENGTH", "NPWP must be 15 or 16 digits");
97
+ };
98
+ const format = (value) => {
99
+ const v = compact(value);
100
+ if (v.length === 16) return v;
101
+ return `${v.slice(0, 2)}.${v.slice(2, 5)}.${v.slice(5, 8)}.${v.slice(8, 9)}-${v.slice(9, 12)}.${v.slice(12)}`;
102
+ };
103
+ /** Generate a random valid 15-digit NPWP. */
104
+ const generate = () => {
105
+ for (;;) {
106
+ const p = randomDigits(8);
107
+ const cs = luhnChecksum(p + "0");
108
+ const c = p + String((10 - cs) % 10) + randomDigits(6);
109
+ if (validate(c).valid) return c;
110
+ }
111
+ };
112
+ /** Indonesian Taxpayer Identification Number. */
113
+ const npwp = {
114
+ name: "Indonesian Taxpayer Identification Number",
115
+ localName: "Nomor Pokok Wajib Pajak",
116
+ abbreviation: "NPWP",
117
+ aliases: ["NPWP", "Nomor Pokok Wajib Pajak"],
118
+ candidatePattern: "\\d{2}\\.?\\d{3}\\.?\\d{3}\\.?\\d-?\\d{3}\\.?\\d{3}",
119
+ country: "ID",
120
+ entityType: "any",
121
+ lengths: [15, 16],
122
+ examples: ["013000666091000", "016090524017000"],
123
+ description: "15 or 16-digit tax identification number issued by the Directorate General of Taxes",
124
+ sourceUrl: "https://en.wikipedia.org/wiki/Tax_identification_number#Indonesia",
125
+ compact,
126
+ format,
127
+ validate,
128
+ generate
129
+ };
130
+ //#endregion
131
+ export { compact, npwp as default, format, generate, validate };
132
+
133
+ //# sourceMappingURL=npwp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npwp.js","names":[],"sources":["../../src/id/npwp.ts"],"sourcesContent":["/**\n * NPWP (Nomor Pokok Wajib Pajak, Indonesian tax ID).\n *\n * 15 or 16 digits. The 15-digit (legacy) format has a\n * Luhn check on the first 9 digits. The 16-digit format\n * is either a NIK (starts with non-zero) validated as a\n * province-code and birth-date checks, or the legacy\n * format prefixed with 0 (Luhn on first 10 digits).\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Indonesia-TIN.pdf\n */\n\nimport {\n luhnValidate,\n luhnChecksum,\n} from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\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\n/**\n * Valid 2-digit province codes for NIK, sourced from\n * python-stdnum's id/loc numdb.\n */\nconst NIK_PROVINCES = new Set([\n \"11\",\n \"12\",\n \"13\",\n \"14\",\n \"15\",\n \"16\",\n \"17\",\n \"18\",\n \"19\",\n \"21\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"35\",\n \"36\",\n \"51\",\n \"52\",\n \"53\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"71\",\n \"72\",\n \"73\",\n \"74\",\n \"75\",\n \"76\",\n \"81\",\n \"82\",\n \"91\",\n \"94\",\n]);\n\n/**\n * Validate a 16-digit NIK (Nomor Induk Kependudukan).\n * Format: PPRRSSDDMMYYXXXX where PP = province,\n * RRSS = regency/city + sub-district,\n * DDMMYY = birth date (DD+40 for females),\n * XXXX = serial.\n */\nconst validateNik = (v: string): ValidateResult => {\n // Province code check\n if (!NIK_PROVINCES.has(v.slice(0, 2))) {\n return err(\n \"INVALID_COMPONENT\",\n \"NIK province code is invalid\",\n );\n }\n let day = Number(v.slice(6, 8));\n const month = Number(v.slice(8, 10));\n const year = Number(v.slice(10, 12));\n // Females have 40 added to the day\n if (day > 40) day -= 40;\n // Validate the date (century is ambiguous in NIK)\n if (\n !isValidDate(1900 + year, month, day) &&\n !isValidDate(2000 + year, month, day)\n ) {\n return err(\n \"INVALID_COMPONENT\",\n \"NIK contains an invalid date\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"NPWP must contain only digits\",\n );\n }\n if (v.length === 15) {\n // Legacy 15-digit format: Luhn on first 9 digits\n if (!luhnValidate(v.slice(0, 9))) {\n return err(\n \"INVALID_CHECKSUM\",\n \"NPWP Luhn check on first 9 digits failed\",\n );\n }\n return { valid: true, compact: v };\n }\n if (v.length === 16) {\n if (v[0] !== \"0\") {\n // NIK format\n return validateNik(v);\n }\n // 0-prefixed legacy: Luhn on first 10 digits\n if (!luhnValidate(v.slice(0, 10))) {\n return err(\n \"INVALID_CHECKSUM\",\n \"NPWP Luhn check on first 10 digits failed\",\n );\n }\n return { valid: true, compact: v };\n }\n return err(\n \"INVALID_LENGTH\",\n \"NPWP must be 15 or 16 digits\",\n );\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 16) {\n // NIK or 0-prefixed legacy: no standard mask\n return v;\n }\n return (\n `${v.slice(0, 2)}.${v.slice(2, 5)}.` +\n `${v.slice(5, 8)}.${v.slice(8, 9)}` +\n `-${v.slice(9, 12)}.${v.slice(12)}`\n );\n};\n\n/** Generate a random valid 15-digit NPWP. */\nconst generate = (): string => {\n for (;;) {\n const p = randomDigits(8);\n const cs = luhnChecksum(p + \"0\");\n const c = p + String((10 - cs) % 10) + randomDigits(6);\n if (validate(c).valid) return c;\n }\n};\n\n/** Indonesian Taxpayer Identification Number. */\nconst npwp: Validator = {\n name: \"Indonesian Taxpayer Identification Number\",\n localName: \"Nomor Pokok Wajib Pajak\",\n abbreviation: \"NPWP\",\n aliases: [\"NPWP\", \"Nomor Pokok Wajib Pajak\"] as const,\n candidatePattern:\n \"\\\\d{2}\\\\.?\\\\d{3}\\\\.?\\\\d{3}\\\\.?\\\\d-?\\\\d{3}\\\\.?\\\\d{3}\",\n country: \"ID\",\n entityType: \"any\",\n lengths: [15, 16],\n examples: [\"013000666091000\", \"016090524017000\"],\n description:\n \"15 or 16-digit tax identification number issued by \" +\n \"the Directorate General of Taxes\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/\" +\n \"Tax_identification_number#Indonesia\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default npwp;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAwBA,MAAM,WAAW,UACf,MAAM,OAAO,MAAM;;;;;AAMrB,MAAM,gBAAgB,IAAI,IAAI;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;;;;;;;AASF,MAAM,eAAe,MAA8B;AAEjD,KAAI,CAAC,cAAc,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,CACnC,QAAO,IACL,qBACA,+BACD;CAEH,IAAI,MAAM,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAC/B,MAAM,QAAQ,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;CACpC,MAAM,OAAO,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC;AAEpC,KAAI,MAAM,GAAI,QAAO;AAErB,KACE,CAAC,YAAY,OAAO,MAAM,OAAO,IAAI,IACrC,CAAC,YAAY,MAAO,MAAM,OAAO,IAAI,CAErC,QAAO,IACL,qBACA,+BACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,gCACD;AAEH,KAAI,EAAE,WAAW,IAAI;AAEnB,MAAI,CAAC,aAAa,EAAE,MAAM,GAAG,EAAE,CAAC,CAC9B,QAAO,IACL,oBACA,2CACD;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;AAEpC,KAAI,EAAE,WAAW,IAAI;AACnB,MAAI,EAAE,OAAO,IAEX,QAAO,YAAY,EAAE;AAGvB,MAAI,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,CAC/B,QAAO,IACL,oBACA,4CACD;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;AAEpC,QAAO,IACL,kBACA,+BACD;;AAGH,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GAEf,QAAO;AAET,QACE,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAC/B,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAA,GAC7B,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG;;;AAKrC,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,IAAI,aAAa,EAAE;EACzB,MAAM,KAAK,aAAa,IAAI,IAAI;EAChC,MAAM,IAAI,IAAI,QAAQ,KAAK,MAAM,GAAG,GAAG,aAAa,EAAE;AACtD,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,0BAA0B;CAC5C,kBACE;CACF,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,IAAI,GAAG;CACjB,UAAU,CAAC,mBAAmB,kBAAkB;CAChD,aACE;CAEF,WACE;CAEF;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,9 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import pps from "./pps.js";
3
+ import vat from "./vat.js";
4
+
5
+ //#region src/ie/mod.d.ts
6
+
7
+ //#endregion
8
+ export { mod_d_exports, pps, vat };
9
+ //# sourceMappingURL=mod.d.ts.map
package/dist/ie/mod.js ADDED
@@ -0,0 +1,12 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import vat from "./vat.js";
3
+ import pps from "./pps.js";
4
+ //#region src/ie/mod.ts
5
+ var ie_exports = /* @__PURE__ */ __exportAll({
6
+ pps: () => pps,
7
+ vat: () => vat
8
+ });
9
+ //#endregion
10
+ export { ie_exports, pps, vat };
11
+
12
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/ie/mod.ts"],"sourcesContent":["export { default as pps } from \"./pps\";\nexport { default as vat } from \"./vat\";\n"],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/ie/pps.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 Irish PPS number. */
9
+ declare const generate: () => string;
10
+ /** Irish Personal Public Service Number. */
11
+ declare const pps: Validator;
12
+ //#endregion
13
+ export { compact, pps as default, format, generate, validate };
14
+ //# sourceMappingURL=pps.d.ts.map
package/dist/ie/pps.js ADDED
@@ -0,0 +1,69 @@
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/ie/pps.ts
6
+ /**
7
+ * PPS (Personal Public Service Number).
8
+ *
9
+ * Irish personal identification number. 7 digits
10
+ * followed by a check letter and an optional second
11
+ * letter (new format). Uses a weighted sum with
12
+ * alphabet "WABCDEFGHIJKLMNOPQRSTUV".
13
+ *
14
+ * @see https://www.gov.ie/en/service/12e6de-get-a-personal-public-service-pps-number/
15
+ */
16
+ const ALPHABET = "WABCDEFGHIJKLMNOPQRSTUV";
17
+ const compact = (value) => clean(value, " -").toUpperCase();
18
+ const validate = (value) => {
19
+ const v = compact(value);
20
+ if (v.length < 8 || v.length > 9) return err("INVALID_LENGTH", "PPS must be 8 or 9 characters");
21
+ const digits = v.slice(0, 7);
22
+ if (!isdigits(digits)) return err("INVALID_FORMAT", "PPS must start with 7 digits");
23
+ const checkLetter = v[7];
24
+ const secondLetter = v.length >= 9 ? v[8] : void 0;
25
+ let sum = 0;
26
+ for (let i = 0; i < 7; i++) sum += Number(digits[i]) * (8 - i);
27
+ if (secondLetter !== void 0 && secondLetter !== "W") {
28
+ const idx = ALPHABET.indexOf(secondLetter);
29
+ if (idx === -1) return err("INVALID_FORMAT", "PPS second letter is invalid");
30
+ sum += 9 * idx;
31
+ }
32
+ if (checkLetter !== ALPHABET[sum % 23]) return err("INVALID_CHECKSUM", "PPS check letter does not match");
33
+ return {
34
+ valid: true,
35
+ compact: v
36
+ };
37
+ };
38
+ const format = (value) => compact(value);
39
+ /** Generate a random valid Irish PPS number. */
40
+ const generate = () => {
41
+ for (;;) for (let c = 65; c <= 90; c++) {
42
+ const cand = randomDigits(7) + String.fromCharCode(c);
43
+ if (validate(cand).valid) return compact(cand);
44
+ }
45
+ };
46
+ /** Irish Personal Public Service Number. */
47
+ const pps = {
48
+ name: "Irish Personal ID",
49
+ localName: "Personal Public Service Number",
50
+ abbreviation: "PPS",
51
+ aliases: [
52
+ "PPS number",
53
+ "PPSN",
54
+ "RSI number"
55
+ ],
56
+ candidatePattern: "\\d{7}[A-Z]{1,2}",
57
+ country: "IE",
58
+ entityType: "person",
59
+ sourceUrl: "https://www.gov.ie/en/service/12e6de-get-a-personal-public-service-pps-number/",
60
+ examples: ["6433435F"],
61
+ compact,
62
+ format,
63
+ validate,
64
+ generate
65
+ };
66
+ //#endregion
67
+ export { compact, pps as default, format, generate, validate };
68
+
69
+ //# sourceMappingURL=pps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pps.js","names":[],"sources":["../../src/ie/pps.ts"],"sourcesContent":["/**\n * PPS (Personal Public Service Number).\n *\n * Irish personal identification number. 7 digits\n * followed by a check letter and an optional second\n * letter (new format). Uses a weighted sum with\n * alphabet \"WABCDEFGHIJKLMNOPQRSTUV\".\n *\n * @see https://www.gov.ie/en/service/12e6de-get-a-personal-public-service-pps-number/\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 ALPHABET = \"WABCDEFGHIJKLMNOPQRSTUV\";\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 < 8 || v.length > 9) {\n return err(\n \"INVALID_LENGTH\",\n \"PPS must be 8 or 9 characters\",\n );\n }\n\n const digits = v.slice(0, 7);\n if (!isdigits(digits)) {\n return err(\n \"INVALID_FORMAT\",\n \"PPS must start with 7 digits\",\n );\n }\n\n const checkLetter = v[7];\n const secondLetter = v.length >= 9 ? v[8] : undefined;\n\n // Compute weighted sum: weights 8..2 for digits\n let sum = 0;\n for (let i = 0; i < 7; i++) {\n sum += Number(digits[i]) * (8 - i);\n }\n\n // New format: add 9 * index of 2nd letter\n if (secondLetter !== undefined && secondLetter !== \"W\") {\n const idx = ALPHABET.indexOf(secondLetter);\n if (idx === -1) {\n return err(\n \"INVALID_FORMAT\",\n \"PPS second letter is invalid\",\n );\n }\n sum += 9 * idx;\n }\n\n const remainder = sum % 23;\n const expected = ALPHABET[remainder];\n if (checkLetter !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"PPS check letter does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Irish PPS number. */\nconst generate = (): string => {\n for (;;) {\n for (let c = 65; c <= 90; c++) {\n const cand = randomDigits(7) + String.fromCharCode(c);\n if (validate(cand).valid) return compact(cand);\n }\n }\n};\n\n/** Irish Personal Public Service Number. */\nconst pps: Validator = {\n name: \"Irish Personal ID\",\n localName: \"Personal Public Service Number\",\n abbreviation: \"PPS\",\n aliases: [\"PPS number\", \"PPSN\", \"RSI number\"] as const,\n candidatePattern: \"\\\\d{7}[A-Z]{1,2}\",\n country: \"IE\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.gov.ie/en/service/12e6de-get-a-personal-public-service-pps-number/\",\n examples: [\"6433435F\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default pps;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,WAAW;AAEjB,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,aAAa;AAElC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,SAAS,KAAK,EAAE,SAAS,EAC7B,QAAO,IACL,kBACA,gCACD;CAGH,MAAM,SAAS,EAAE,MAAM,GAAG,EAAE;AAC5B,KAAI,CAAC,SAAS,OAAO,CACnB,QAAO,IACL,kBACA,+BACD;CAGH,MAAM,cAAc,EAAE;CACtB,MAAM,eAAe,EAAE,UAAU,IAAI,EAAE,KAAK,KAAA;CAG5C,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,QAAO,OAAO,OAAO,GAAG,IAAI,IAAI;AAIlC,KAAI,iBAAiB,KAAA,KAAa,iBAAiB,KAAK;EACtD,MAAM,MAAM,SAAS,QAAQ,aAAa;AAC1C,MAAI,QAAQ,GACV,QAAO,IACL,kBACA,+BACD;AAEH,SAAO,IAAI;;AAKb,KAAI,gBADa,SADC,MAAM,IAGtB,QAAO,IACL,oBACA,kCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;AAC7B,SACE,MAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK;EAC7B,MAAM,OAAO,aAAa,EAAE,GAAG,OAAO,aAAa,EAAE;AACrD,MAAI,SAAS,KAAK,CAAC,MAAO,QAAO,QAAQ,KAAK;;;;AAMpD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EAAC;EAAc;EAAQ;EAAa;CAC7C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,14 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/ie/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 Irish VAT number. */
9
+ declare const generate: () => string;
10
+ /** Irish VAT Number. */
11
+ declare const vat: Validator;
12
+ //#endregion
13
+ export { compact, vat as default, format, generate, validate };
14
+ //# sourceMappingURL=vat.d.ts.map
package/dist/ie/vat.js ADDED
@@ -0,0 +1,83 @@
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/ie/vat.ts
6
+ /**
7
+ * VAT (Irish VAT number).
8
+ *
9
+ * 8-9 characters, complex format with old and new
10
+ * styles.
11
+ *
12
+ * @see https://www.vatify.eu/ireland-vat-number.html
13
+ * @see https://www.revenue.ie/
14
+ */
15
+ const ALPHABET = "WABCDEFGHIJKLMNOPQRSTUV";
16
+ const compact = (value) => {
17
+ let v = clean(value, " -/.");
18
+ if (v.startsWith("IE") || v.startsWith("ie")) v = v.slice(2);
19
+ return v.toUpperCase();
20
+ };
21
+ const checkNew = (v) => {
22
+ const trailing = v.length === 9 ? v.charAt(8) : "W";
23
+ let sum = 0;
24
+ for (let i = 0; i < 7; i++) sum += (8 - i) * Number(v.charAt(i));
25
+ sum += 9 * ALPHABET.indexOf(trailing);
26
+ const expected = ALPHABET.charAt(sum % 23);
27
+ return v.charAt(7) === expected;
28
+ };
29
+ const checkOld = (v) => {
30
+ const rearranged = `0${v.slice(2, 7)}${v.charAt(0)}`;
31
+ let sum = 0;
32
+ for (let i = 0; i < 7; i++) sum += (8 - i) * Number(rearranged.charAt(i));
33
+ const expected = ALPHABET.charAt(sum % 23);
34
+ return v.charAt(7) === expected;
35
+ };
36
+ const validate = (value) => {
37
+ const v = compact(value);
38
+ if (v.length !== 8 && v.length !== 9) return err("INVALID_LENGTH", "Irish VAT number must be 8 or 9 characters");
39
+ if (isdigits(v.slice(0, 7)) && /^[A-Z]$/.test(v.charAt(7))) {
40
+ if (v.length === 9 && !/^[A-Z+*]$/.test(v.charAt(8))) return err("INVALID_FORMAT", "Irish VAT trailing character must be a letter");
41
+ if (!checkNew(v)) return err("INVALID_CHECKSUM", "Irish VAT number check letter mismatch");
42
+ return {
43
+ valid: true,
44
+ compact: v
45
+ };
46
+ }
47
+ if (v.length === 8 && /^\d$/.test(v.charAt(0)) && /^[A-Z+*]$/.test(v.charAt(1)) && isdigits(v.slice(2, 7)) && /^[A-Z]$/.test(v.charAt(7))) {
48
+ if (!checkOld(v)) return err("INVALID_CHECKSUM", "Irish VAT number check letter mismatch");
49
+ return {
50
+ valid: true,
51
+ compact: v
52
+ };
53
+ }
54
+ return err("INVALID_FORMAT", "Irish VAT number has invalid format");
55
+ };
56
+ const format = (value) => `IE${compact(value)}`;
57
+ /** Generate a random valid Irish VAT number. */
58
+ const generate = () => {
59
+ for (;;) for (let c = 65; c <= 90; c++) {
60
+ const cand = randomDigits(7) + String.fromCharCode(c);
61
+ if (validate(cand).valid) return compact(cand);
62
+ }
63
+ };
64
+ /** Irish VAT Number. */
65
+ const vat = {
66
+ name: "Irish VAT Number",
67
+ localName: "Value Added Tax Number",
68
+ abbreviation: "VAT",
69
+ aliases: ["VAT number IE"],
70
+ candidatePattern: "IE\\d[A-Z+*]\\d{5}[A-Z]",
71
+ country: "IE",
72
+ entityType: "any",
73
+ sourceUrl: "https://www.revenue.ie/",
74
+ examples: ["6433435F", "8D79739I"],
75
+ compact,
76
+ format,
77
+ validate,
78
+ generate
79
+ };
80
+ //#endregion
81
+ export { compact, vat as default, format, generate, validate };
82
+
83
+ //# sourceMappingURL=vat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vat.js","names":[],"sources":["../../src/ie/vat.ts"],"sourcesContent":["/**\n * VAT (Irish VAT number).\n *\n * 8-9 characters, complex format with old and new\n * styles.\n *\n * @see https://www.vatify.eu/ireland-vat-number.html\n * @see https://www.revenue.ie/\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 ALPHABET = \"WABCDEFGHIJKLMNOPQRSTUV\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"IE\") || v.startsWith(\"ie\")) {\n v = v.slice(2);\n }\n return v.toUpperCase();\n};\n\nconst checkNew = (v: string): boolean => {\n // New format: 7 digits + check letter + optional\n // trailing letter (W or A-Z)\n const trailing = v.length === 9 ? v.charAt(8) : \"W\";\n let sum = 0;\n for (let i = 0; i < 7; i++) {\n sum += (8 - i) * Number(v.charAt(i));\n }\n sum += 9 * ALPHABET.indexOf(trailing);\n const expected = ALPHABET.charAt(sum % 23);\n return v.charAt(7) === expected;\n};\n\nconst checkOld = (v: string): boolean => {\n // Old format: digit + letter + 5 digits +\n // check letter (8 chars total).\n // Rearrange to 7-digit new-style layout:\n // 0 + d[2..6] + d[0]\n const rearranged = `0${v.slice(2, 7)}${v.charAt(0)}`;\n let sum = 0;\n for (let i = 0; i < 7; i++) {\n sum += (8 - i) * Number(rearranged.charAt(i));\n }\n const expected = ALPHABET.charAt(sum % 23);\n return v.charAt(7) === expected;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8 && v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Irish VAT number must be 8 or 9 characters\",\n );\n }\n\n // New format: 7 digits + letter [+ letter]\n if (\n isdigits(v.slice(0, 7)) &&\n /^[A-Z]$/.test(v.charAt(7))\n ) {\n if (v.length === 9 && !/^[A-Z+*]$/.test(v.charAt(8))) {\n return err(\n \"INVALID_FORMAT\",\n \"Irish VAT trailing character must be a letter\",\n );\n }\n if (!checkNew(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Irish VAT number check letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // Old format: digit + letter + 5 digits + letter\n if (\n v.length === 8 &&\n /^\\d$/.test(v.charAt(0)) &&\n /^[A-Z+*]$/.test(v.charAt(1)) &&\n isdigits(v.slice(2, 7)) &&\n /^[A-Z]$/.test(v.charAt(7))\n ) {\n if (!checkOld(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Irish VAT number check letter mismatch\",\n );\n }\n return { valid: true, compact: v };\n }\n\n return err(\n \"INVALID_FORMAT\",\n \"Irish VAT number has invalid format\",\n );\n};\n\nconst format = (value: string): string =>\n `IE${compact(value)}`;\n\n/** Generate a random valid Irish VAT number. */\nconst generate = (): string => {\n for (;;) {\n for (let c = 65; c <= 90; c++) {\n const cand = randomDigits(7) + String.fromCharCode(c);\n if (validate(cand).valid) return compact(cand);\n }\n }\n};\n\n/** Irish VAT Number. */\nconst vat: Validator = {\n name: \"Irish VAT Number\",\n localName: \"Value Added Tax Number\",\n abbreviation: \"VAT\",\n aliases: [\"VAT number IE\"] as const,\n candidatePattern: \"IE\\\\d[A-Z+*]\\\\d{5}[A-Z]\",\n country: \"IE\",\n entityType: \"any\",\n sourceUrl: \"https://www.revenue.ie/\",\n examples: [\"6433435F\", \"8D79739I\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,WAAW;AAEjB,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,YAAY,MAAuB;CAGvC,MAAM,WAAW,EAAE,WAAW,IAAI,EAAE,OAAO,EAAE,GAAG;CAChD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,SAAQ,IAAI,KAAK,OAAO,EAAE,OAAO,EAAE,CAAC;AAEtC,QAAO,IAAI,SAAS,QAAQ,SAAS;CACrC,MAAM,WAAW,SAAS,OAAO,MAAM,GAAG;AAC1C,QAAO,EAAE,OAAO,EAAE,KAAK;;AAGzB,MAAM,YAAY,MAAuB;CAKvC,MAAM,aAAa,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;CAClD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,SAAQ,IAAI,KAAK,OAAO,WAAW,OAAO,EAAE,CAAC;CAE/C,MAAM,WAAW,SAAS,OAAO,MAAM,GAAG;AAC1C,QAAO,EAAE,OAAO,EAAE,KAAK;;AAGzB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,EACjC,QAAO,IACL,kBACA,6CACD;AAIH,KACE,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,IACvB,UAAU,KAAK,EAAE,OAAO,EAAE,CAAC,EAC3B;AACA,MAAI,EAAE,WAAW,KAAK,CAAC,YAAY,KAAK,EAAE,OAAO,EAAE,CAAC,CAClD,QAAO,IACL,kBACA,gDACD;AAEH,MAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,oBACA,yCACD;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;AAIpC,KACE,EAAE,WAAW,KACb,OAAO,KAAK,EAAE,OAAO,EAAE,CAAC,IACxB,YAAY,KAAK,EAAE,OAAO,EAAE,CAAC,IAC7B,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,IACvB,UAAU,KAAK,EAAE,OAAO,EAAE,CAAC,EAC3B;AACA,MAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,oBACA,yCACD;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;AAGpC,QAAO,IACL,kBACA,sCACD;;AAGH,MAAM,UAAU,UACd,KAAK,QAAQ,MAAM;;AAGrB,MAAM,iBAAyB;AAC7B,SACE,MAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK;EAC7B,MAAM,OAAO,aAAa,EAAE,GAAG,OAAO,aAAa,EAAE;AACrD,MAAI,SAAS,KAAK,CAAC,MAAO,QAAO,QAAQ,KAAK;;;;AAMpD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,gBAAgB;CAC1B,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY,WAAW;CAClC;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,14 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/il/idnr.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 Israeli ID number. */
9
+ declare const generate: () => string;
10
+ /** Israeli Identity Number (Mispar Zehut). */
11
+ declare const idnr: Validator;
12
+ //#endregion
13
+ export { compact, idnr as default, format, generate, validate };
14
+ //# sourceMappingURL=idnr.d.ts.map
@@ -0,0 +1,61 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
5
+ import { isdigits } from "../_util/strings.js";
6
+ //#region src/il/idnr.ts
7
+ /**
8
+ * Identity Number (Mispar Zehut, מספר זהות).
9
+ *
10
+ * Israeli personal identity number. 9 digits
11
+ * (zero-padded) with a Luhn checksum.
12
+ *
13
+ * @see https://en.wikipedia.org/wiki/Israeli_identity_card
14
+ */
15
+ const compact = (value) => clean(value, " -").padStart(9, "0");
16
+ const validate = (value) => {
17
+ const v = compact(value);
18
+ if (v.length > 9) return err("INVALID_LENGTH", "Israeli ID must be at most 9 digits");
19
+ if (!isdigits(v) || Number(v) === 0) return err("INVALID_FORMAT", "Israeli ID must contain only digits and not be zero");
20
+ if (!luhnValidate(v)) return err("INVALID_CHECKSUM", "Israeli ID Luhn check digit mismatch");
21
+ return {
22
+ valid: true,
23
+ compact: v
24
+ };
25
+ };
26
+ const format = (value) => {
27
+ const v = compact(value);
28
+ return `${v.slice(0, -1)}-${v.slice(-1)}`;
29
+ };
30
+ /** Generate a random valid Israeli ID number. */
31
+ const generate = () => {
32
+ const payload = randomDigits(8);
33
+ const cs = luhnChecksum(payload + "0");
34
+ return payload + String((10 - cs) % 10);
35
+ };
36
+ /** Israeli Identity Number (Mispar Zehut). */
37
+ const idnr = {
38
+ name: "Israeli Identity Number",
39
+ localName: "מספר זהות",
40
+ abbreviation: "ת.ז.",
41
+ aliases: [
42
+ "תעודת זהות",
43
+ "Teudat Zehut",
44
+ "ID number"
45
+ ],
46
+ candidatePattern: "\\d{9}",
47
+ country: "IL",
48
+ entityType: "person",
49
+ compact,
50
+ format,
51
+ validate,
52
+ description: "Israeli personal identification number (Mispar Zehut)",
53
+ sourceUrl: "https://en.wikipedia.org/wiki/Israeli_identity_card",
54
+ lengths: [9],
55
+ examples: ["039337423", "000000018"],
56
+ generate
57
+ };
58
+ //#endregion
59
+ export { compact, idnr as default, format, generate, validate };
60
+
61
+ //# sourceMappingURL=idnr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idnr.js","names":[],"sources":["../../src/il/idnr.ts"],"sourcesContent":["/**\n * Identity Number (Mispar Zehut, מספר זהות).\n *\n * Israeli personal identity number. 9 digits\n * (zero-padded) with a Luhn checksum.\n *\n * @see https://en.wikipedia.org/wiki/Israeli_identity_card\n */\n\nimport {\n luhnValidate,\n luhnChecksum,\n} from \"#checksums/luhn\";\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, \" -\").padStart(9, \"0\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length > 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Israeli ID must be at most 9 digits\",\n );\n }\n if (!isdigits(v) || Number(v) === 0) {\n return err(\n \"INVALID_FORMAT\",\n \"Israeli ID must contain only digits\" +\n \" and not be zero\",\n );\n }\n if (!luhnValidate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Israeli ID Luhn check digit mismatch\",\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, -1)}-${v.slice(-1)}`;\n};\n\n/** Generate a random valid Israeli ID number. */\nconst generate = (): string => {\n const payload = randomDigits(8);\n const cs = luhnChecksum(payload + \"0\");\n return payload + String((10 - cs) % 10);\n};\n\n/** Israeli Identity Number (Mispar Zehut). */\nconst idnr: Validator = {\n name: \"Israeli Identity Number\",\n localName: \"מספר זהות\",\n abbreviation: \"ת.ז.\",\n aliases: [\n \"תעודת זהות\",\n \"Teudat Zehut\",\n \"ID number\",\n ] as const,\n candidatePattern: \"\\\\d{9}\",\n country: \"IL\",\n entityType: \"person\",\n compact,\n format,\n validate,\n description:\n \"Israeli personal identification number\" +\n \" (Mispar Zehut)\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Israeli_identity_card\",\n lengths: [9] as const,\n examples: [\"039337423\", \"000000018\"] as const,\n generate,\n};\n\nexport default idnr;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;AAoBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,SAAS,GAAG,IAAI;AAErC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,SAAS,EACb,QAAO,IACL,kBACA,sCACD;AAEH,KAAI,CAAC,SAAS,EAAE,IAAI,OAAO,EAAE,KAAK,EAChC,QAAO,IACL,kBACA,sDAED;AAEH,KAAI,CAAC,aAAa,EAAE,CAClB,QAAO,IACL,oBACA,uCACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG;;;AAIzC,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,EAAE;CAC/B,MAAM,KAAK,aAAa,UAAU,IAAI;AACtC,QAAO,UAAU,QAAQ,KAAK,MAAM,GAAG;;;AAIzC,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ;CACA;CACA;CACA,aACE;CAEF,WACE;CACF,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,aAAa,YAAY;CACpC;CACD"}
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import idnr from "./idnr.js";
3
+
4
+ //#region src/il/mod.d.ts
5
+
6
+ //#endregion
7
+ export { idnr, mod_d_exports };
8
+ //# sourceMappingURL=mod.d.ts.map
package/dist/il/mod.js ADDED
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import idnr from "./idnr.js";
3
+ //#region src/il/mod.ts
4
+ var il_exports = /* @__PURE__ */ __exportAll({ idnr: () => idnr });
5
+ //#endregion
6
+ export { idnr, il_exports };
7
+
8
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/il/mod.ts"],"sourcesContent":["export { default as idnr } from \"./idnr\";\n"],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/in/aadhaar.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 Aadhaar number. */
9
+ declare const generate: () => string;
10
+ /** Indian Unique Identity Number. */
11
+ declare const aadhaar: Validator;
12
+ //#endregion
13
+ export { compact, aadhaar as default, format, generate, validate };
14
+ //# sourceMappingURL=aadhaar.d.ts.map
@@ -0,0 +1,61 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits, randomInt } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { isdigits } from "../_util/strings.js";
5
+ import { verhoeffCheckDigit, verhoeffValidate } from "../_checksums/verhoeff.js";
6
+ //#region src/in/aadhaar.ts
7
+ /**
8
+ * Aadhaar (Indian unique identity number).
9
+ *
10
+ * 12 digits with Verhoeff checksum (last digit).
11
+ * Cannot start with 0 or 1.
12
+ * Issued by the Unique Identification Authority
13
+ * of India (UIDAI).
14
+ *
15
+ * @see https://en.wikipedia.org/wiki/Aadhaar
16
+ * @see https://uidai.gov.in/
17
+ */
18
+ const compact = (value) => clean(value, " -");
19
+ const validate = (value) => {
20
+ const v = compact(value);
21
+ if (v.length !== 12) return err("INVALID_LENGTH", "Aadhaar must be 12 digits");
22
+ if (!isdigits(v)) return err("INVALID_FORMAT", "Aadhaar must contain only digits");
23
+ if (v[0] === "0" || v[0] === "1") return err("INVALID_COMPONENT", "Aadhaar cannot start with 0 or 1");
24
+ if (v === v.split("").reverse().join("")) return err("INVALID_FORMAT", "Aadhaar cannot be a palindrome");
25
+ if (!verhoeffValidate(v)) return err("INVALID_CHECKSUM", "Aadhaar check digit mismatch");
26
+ return {
27
+ valid: true,
28
+ compact: v
29
+ };
30
+ };
31
+ const format = (value) => {
32
+ const v = compact(value);
33
+ return `${v.slice(0, 4)} ${v.slice(4, 8)} ${v.slice(8)}`;
34
+ };
35
+ /** Generate a random valid Aadhaar number. */
36
+ const generate = () => {
37
+ const payload = String(randomInt(2, 9)) + randomDigits(10);
38
+ return payload + String(verhoeffCheckDigit(payload));
39
+ };
40
+ /** Indian Unique Identity Number. */
41
+ const aadhaar = {
42
+ name: "Indian Unique Identity Number",
43
+ localName: "Aadhaar",
44
+ abbreviation: "Aadhaar",
45
+ aliases: ["Aadhaar", "आधार"],
46
+ candidatePattern: "\\d{4}\\s?\\d{4}\\s?\\d{4}",
47
+ country: "IN",
48
+ entityType: "person",
49
+ lengths: [12],
50
+ examples: ["234123412346", "295274982189"],
51
+ description: "12-digit unique identity number issued by UIDAI",
52
+ sourceUrl: "https://uidai.gov.in/",
53
+ compact,
54
+ format,
55
+ validate,
56
+ generate
57
+ };
58
+ //#endregion
59
+ export { compact, aadhaar as default, format, generate, validate };
60
+
61
+ //# sourceMappingURL=aadhaar.js.map