@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,140 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { err } from "../_util/result.js";
3
+ import { isValidDate } from "../_util/date.js";
4
+ //#region src/mx/curp.ts
5
+ /**
6
+ * CURP (Clave Única de Registro de Población).
7
+ *
8
+ * Mexican personal identification number. 18 characters:
9
+ * 4 letters (name encoding) + 6 digits (YYMMDD birth
10
+ * date) + 1 letter (gender: H=male, M=female) + 2
11
+ * letters (state code) + 3 consonants (name
12
+ * disambiguation) + 1 digit (century discriminator) +
13
+ * 1 check digit.
14
+ *
15
+ * The check digit is computed as a weighted sum mod 10
16
+ * using an alphabet mapping (0-9, A-N, &, O-Z).
17
+ *
18
+ * @see https://en.wikipedia.org/wiki/CURP
19
+ */
20
+ /** Valid Mexican state codes (2-letter). */
21
+ const STATE_CODES = new Set([
22
+ "AS",
23
+ "BC",
24
+ "BS",
25
+ "CC",
26
+ "CL",
27
+ "CM",
28
+ "CS",
29
+ "CH",
30
+ "DF",
31
+ "DG",
32
+ "GT",
33
+ "GR",
34
+ "HG",
35
+ "JC",
36
+ "MC",
37
+ "MN",
38
+ "MS",
39
+ "NT",
40
+ "NL",
41
+ "OC",
42
+ "PL",
43
+ "QT",
44
+ "QR",
45
+ "SP",
46
+ "SL",
47
+ "SR",
48
+ "TC",
49
+ "TS",
50
+ "TL",
51
+ "VZ",
52
+ "YN",
53
+ "ZS",
54
+ "NE"
55
+ ]);
56
+ /**
57
+ * Alphabet for CURP check digit computation.
58
+ * Matches python-stdnum: digits 0-9, then A-N,
59
+ * ampersand, O-Z.
60
+ */
61
+ const ALPHABET = "0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ";
62
+ const CHAR_MAP = /* @__PURE__ */ new Map();
63
+ for (let i = 0; i < 37; i++) CHAR_MAP.set(ALPHABET[i], i);
64
+ const compact = (value) => clean(value, " -").trim().toUpperCase();
65
+ /**
66
+ * Compute the CURP check digit. Sum each of the first
67
+ * 17 characters multiplied by weight (18 - position),
68
+ * then check = (10 - sum % 10) % 10.
69
+ */
70
+ const calcCheckDigit = (value) => {
71
+ let sum = 0;
72
+ for (let i = 0; i < 17; i++) sum += (CHAR_MAP.get(value[i]) ?? 0) * (18 - i);
73
+ return String((10 - sum % 10) % 10);
74
+ };
75
+ /**
76
+ * Resolve full year from 2-digit year and century
77
+ * discriminator: 0-9 = 1900s, letter = 2000s.
78
+ */
79
+ const resolveCurpYear = (yy, centuryChar) => centuryChar >= "0" && centuryChar <= "9" ? 1900 + yy : 2e3 + yy;
80
+ const CURP_RE = /^[A-Z]{4}\d{6}[HM][A-Z]{2}[A-Z]{3}[0-9A-Z]\d$/;
81
+ const validate = (value) => {
82
+ const v = compact(value);
83
+ if (v.length !== 18) return err("INVALID_LENGTH", "CURP must be 18 characters");
84
+ if (!CURP_RE.test(v)) return err("INVALID_FORMAT", "CURP has an invalid format");
85
+ const yy = Number(v.slice(4, 6));
86
+ const mm = Number(v.slice(6, 8));
87
+ const dd = Number(v.slice(8, 10));
88
+ if (!isValidDate(resolveCurpYear(yy, v[16]), mm, dd)) return err("INVALID_COMPONENT", "CURP contains an invalid birth date");
89
+ const state = v.slice(11, 13);
90
+ if (!STATE_CODES.has(state)) return err("INVALID_COMPONENT", "CURP contains an invalid state code");
91
+ const expected = calcCheckDigit(v);
92
+ if (v[17] !== expected) return err("INVALID_CHECKSUM", "CURP check digit does not match");
93
+ return {
94
+ valid: true,
95
+ compact: v
96
+ };
97
+ };
98
+ const format = (value) => compact(value);
99
+ /**
100
+ * Extract birth date and gender from a CURP.
101
+ * Returns null if the value is not valid.
102
+ */
103
+ const parse = (value) => {
104
+ const result = validate(value);
105
+ if (!result.valid) return null;
106
+ const v = result.compact;
107
+ const yy = Number(v.slice(4, 6));
108
+ const mm = Number(v.slice(6, 8));
109
+ const dd = Number(v.slice(8, 10));
110
+ const year = resolveCurpYear(yy, v[16]);
111
+ const gender = v[10] === "H" ? "male" : "female";
112
+ return {
113
+ birthDate: new Date(year, mm - 1, dd),
114
+ gender
115
+ };
116
+ };
117
+ /**
118
+ * Mexican CURP (personal identification number).
119
+ *
120
+ * Example sourced from python-stdnum test suite.
121
+ */
122
+ const curp = {
123
+ name: "Mexican Personal ID",
124
+ localName: "Clave Única de Registro de Población",
125
+ abbreviation: "CURP",
126
+ aliases: ["CURP", "Clave Única de Registro de Población"],
127
+ candidatePattern: "[A-Z]{4}\\d{6}[HM][A-Z]{5}[A-Z\\d]\\d",
128
+ country: "MX",
129
+ entityType: "person",
130
+ lengths: [18],
131
+ examples: ["BOXW310820HNERXN09"],
132
+ compact,
133
+ format,
134
+ validate,
135
+ sourceUrl: "https://en.wikipedia.org/wiki/CURP"
136
+ };
137
+ //#endregion
138
+ export { compact, curp as default, format, parse, validate };
139
+
140
+ //# sourceMappingURL=curp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curp.js","names":[],"sources":["../../src/mx/curp.ts"],"sourcesContent":["/**\n * CURP (Clave Única de Registro de Población).\n *\n * Mexican personal identification number. 18 characters:\n * 4 letters (name encoding) + 6 digits (YYMMDD birth\n * date) + 1 letter (gender: H=male, M=female) + 2\n * letters (state code) + 3 consonants (name\n * disambiguation) + 1 digit (century discriminator) +\n * 1 check digit.\n *\n * The check digit is computed as a weighted sum mod 10\n * using an alphabet mapping (0-9, A-N, &, O-Z).\n *\n * @see https://en.wikipedia.org/wiki/CURP\n */\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { err } from \"#util/result\";\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n Validator,\n} from \"../types\";\n\n/** Valid Mexican state codes (2-letter). */\nconst STATE_CODES = new Set([\n \"AS\",\n \"BC\",\n \"BS\",\n \"CC\",\n \"CL\",\n \"CM\",\n \"CS\",\n \"CH\",\n \"DF\",\n \"DG\",\n \"GT\",\n \"GR\",\n \"HG\",\n \"JC\",\n \"MC\",\n \"MN\",\n \"MS\",\n \"NT\",\n \"NL\",\n \"OC\",\n \"PL\",\n \"QT\",\n \"QR\",\n \"SP\",\n \"SL\",\n \"SR\",\n \"TC\",\n \"TS\",\n \"TL\",\n \"VZ\",\n \"YN\",\n \"ZS\",\n \"NE\", // Born abroad\n]);\n\n/**\n * Alphabet for CURP check digit computation.\n * Matches python-stdnum: digits 0-9, then A-N,\n * ampersand, O-Z.\n */\nconst ALPHABET = \"0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ\";\n\nconst CHAR_MAP = new Map<string, number>();\nfor (let i = 0; i < ALPHABET.length; i++) {\n CHAR_MAP.set(ALPHABET[i]!, i);\n}\n\nconst compact = (value: string): string =>\n clean(value, \" -\").trim().toUpperCase();\n\n/**\n * Compute the CURP check digit. Sum each of the first\n * 17 characters multiplied by weight (18 - position),\n * then check = (10 - sum % 10) % 10.\n */\nconst calcCheckDigit = (value: string): string => {\n let sum = 0;\n for (let i = 0; i < 17; i++) {\n sum += (CHAR_MAP.get(value[i]!) ?? 0) * (18 - i);\n }\n return String((10 - (sum % 10)) % 10);\n};\n\n/**\n * Resolve full year from 2-digit year and century\n * discriminator: 0-9 = 1900s, letter = 2000s.\n */\nconst resolveCurpYear = (\n yy: number,\n centuryChar: string,\n): number =>\n centuryChar >= \"0\" && centuryChar <= \"9\"\n ? 1900 + yy\n : 2000 + yy;\n\nconst CURP_RE =\n /^[A-Z]{4}\\d{6}[HM][A-Z]{2}[A-Z]{3}[0-9A-Z]\\d$/;\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 18) {\n return err(\n \"INVALID_LENGTH\",\n \"CURP must be 18 characters\",\n );\n }\n\n if (!CURP_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"CURP has an invalid format\",\n );\n }\n\n // Validate the embedded date (YYMMDD at positions 4-9).\n const yy = Number(v.slice(4, 6));\n const mm = Number(v.slice(6, 8));\n const dd = Number(v.slice(8, 10));\n\n const year = resolveCurpYear(yy, v[16]!);\n if (!isValidDate(year, mm, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"CURP contains an invalid birth date\",\n );\n }\n\n // Validate state code at positions 11-12.\n const state = v.slice(11, 13);\n if (!STATE_CODES.has(state)) {\n return err(\n \"INVALID_COMPONENT\",\n \"CURP contains an invalid state code\",\n );\n }\n\n // Verify check digit (last character).\n const expected = calcCheckDigit(v);\n if (v[17] !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"CURP check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/**\n * Extract birth date and gender from a CURP.\n * Returns null if the value is not valid.\n */\nconst parse = (value: string): ParsedPersonId | null => {\n const result = validate(value);\n if (!result.valid) return null;\n\n const v = result.compact;\n const yy = Number(v.slice(4, 6));\n const mm = Number(v.slice(6, 8));\n const dd = Number(v.slice(8, 10));\n\n const year = resolveCurpYear(yy, v[16]!);\n\n const genderChar = v[10];\n const gender: \"male\" | \"female\" =\n genderChar === \"H\" ? \"male\" : \"female\";\n\n return {\n birthDate: new Date(year, mm - 1, dd),\n gender,\n };\n};\n\n/**\n * Mexican CURP (personal identification number).\n *\n * Example sourced from python-stdnum test suite.\n */\nconst curp: Validator = {\n name: \"Mexican Personal ID\",\n localName: \"Clave Única de Registro de Población\",\n abbreviation: \"CURP\",\n aliases: [\n \"CURP\",\n \"Clave Única de Registro de Población\",\n ] as const,\n candidatePattern: \"[A-Z]{4}\\\\d{6}[HM][A-Z]{5}[A-Z\\\\d]\\\\d\",\n country: \"MX\",\n entityType: \"person\",\n lengths: [18] as const,\n examples: [\"BOXW310820HNERXN09\"] as const,\n compact,\n format,\n validate,\n sourceUrl: \"https://en.wikipedia.org/wiki/CURP\",\n};\n\nexport default curp;\nexport { compact, format, parse, validate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,cAAc,IAAI,IAAI;CAC1B;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;;;;;;AAOF,MAAM,WAAW;AAEjB,MAAM,2BAAW,IAAI,KAAqB;AAC1C,KAAK,IAAI,IAAI,GAAG,IAAI,IAAiB,IACnC,UAAS,IAAI,SAAS,IAAK,EAAE;AAG/B,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa;;;;;;AAOzC,MAAM,kBAAkB,UAA0B;CAChD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IACtB,SAAQ,SAAS,IAAI,MAAM,GAAI,IAAI,MAAM,KAAK;AAEhD,QAAO,QAAQ,KAAM,MAAM,MAAO,GAAG;;;;;;AAOvC,MAAM,mBACJ,IACA,gBAEA,eAAe,OAAO,eAAe,MACjC,OAAO,KACP,MAAO;AAEb,MAAM,UACJ;AAEF,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,6BACD;AAGH,KAAI,CAAC,QAAQ,KAAK,EAAE,CAClB,QAAO,IACL,kBACA,6BACD;CAIH,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;AAGjC,KAAI,CAAC,YADQ,gBAAgB,IAAI,EAAE,IAAK,EACjB,IAAI,GAAG,CAC5B,QAAO,IACL,qBACA,sCACD;CAIH,MAAM,QAAQ,EAAE,MAAM,IAAI,GAAG;AAC7B,KAAI,CAAC,YAAY,IAAI,MAAM,CACzB,QAAO,IACL,qBACA,sCACD;CAIH,MAAM,WAAW,eAAe,EAAE;AAClC,KAAI,EAAE,QAAQ,SACZ,QAAO,IACL,oBACA,kCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;;;;AAMxD,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,MAAM;AAC9B,KAAI,CAAC,OAAO,MAAO,QAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;CAEjC,MAAM,OAAO,gBAAgB,IAAI,EAAE,IAAK;CAGxC,MAAM,SADa,EAAE,QAEJ,MAAM,SAAS;AAEhC,QAAO;EACL,WAAW,IAAI,KAAK,MAAM,KAAK,GAAG,GAAG;EACrC;EACD;;;;;;;AAQH,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,QACA,uCACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,qBAAqB;CAChC;CACA;CACA;CACA,WAAW;CACZ"}
@@ -0,0 +1,10 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import clabe from "./clabe.js";
3
+ import curp from "./curp.js";
4
+ import rfc from "./rfc.js";
5
+
6
+ //#region src/mx/mod.d.ts
7
+
8
+ //#endregion
9
+ export { clabe, curp, mod_d_exports, rfc };
10
+ //# sourceMappingURL=mod.d.ts.map
package/dist/mx/mod.js ADDED
@@ -0,0 +1,14 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import clabe from "./clabe.js";
3
+ import curp from "./curp.js";
4
+ import rfc from "./rfc.js";
5
+ //#region src/mx/mod.ts
6
+ var mx_exports = /* @__PURE__ */ __exportAll({
7
+ clabe: () => clabe,
8
+ curp: () => curp,
9
+ rfc: () => rfc
10
+ });
11
+ //#endregion
12
+ export { clabe, curp, mx_exports, rfc };
13
+
14
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/mx/mod.ts"],"sourcesContent":["export { default as clabe } from \"./clabe\";\nexport { default as curp } from \"./curp\";\nexport { default as rfc } from \"./rfc\";\n"],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/mx/rfc.d.ts
4
+
5
+ declare const compact: (value: string) => string;
6
+ declare const validate: (value: string) => ValidateResult;
7
+ declare const format: (value: string) => string;
8
+ /**
9
+ * Mexican RFC (tax identification number).
10
+ *
11
+ * Examples sourced from python-stdnum test suite.
12
+ */
13
+ declare const rfc: Validator;
14
+ //#endregion
15
+ export { compact, rfc as default, format, validate };
16
+ //# sourceMappingURL=rfc.d.ts.map
package/dist/mx/rfc.js ADDED
@@ -0,0 +1,92 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { err } from "../_util/result.js";
3
+ import { isValidDate } from "../_util/date.js";
4
+ //#region src/mx/rfc.ts
5
+ /**
6
+ * RFC (Registro Federal de Contribuyentes).
7
+ *
8
+ * Mexican tax identification number issued by the SAT
9
+ * (Servicio de Administración Tributaria). The number is
10
+ * 13 characters for individuals (4 letters + 6 digits
11
+ * YYMMDD + 3 alphanumeric) or 12 characters for
12
+ * companies (3 letters + 6 digits YYMMDD + 3
13
+ * alphanumeric). The last character is a check digit
14
+ * computed with a mod 11 algorithm over a specific
15
+ * alphabet mapping.
16
+ *
17
+ * Format: AAAA######XXX (persons, 13 chars)
18
+ * AAA######XXX (companies, 12 chars)
19
+ *
20
+ * @see https://en.wikipedia.org/wiki/Tax_Identification_Number_(Mexico)
21
+ */
22
+ /** Alphabet for RFC check digit computation. */
23
+ const ALPHABET = "0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ Ñ";
24
+ const CHAR_MAP = /* @__PURE__ */ new Map();
25
+ for (let i = 0; i < 39; i++) CHAR_MAP.set(ALPHABET[i], i);
26
+ const compact = (value) => clean(value, " -.").trim().toUpperCase();
27
+ /**
28
+ * Compute the RFC check digit using mod 11 with
29
+ * the SAT alphabet mapping.
30
+ *
31
+ * Each character is mapped to its position in the
32
+ * ALPHABET, then multiplied by a weight that starts
33
+ * at (len + 1) and decreases by 1. The check digit
34
+ * is (11 - sum % 11) % 11, mapped to 0-9 or "A".
35
+ */
36
+ const calcCheckDigit = (value) => {
37
+ const padded = value.length === 11 ? ` ${value}` : value;
38
+ let sum = 0;
39
+ for (let i = 0; i < 12; i++) {
40
+ const ch = padded[i];
41
+ const v = CHAR_MAP.get(ch) ?? 0;
42
+ sum += v * (13 - i);
43
+ }
44
+ const remainder = sum % 11;
45
+ if (remainder === 0) return "0";
46
+ const digit = 11 - remainder;
47
+ return digit === 10 ? "A" : String(digit);
48
+ };
49
+ const PERSON_RE = /^[A-ZÑ&]{4}\d{6}[A-Z\d]{3}$/;
50
+ const COMPANY_RE = /^[A-ZÑ&]{3}\d{6}[A-Z\d]{3}$/;
51
+ const validate = (value) => {
52
+ const v = compact(value);
53
+ if (v.length !== 12 && v.length !== 13) return err("INVALID_LENGTH", "RFC must be 12 or 13 characters");
54
+ const isPerson = v.length === 13;
55
+ if (!(isPerson ? PERSON_RE : COMPANY_RE).test(v)) return err("INVALID_FORMAT", "RFC has an invalid format");
56
+ const dateOffset = isPerson ? 4 : 3;
57
+ const yy = Number(v.slice(dateOffset, dateOffset + 2));
58
+ const mm = Number(v.slice(dateOffset + 2, dateOffset + 4));
59
+ const dd = Number(v.slice(dateOffset + 4, dateOffset + 6));
60
+ if (!isValidDate(2e3 + yy, mm, dd)) return err("INVALID_COMPONENT", "RFC contains an invalid date");
61
+ const expected = calcCheckDigit(v.slice(0, -1));
62
+ if (v.at(-1) !== expected) return err("INVALID_CHECKSUM", "RFC check digit does not match");
63
+ return {
64
+ valid: true,
65
+ compact: v
66
+ };
67
+ };
68
+ const format = (value) => compact(value);
69
+ /**
70
+ * Mexican RFC (tax identification number).
71
+ *
72
+ * Examples sourced from python-stdnum test suite.
73
+ */
74
+ const rfc = {
75
+ name: "Mexican Tax ID",
76
+ localName: "Registro Federal de Contribuyentes",
77
+ abbreviation: "RFC",
78
+ aliases: ["RFC", "Registro Federal de Contribuyentes"],
79
+ candidatePattern: "[A-ZÑ&]{3,4}\\d{6}[A-Z\\d]{3}",
80
+ country: "MX",
81
+ entityType: "any",
82
+ lengths: [12, 13],
83
+ examples: ["GODE561231GR8", "MAB9307148T4"],
84
+ compact,
85
+ format,
86
+ validate,
87
+ sourceUrl: "https://en.wikipedia.org/wiki/Tax_Identification_Number_(Mexico)"
88
+ };
89
+ //#endregion
90
+ export { compact, rfc as default, format, validate };
91
+
92
+ //# sourceMappingURL=rfc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rfc.js","names":[],"sources":["../../src/mx/rfc.ts"],"sourcesContent":["/**\n * RFC (Registro Federal de Contribuyentes).\n *\n * Mexican tax identification number issued by the SAT\n * (Servicio de Administración Tributaria). The number is\n * 13 characters for individuals (4 letters + 6 digits\n * YYMMDD + 3 alphanumeric) or 12 characters for\n * companies (3 letters + 6 digits YYMMDD + 3\n * alphanumeric). The last character is a check digit\n * computed with a mod 11 algorithm over a specific\n * alphabet mapping.\n *\n * Format: AAAA######XXX (persons, 13 chars)\n * AAA######XXX (companies, 12 chars)\n *\n * @see https://en.wikipedia.org/wiki/Tax_Identification_Number_(Mexico)\n */\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { err } from \"#util/result\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/** Alphabet for RFC check digit computation. */\nconst ALPHABET = \"0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ Ñ\";\n\nconst CHAR_MAP = new Map<string, number>();\nfor (let i = 0; i < ALPHABET.length; i++) {\n CHAR_MAP.set(ALPHABET[i]!, i);\n}\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").trim().toUpperCase();\n\n/**\n * Compute the RFC check digit using mod 11 with\n * the SAT alphabet mapping.\n *\n * Each character is mapped to its position in the\n * ALPHABET, then multiplied by a weight that starts\n * at (len + 1) and decreases by 1. The check digit\n * is (11 - sum % 11) % 11, mapped to 0-9 or \"A\".\n */\nconst calcCheckDigit = (value: string): string => {\n // Pad 12-char company RFCs with a leading space\n // to align weights with the 13-char algorithm.\n const padded = value.length === 11 ? ` ${value}` : value;\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n const ch = padded[i]!;\n const v = CHAR_MAP.get(ch) ?? 0;\n sum += v * (13 - i);\n }\n const remainder = sum % 11;\n if (remainder === 0) return \"0\";\n const digit = 11 - remainder;\n return digit === 10 ? \"A\" : String(digit);\n};\n\nconst PERSON_RE = /^[A-ZÑ&]{4}\\d{6}[A-Z\\d]{3}$/;\nconst COMPANY_RE = /^[A-ZÑ&]{3}\\d{6}[A-Z\\d]{3}$/;\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 12 && v.length !== 13) {\n return err(\n \"INVALID_LENGTH\",\n \"RFC must be 12 or 13 characters\",\n );\n }\n\n const isPerson = v.length === 13;\n const re = isPerson ? PERSON_RE : COMPANY_RE;\n if (!re.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"RFC has an invalid format\",\n );\n }\n\n // Validate the embedded date (YYMMDD).\n const dateOffset = isPerson ? 4 : 3;\n const yy = Number(v.slice(dateOffset, dateOffset + 2));\n const mm = Number(\n v.slice(dateOffset + 2, dateOffset + 4),\n );\n const dd = Number(\n v.slice(dateOffset + 4, dateOffset + 6),\n );\n\n // RFC dates use 2-digit years; use 2000 century for\n // date validation (any valid calendar date is accepted).\n const year = 2000 + yy;\n if (!isValidDate(year, mm, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"RFC contains an invalid date\",\n );\n }\n\n // Verify check digit (last character).\n const body = v.slice(0, -1);\n const expected = calcCheckDigit(body);\n if (v.at(-1) !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"RFC check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/**\n * Mexican RFC (tax identification number).\n *\n * Examples sourced from python-stdnum test suite.\n */\nconst rfc: Validator = {\n name: \"Mexican Tax ID\",\n localName: \"Registro Federal de Contribuyentes\",\n abbreviation: \"RFC\",\n aliases: [\n \"RFC\",\n \"Registro Federal de Contribuyentes\",\n ] as const,\n candidatePattern: \"[A-ZÑ&]{3,4}\\\\d{6}[A-Z\\\\d]{3}\",\n country: \"MX\",\n entityType: \"any\",\n lengths: [12, 13] as const,\n examples: [\"GODE561231GR8\", \"MAB9307148T4\"] as const,\n compact,\n format,\n validate,\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Tax_Identification_Number_(Mexico)\",\n};\n\nexport default rfc;\nexport { compact, format, validate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,WAAW;AAEjB,MAAM,2BAAW,IAAI,KAAqB;AAC1C,KAAK,IAAI,IAAI,GAAG,IAAI,IAAiB,IACnC,UAAS,IAAI,SAAS,IAAK,EAAE;AAG/B,MAAM,WAAW,UACf,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa;;;;;;;;;;AAW1C,MAAM,kBAAkB,UAA0B;CAGhD,MAAM,SAAS,MAAM,WAAW,KAAK,IAAI,UAAU;CACnD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;EAC3B,MAAM,KAAK,OAAO;EAClB,MAAM,IAAI,SAAS,IAAI,GAAG,IAAI;AAC9B,SAAO,KAAK,KAAK;;CAEnB,MAAM,YAAY,MAAM;AACxB,KAAI,cAAc,EAAG,QAAO;CAC5B,MAAM,QAAQ,KAAK;AACnB,QAAO,UAAU,KAAK,MAAM,OAAO,MAAM;;AAG3C,MAAM,YAAY;AAClB,MAAM,aAAa;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,MAAM,EAAE,WAAW,GAClC,QAAO,IACL,kBACA,kCACD;CAGH,MAAM,WAAW,EAAE,WAAW;AAE9B,KAAI,EADO,WAAW,YAAY,YAC1B,KAAK,EAAE,CACb,QAAO,IACL,kBACA,4BACD;CAIH,MAAM,aAAa,WAAW,IAAI;CAClC,MAAM,KAAK,OAAO,EAAE,MAAM,YAAY,aAAa,EAAE,CAAC;CACtD,MAAM,KAAK,OACT,EAAE,MAAM,aAAa,GAAG,aAAa,EAAE,CACxC;CACD,MAAM,KAAK,OACT,EAAE,MAAM,aAAa,GAAG,aAAa,EAAE,CACxC;AAKD,KAAI,CAAC,YADQ,MAAO,IACG,IAAI,GAAG,CAC5B,QAAO,IACL,qBACA,+BACD;CAKH,MAAM,WAAW,eADJ,EAAE,MAAM,GAAG,GAAG,CACU;AACrC,KAAI,EAAE,GAAG,GAAG,KAAK,SACf,QAAO,IACL,oBACA,iCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;;;;;AAOxD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,OACA,qCACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,IAAI,GAAG;CACjB,UAAU,CAAC,iBAAiB,eAAe;CAC3C;CACA;CACA;CACA,WACE;CACH"}
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import nric from "./nric.js";
3
+
4
+ //#region src/my/mod.d.ts
5
+
6
+ //#endregion
7
+ export { mod_d_exports, nric };
8
+ //# sourceMappingURL=mod.d.ts.map
package/dist/my/mod.js ADDED
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import nric from "./nric.js";
3
+ //#region src/my/mod.ts
4
+ var my_exports = /* @__PURE__ */ __exportAll({ nric: () => nric });
5
+ //#endregion
6
+ export { my_exports, nric };
7
+
8
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/my/mod.ts"],"sourcesContent":["export { default as nric } from \"./nric\";\n"],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { ParsedPersonId, ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/my/nric.d.ts
4
+
5
+ declare const compact: (value: string) => string;
6
+ declare const validate: (value: string) => ValidateResult;
7
+ declare const format: (value: string) => string;
8
+ /**
9
+ * Extract birth date and gender from an NRIC.
10
+ * Returns null if the value is not valid.
11
+ */
12
+ declare const parse: (value: string) => ParsedPersonId | null;
13
+ /** Malaysian National Registration Identity Card. */
14
+ declare const nric: Validator;
15
+ //#endregion
16
+ export { compact, nric as default, format, parse, validate };
17
+ //# sourceMappingURL=nric.d.ts.map
@@ -0,0 +1,186 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { err } from "../_util/result.js";
3
+ import { isdigits } from "../_util/strings.js";
4
+ import { isValidDate } from "../_util/date.js";
5
+ //#region src/my/nric.ts
6
+ /**
7
+ * NRIC (Malaysian National Registration Identity
8
+ * Card Number, Nombor Kad Pengenalan).
9
+ *
10
+ * 12 digits: YYMMDD (birth date) + PB (place of
11
+ * birth, 2 digits) + SSS (serial) + G (gender:
12
+ * odd = male, even = female).
13
+ *
14
+ * No checksum; validation is structural (valid date
15
+ * and valid place-of-birth code).
16
+ *
17
+ * @see https://en.wikipedia.org/wiki/Malaysian_identity_card
18
+ */
19
+ /**
20
+ * Valid place-of-birth codes (2-digit).
21
+ * Codes 01-16 are states, 21-59 are pre-2000
22
+ * state codes, 60-68 born outside (ASEAN),
23
+ * 71-72/74-79 foreign nationals, 82-93 regions,
24
+ * 98-99 legacy.
25
+ */
26
+ const VALID_PB_CODES = new Set([
27
+ "01",
28
+ "02",
29
+ "03",
30
+ "04",
31
+ "05",
32
+ "06",
33
+ "07",
34
+ "08",
35
+ "09",
36
+ "10",
37
+ "11",
38
+ "12",
39
+ "13",
40
+ "14",
41
+ "15",
42
+ "16",
43
+ "21",
44
+ "22",
45
+ "23",
46
+ "24",
47
+ "25",
48
+ "26",
49
+ "27",
50
+ "28",
51
+ "29",
52
+ "30",
53
+ "31",
54
+ "32",
55
+ "33",
56
+ "34",
57
+ "35",
58
+ "36",
59
+ "37",
60
+ "38",
61
+ "39",
62
+ "40",
63
+ "41",
64
+ "42",
65
+ "43",
66
+ "44",
67
+ "45",
68
+ "46",
69
+ "47",
70
+ "48",
71
+ "49",
72
+ "50",
73
+ "51",
74
+ "52",
75
+ "53",
76
+ "54",
77
+ "55",
78
+ "56",
79
+ "57",
80
+ "58",
81
+ "59",
82
+ "60",
83
+ "61",
84
+ "62",
85
+ "63",
86
+ "64",
87
+ "65",
88
+ "66",
89
+ "67",
90
+ "68",
91
+ "71",
92
+ "72",
93
+ "74",
94
+ "75",
95
+ "76",
96
+ "77",
97
+ "78",
98
+ "79",
99
+ "82",
100
+ "83",
101
+ "84",
102
+ "85",
103
+ "86",
104
+ "87",
105
+ "88",
106
+ "89",
107
+ "90",
108
+ "91",
109
+ "92",
110
+ "93",
111
+ "98",
112
+ "99"
113
+ ]);
114
+ const compact = (value) => clean(value, " -");
115
+ /**
116
+ * Resolve the birth year from a 2-digit year.
117
+ * Years after the reference year are assumed to be
118
+ * in the previous century. Accepts an explicit
119
+ * reference year to avoid multiple clock reads.
120
+ */
121
+ const resolveYear = (yy, referenceYear) => {
122
+ const year = Math.floor(referenceYear / 100) * 100 + yy;
123
+ return year > referenceYear ? year - 100 : year;
124
+ };
125
+ const validate = (value) => {
126
+ const v = compact(value);
127
+ if (v.length !== 12) return err("INVALID_LENGTH", "NRIC must be exactly 12 digits");
128
+ if (!isdigits(v)) return err("INVALID_FORMAT", "NRIC must contain only digits");
129
+ const yy = Number(v.slice(0, 2));
130
+ const mm = Number(v.slice(2, 4));
131
+ const dd = Number(v.slice(4, 6));
132
+ if (!isValidDate(resolveYear(yy, (/* @__PURE__ */ new Date()).getFullYear()), mm, dd)) return err("INVALID_COMPONENT", "NRIC contains an invalid birth date");
133
+ const pb = v.slice(6, 8);
134
+ if (!VALID_PB_CODES.has(pb)) return err("INVALID_COMPONENT", "Invalid place-of-birth code: " + pb);
135
+ return {
136
+ valid: true,
137
+ compact: v
138
+ };
139
+ };
140
+ const format = (value) => {
141
+ const v = compact(value);
142
+ return v.slice(0, 6) + "-" + v.slice(6, 8) + "-" + v.slice(8);
143
+ };
144
+ /**
145
+ * Extract birth date and gender from an NRIC.
146
+ * Returns null if the value is not valid.
147
+ */
148
+ const parse = (value) => {
149
+ const result = validate(value);
150
+ if (!result.valid) return null;
151
+ const v = result.compact;
152
+ const yy = Number(v.slice(0, 2));
153
+ const mm = Number(v.slice(2, 4));
154
+ const dd = Number(v.slice(4, 6));
155
+ const year = resolveYear(yy, (/* @__PURE__ */ new Date()).getFullYear());
156
+ const gender = Number(v[11]) % 2 === 1 ? "male" : "female";
157
+ return {
158
+ birthDate: new Date(year, mm - 1, dd),
159
+ gender
160
+ };
161
+ };
162
+ /** Malaysian National Registration Identity Card. */
163
+ const nric = {
164
+ name: "Malaysian National Registration Identity Card Number",
165
+ localName: "Nombor Kad Pengenalan",
166
+ abbreviation: "NRIC",
167
+ aliases: [
168
+ "NRIC",
169
+ "MyKad",
170
+ "kad pengenalan"
171
+ ],
172
+ candidatePattern: "\\d{6}-?\\d{2}-?\\d{4}",
173
+ country: "MY",
174
+ entityType: "person",
175
+ description: "12-digit identity card number encoding birth date, place of birth, and gender",
176
+ sourceUrl: "https://en.wikipedia.org/wiki/Malaysian_identity_card",
177
+ lengths: [12],
178
+ examples: ["770305021234", "880715141234"],
179
+ compact,
180
+ format,
181
+ validate
182
+ };
183
+ //#endregion
184
+ export { compact, nric as default, format, parse, validate };
185
+
186
+ //# sourceMappingURL=nric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nric.js","names":[],"sources":["../../src/my/nric.ts"],"sourcesContent":["/**\n * NRIC (Malaysian National Registration Identity\n * Card Number, Nombor Kad Pengenalan).\n *\n * 12 digits: YYMMDD (birth date) + PB (place of\n * birth, 2 digits) + SSS (serial) + G (gender:\n * odd = male, even = female).\n *\n * No checksum; validation is structural (valid date\n * and valid place-of-birth code).\n *\n * @see https://en.wikipedia.org/wiki/Malaysian_identity_card\n */\n\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n Validator,\n} from \"../types\";\n\n/**\n * Valid place-of-birth codes (2-digit).\n * Codes 01-16 are states, 21-59 are pre-2000\n * state codes, 60-68 born outside (ASEAN),\n * 71-72/74-79 foreign nationals, 82-93 regions,\n * 98-99 legacy.\n */\nconst VALID_PB_CODES = new Set([\n \"01\",\n \"02\",\n \"03\",\n \"04\",\n \"05\",\n \"06\",\n \"07\",\n \"08\",\n \"09\",\n \"10\",\n \"11\",\n \"12\",\n \"13\",\n \"14\",\n \"15\",\n \"16\",\n \"21\",\n \"22\",\n \"23\",\n \"24\",\n \"25\",\n \"26\",\n \"27\",\n \"28\",\n \"29\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"35\",\n \"36\",\n \"37\",\n \"38\",\n \"39\",\n \"40\",\n \"41\",\n \"42\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"49\",\n \"50\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"59\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"67\",\n \"68\",\n \"71\",\n \"72\",\n \"74\",\n \"75\",\n \"76\",\n \"77\",\n \"78\",\n \"79\",\n \"82\",\n \"83\",\n \"84\",\n \"85\",\n \"86\",\n \"87\",\n \"88\",\n \"89\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"98\",\n \"99\",\n]);\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\n/**\n * Resolve the birth year from a 2-digit year.\n * Years after the reference year are assumed to be\n * in the previous century. Accepts an explicit\n * reference year to avoid multiple clock reads.\n */\nconst resolveYear = (\n yy: number,\n referenceYear: number,\n): number => {\n const century = Math.floor(referenceYear / 100);\n const year = century * 100 + yy;\n return year > referenceYear ? year - 100 : year;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"NRIC must be exactly 12 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"NRIC must contain only digits\",\n );\n }\n\n // Validate birth date (YYMMDD)\n const yy = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const dd = Number(v.slice(4, 6));\n\n const now = new Date().getFullYear();\n const year = resolveYear(yy, now);\n\n if (!isValidDate(year, mm, dd)) {\n return err(\n \"INVALID_COMPONENT\",\n \"NRIC contains an invalid birth date\",\n );\n }\n\n // Validate place-of-birth code\n const pb = v.slice(6, 8);\n if (!VALID_PB_CODES.has(pb)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Invalid place-of-birth code: \" + pb,\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return (\n v.slice(0, 6) + \"-\" + v.slice(6, 8) + \"-\" + v.slice(8)\n );\n};\n\n/**\n * Extract birth date and gender from an NRIC.\n * Returns null if the value is not valid.\n */\nconst parse = (value: string): ParsedPersonId | null => {\n const result = validate(value);\n if (!result.valid) return null;\n\n const v = result.compact;\n const yy = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const dd = Number(v.slice(4, 6));\n const now = new Date().getFullYear();\n const year = resolveYear(yy, now);\n\n // Last digit: odd = male, even = female\n const lastDigit = Number(v[11]);\n const gender = lastDigit % 2 === 1 ? \"male\" : \"female\";\n\n return {\n birthDate: new Date(year, mm - 1, dd),\n gender,\n };\n};\n\n/** Malaysian National Registration Identity Card. */\nconst nric: Validator = {\n name: \"Malaysian National Registration Identity Card Number\",\n localName: \"Nombor Kad Pengenalan\",\n abbreviation: \"NRIC\",\n aliases: [\"NRIC\", \"MyKad\", \"kad pengenalan\"] as const,\n candidatePattern: \"\\\\d{6}-?\\\\d{2}-?\\\\d{4}\",\n country: \"MY\",\n entityType: \"person\",\n description:\n \"12-digit identity card number encoding birth date, place of birth, and gender\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Malaysian_identity_card\",\n lengths: [12] as const,\n examples: [\"770305021234\", \"880715141234\"] as const,\n compact,\n format,\n validate,\n};\n\nexport default nric;\nexport { compact, format, parse, validate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAM,iBAAiB,IAAI,IAAI;CAC7B;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;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;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;;;;;;;AAQpB,MAAM,eACJ,IACA,kBACW;CAEX,MAAM,OADU,KAAK,MAAM,gBAAgB,IAAI,GACxB,MAAM;AAC7B,QAAO,OAAO,gBAAgB,OAAO,MAAM;;AAG7C,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,iCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,gCACD;CAIH,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;AAKhC,KAAI,CAAC,YAFQ,YAAY,qBADb,IAAI,MAAM,EAAC,aAAa,CACH,EAEV,IAAI,GAAG,CAC5B,QAAO,IACL,qBACA,sCACD;CAIH,MAAM,KAAK,EAAE,MAAM,GAAG,EAAE;AACxB,KAAI,CAAC,eAAe,IAAI,GAAG,CACzB,QAAO,IACL,qBACA,kCAAkC,GACnC;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QACE,EAAE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE;;;;;;AAQ1D,MAAM,SAAS,UAAyC;CACtD,MAAM,SAAS,SAAS,MAAM;AAC9B,KAAI,CAAC,OAAO,MAAO,QAAO;CAE1B,MAAM,IAAI,OAAO;CACjB,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAEhC,MAAM,OAAO,YAAY,qBADb,IAAI,MAAM,EAAC,aAAa,CACH;CAIjC,MAAM,SADY,OAAO,EAAE,IAAI,GACJ,MAAM,IAAI,SAAS;AAE9C,QAAO;EACL,WAAW,IAAI,KAAK,MAAM,KAAK,GAAG,GAAG;EACrC;EACD;;;AAIH,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EAAC;EAAQ;EAAS;EAAiB;CAC5C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,aACE;CACF,WACE;CACF,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,gBAAgB,eAAe;CAC1C;CACA;CACA;CACD"}
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import nin from "./nin.js";
3
+
4
+ //#region src/ng/mod.d.ts
5
+
6
+ //#endregion
7
+ export { mod_d_exports, nin };
8
+ //# sourceMappingURL=mod.d.ts.map
package/dist/ng/mod.js ADDED
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import nin from "./nin.js";
3
+ //#region src/ng/mod.ts
4
+ var ng_exports = /* @__PURE__ */ __exportAll({ nin: () => nin });
5
+ //#endregion
6
+ export { ng_exports, nin };
7
+
8
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/ng/mod.ts"],"sourcesContent":["export { default as nin } from \"./nin\";\n"],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/ng/nin.d.ts
4
+ /** Generate a random valid Nigerian NIN. */
5
+ declare const generate: () => string;
6
+ declare const compact: (value: string) => string;
7
+ declare const validate: (value: string) => ValidateResult;
8
+ declare const format: (value: string) => string;
9
+ /** Nigerian National Identification Number. */
10
+ declare const nin: Validator;
11
+ //#endregion
12
+ export { compact, nin as default, format, generate, validate };
13
+ //# sourceMappingURL=nin.d.ts.map
package/dist/ng/nin.js ADDED
@@ -0,0 +1,54 @@
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/ng/nin.ts
6
+ /**
7
+ * NIN (National Identification Number, Nigeria).
8
+ *
9
+ * 11-digit number randomly assigned by NIMC (National
10
+ * Identity Management Commission). No checksum; the
11
+ * digits are non-intelligible and carry no embedded
12
+ * meaning. Once assigned, a NIN is permanent and
13
+ * cannot be reassigned.
14
+ *
15
+ * @see https://nimc.gov.ng/about-nin/
16
+ */
17
+ /** Generate a random valid Nigerian NIN. */
18
+ const generate = () => randomDigits(11);
19
+ const compact = (value) => clean(value, " -");
20
+ const validate = (value) => {
21
+ const v = compact(value);
22
+ if (v.length !== 11) return err("INVALID_LENGTH", "Nigerian NIN must be 11 digits");
23
+ if (!isdigits(v)) return err("INVALID_FORMAT", "Nigerian NIN must contain only digits");
24
+ return {
25
+ valid: true,
26
+ compact: v
27
+ };
28
+ };
29
+ const format = (value) => {
30
+ const v = compact(value);
31
+ return `${v.slice(0, 3)} ${v.slice(3, 7)} ${v.slice(7)}`;
32
+ };
33
+ /** Nigerian National Identification Number. */
34
+ const nin = {
35
+ name: "National Identification Number",
36
+ localName: "National Identification Number",
37
+ abbreviation: "NIN",
38
+ aliases: ["NIN", "National Identification Number"],
39
+ candidatePattern: "\\d{11}",
40
+ country: "NG",
41
+ entityType: "person",
42
+ lengths: [11],
43
+ examples: ["13478900989", "70123456789"],
44
+ description: "11-digit national identity number issued by NIMC",
45
+ sourceUrl: "https://nimc.gov.ng/about-nin/",
46
+ compact,
47
+ format,
48
+ validate,
49
+ generate
50
+ };
51
+ //#endregion
52
+ export { compact, nin as default, format, generate, validate };
53
+
54
+ //# sourceMappingURL=nin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nin.js","names":[],"sources":["../../src/ng/nin.ts"],"sourcesContent":["/** Generate a random valid Nigerian NIN. */\nconst generate = (): string => randomDigits(11);\n\n/**\n * NIN (National Identification Number, Nigeria).\n *\n * 11-digit number randomly assigned by NIMC (National\n * Identity Management Commission). No checksum; the\n * digits are non-intelligible and carry no embedded\n * meaning. Once assigned, a NIN is permanent and\n * cannot be reassigned.\n *\n * @see https://nimc.gov.ng/about-nin/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Nigerian NIN must be 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Nigerian NIN must contain only digits\",\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, 3)} ${v.slice(3, 7)} ${v.slice(7)}`;\n};\n\n/** Nigerian National Identification Number. */\nconst nin: Validator = {\n name: \"National Identification Number\",\n localName: \"National Identification Number\",\n abbreviation: \"NIN\",\n aliases: [\n \"NIN\",\n \"National Identification Number\",\n ] as const,\n candidatePattern: \"\\\\d{11}\",\n country: \"NG\",\n entityType: \"person\",\n lengths: [11] as const,\n examples: [\"13478900989\", \"70123456789\"] as const,\n description:\n \"11-digit national identity number issued by NIMC\",\n sourceUrl: \"https://nimc.gov.ng/about-nin/\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;AACA,MAAM,iBAAyB,aAAa,GAAG;AAqB/C,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,iCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,wCACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE;;;AAIxD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,OACA,iCACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,eAAe,cAAc;CACxC,aACE;CACF,WAAW;CACX;CACA;CACA;CACA;CACD"}