@stll/stdnum 0.0.1 → 1.0.0

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 (474) hide show
  1. package/LICENSE +1 -5
  2. package/README.md +28 -4
  3. package/dist/_checksums/mod112.js +5 -5
  4. package/dist/_checksums/mod112.js.map +1 -1
  5. package/dist/_util/generate.d.ts +13 -1
  6. package/dist/_util/generate.js +23 -1
  7. package/dist/_util/generate.js.map +1 -1
  8. package/dist/ad/mod.d.ts +3 -2
  9. package/dist/ad/nrt.js +3 -2
  10. package/dist/ad/nrt.js.map +1 -1
  11. package/dist/ae/eid.d.ts +0 -1
  12. package/dist/ae/mod.d.ts +3 -2
  13. package/dist/ai/mod.d.ts +3 -2
  14. package/dist/al/mod.d.ts +3 -2
  15. package/dist/am/mod.d.ts +3 -2
  16. package/dist/ar/cbu.d.ts +0 -1
  17. package/dist/ar/cbu.js +1 -1
  18. package/dist/ar/cbu.js.map +1 -1
  19. package/dist/ar/cuit.d.ts +0 -1
  20. package/dist/ar/cuit.js +12 -12
  21. package/dist/ar/cuit.js.map +1 -1
  22. package/dist/ar/mod.d.ts +3 -2
  23. package/dist/at/mod.d.ts +3 -2
  24. package/dist/at/tin.d.ts +0 -1
  25. package/dist/at/uid.d.ts +0 -1
  26. package/dist/at/vnr.d.ts +3 -2
  27. package/dist/at/vnr.js +20 -3
  28. package/dist/at/vnr.js.map +1 -1
  29. package/dist/au/abn.d.ts +0 -1
  30. package/dist/au/acn.d.ts +0 -1
  31. package/dist/au/mod.d.ts +3 -2
  32. package/dist/au/tfn.d.ts +0 -1
  33. package/dist/az/mod.d.ts +3 -2
  34. package/dist/az/voen.d.ts +0 -1
  35. package/dist/az/voen.js.map +1 -1
  36. package/dist/ba/jmbg.d.ts +1 -2
  37. package/dist/ba/jmbg.js +1 -0
  38. package/dist/ba/jmbg.js.map +1 -1
  39. package/dist/ba/mod.d.ts +3 -2
  40. package/dist/bd/mod.d.ts +3 -2
  41. package/dist/bd/nid.js +10 -11
  42. package/dist/bd/nid.js.map +1 -1
  43. package/dist/be/bis.d.ts +0 -1
  44. package/dist/be/mod.d.ts +3 -2
  45. package/dist/be/nn.d.ts +0 -1
  46. package/dist/be/vat.d.ts +0 -1
  47. package/dist/bg/egn.d.ts +1 -2
  48. package/dist/bg/egn.js +10 -3
  49. package/dist/bg/egn.js.map +1 -1
  50. package/dist/bg/mod.d.ts +3 -2
  51. package/dist/bg/pnf.d.ts +0 -1
  52. package/dist/bg/vat.d.ts +0 -1
  53. package/dist/bh/cpr.d.ts +3 -2
  54. package/dist/bh/cpr.js +8 -2
  55. package/dist/bh/cpr.js.map +1 -1
  56. package/dist/bh/mod.d.ts +3 -2
  57. package/dist/bic.js +13 -15
  58. package/dist/bic.js.map +1 -1
  59. package/dist/br/cnpj.d.ts +0 -1
  60. package/dist/br/cpf.d.ts +0 -1
  61. package/dist/br/mod.d.ts +3 -2
  62. package/dist/by/mod.d.ts +3 -2
  63. package/dist/by/unp.d.ts +0 -1
  64. package/dist/by/unp.js +6 -3
  65. package/dist/by/unp.js.map +1 -1
  66. package/dist/bz/mod.d.ts +3 -2
  67. package/dist/bz/tin.d.ts +3 -2
  68. package/dist/bz/tin.js +9 -1
  69. package/dist/bz/tin.js.map +1 -1
  70. package/dist/ca/bn.d.ts +0 -1
  71. package/dist/ca/mod.d.ts +3 -2
  72. package/dist/ca/sin.d.ts +0 -1
  73. package/dist/ch/mod.d.ts +3 -2
  74. package/dist/ch/ssn.d.ts +0 -1
  75. package/dist/ch/uid.d.ts +0 -1
  76. package/dist/ch/vat.d.ts +0 -1
  77. package/dist/cl/mod.d.ts +3 -2
  78. package/dist/cl/rut.d.ts +0 -1
  79. package/dist/cl/rut.js +1 -1
  80. package/dist/cl/rut.js.map +1 -1
  81. package/dist/cn/mod.d.ts +3 -2
  82. package/dist/cn/ric.d.ts +1 -2
  83. package/dist/cn/ric.js +1 -0
  84. package/dist/cn/ric.js.map +1 -1
  85. package/dist/cn/uscc.d.ts +0 -1
  86. package/dist/cn/uscc.js +7 -6
  87. package/dist/cn/uscc.js.map +1 -1
  88. package/dist/co/mod.d.ts +3 -2
  89. package/dist/co/nit.d.ts +0 -1
  90. package/dist/co/nit.js +4 -1
  91. package/dist/co/nit.js.map +1 -1
  92. package/dist/cr/cpf.js +4 -3
  93. package/dist/cr/cpf.js.map +1 -1
  94. package/dist/cr/mod.d.ts +3 -2
  95. package/dist/creditcard.d.ts +0 -1
  96. package/dist/cu/mod.d.ts +3 -2
  97. package/dist/cu/ni.d.ts +4 -3
  98. package/dist/cu/ni.js +11 -1
  99. package/dist/cu/ni.js.map +1 -1
  100. package/dist/cy/mod.d.ts +3 -2
  101. package/dist/cy/vat.d.ts +0 -1
  102. package/dist/cz/dic.d.ts +0 -1
  103. package/dist/cz/ico.d.ts +0 -1
  104. package/dist/cz/mod.d.ts +3 -2
  105. package/dist/cz/rc.d.ts +1 -2
  106. package/dist/cz/rc.js +33 -8
  107. package/dist/cz/rc.js.map +1 -1
  108. package/dist/de/handelsreg.js +9 -9
  109. package/dist/de/handelsreg.js.map +1 -1
  110. package/dist/de/idnr.d.ts +0 -1
  111. package/dist/de/idnr.js.map +1 -1
  112. package/dist/de/mod.d.ts +3 -2
  113. package/dist/de/stnr.d.ts +0 -1
  114. package/dist/de/stnr.js.map +1 -1
  115. package/dist/de/svnr.d.ts +0 -1
  116. package/dist/de/svnr.js +2 -2
  117. package/dist/de/svnr.js.map +1 -1
  118. package/dist/de/vat.d.ts +0 -1
  119. package/dist/dk/cpr.d.ts +4 -3
  120. package/dist/dk/cpr.js +12 -2
  121. package/dist/dk/cpr.js.map +1 -1
  122. package/dist/dk/cvr.d.ts +0 -1
  123. package/dist/dk/mod.d.ts +3 -2
  124. package/dist/dk/vat.d.ts +0 -1
  125. package/dist/do/mod.d.ts +3 -2
  126. package/dist/do/rnc.d.ts +0 -1
  127. package/dist/do/rnc.js +1 -1
  128. package/dist/do/rnc.js.map +1 -1
  129. package/dist/ec/mod.d.ts +3 -2
  130. package/dist/ec/ruc.d.ts +0 -1
  131. package/dist/ec/ruc.js +1 -1
  132. package/dist/ec/ruc.js.map +1 -1
  133. package/dist/ee/ik.d.ts +1 -2
  134. package/dist/ee/ik.js +12 -4
  135. package/dist/ee/ik.js.map +1 -1
  136. package/dist/ee/mod.d.ts +3 -2
  137. package/dist/ee/registrikood.d.ts +0 -1
  138. package/dist/ee/registrikood.js +8 -7
  139. package/dist/ee/registrikood.js.map +1 -1
  140. package/dist/ee/vat.d.ts +0 -1
  141. package/dist/eg/mod.d.ts +3 -2
  142. package/dist/es/cif.d.ts +0 -1
  143. package/dist/es/cif.js +2 -2
  144. package/dist/es/cif.js.map +1 -1
  145. package/dist/es/dni.d.ts +0 -1
  146. package/dist/es/mod.d.ts +3 -2
  147. package/dist/es/nie.d.ts +0 -1
  148. package/dist/es/nie.js +13 -13
  149. package/dist/es/nie.js.map +1 -1
  150. package/dist/es/nss.d.ts +0 -1
  151. package/dist/es/vat.d.ts +0 -1
  152. package/dist/eu/mod.d.ts +3 -2
  153. package/dist/eu/vat.d.ts +3 -2
  154. package/dist/eu/vat.js +43 -2
  155. package/dist/eu/vat.js.map +1 -1
  156. package/dist/fi/hetu.d.ts +4 -3
  157. package/dist/fi/hetu.js +17 -2
  158. package/dist/fi/hetu.js.map +1 -1
  159. package/dist/fi/mod.d.ts +3 -2
  160. package/dist/fi/vat.d.ts +0 -1
  161. package/dist/fi/ytunnus.d.ts +0 -1
  162. package/dist/fr/mod.d.ts +3 -2
  163. package/dist/fr/nif.d.ts +0 -1
  164. package/dist/fr/nir.d.ts +1 -2
  165. package/dist/fr/nir.js +1 -0
  166. package/dist/fr/nir.js.map +1 -1
  167. package/dist/fr/siren.d.ts +0 -1
  168. package/dist/fr/siret.d.ts +0 -1
  169. package/dist/fr/tva.d.ts +0 -1
  170. package/dist/gb/mod.d.ts +3 -2
  171. package/dist/gb/nino.js +7 -7
  172. package/dist/gb/nino.js.map +1 -1
  173. package/dist/gb/sedol.d.ts +0 -1
  174. package/dist/gb/sedol.js +8 -7
  175. package/dist/gb/sedol.js.map +1 -1
  176. package/dist/gb/utr.d.ts +0 -1
  177. package/dist/gb/vat.d.ts +0 -1
  178. package/dist/ge/mod.d.ts +3 -2
  179. package/dist/gh/mod.d.ts +3 -2
  180. package/dist/gh/tin.d.ts +0 -1
  181. package/dist/gh/tin.js +9 -9
  182. package/dist/gh/tin.js.map +1 -1
  183. package/dist/gr/amka.d.ts +0 -1
  184. package/dist/gr/mod.d.ts +3 -2
  185. package/dist/gr/vat.d.ts +0 -1
  186. package/dist/gt/mod.d.ts +3 -2
  187. package/dist/gt/nit.d.ts +0 -1
  188. package/dist/gt/nit.js +5 -2
  189. package/dist/gt/nit.js.map +1 -1
  190. package/dist/hk/hkid.d.ts +0 -1
  191. package/dist/hk/hkid.js +1 -0
  192. package/dist/hk/hkid.js.map +1 -1
  193. package/dist/hk/mod.d.ts +3 -2
  194. package/dist/hr/mod.d.ts +3 -2
  195. package/dist/hr/vat.d.ts +0 -1
  196. package/dist/hu/mod.d.ts +3 -2
  197. package/dist/hu/vat.d.ts +0 -1
  198. package/dist/iban.d.ts +0 -1
  199. package/dist/id/mod.d.ts +3 -2
  200. package/dist/id/npwp.d.ts +0 -1
  201. package/dist/ie/mod.d.ts +3 -2
  202. package/dist/ie/pps.d.ts +0 -1
  203. package/dist/ie/vat.d.ts +0 -1
  204. package/dist/il/idnr.d.ts +0 -1
  205. package/dist/il/mod.d.ts +3 -2
  206. package/dist/in/aadhaar.d.ts +0 -1
  207. package/dist/in/gstin.d.ts +0 -1
  208. package/dist/in/gstin.js +3 -1
  209. package/dist/in/gstin.js.map +1 -1
  210. package/dist/in/mod.d.ts +3 -2
  211. package/dist/in/pan.js +2 -2
  212. package/dist/in/pan.js.map +1 -1
  213. package/dist/index.d.ts +2 -2
  214. package/dist/iq/mod.d.ts +3 -2
  215. package/dist/ir/mod.d.ts +3 -2
  216. package/dist/ir/nid.d.ts +0 -1
  217. package/dist/is/kennitala.d.ts +0 -1
  218. package/dist/is/mod.d.ts +3 -2
  219. package/dist/isin.d.ts +0 -1
  220. package/dist/isin.js +9 -9
  221. package/dist/isin.js.map +1 -1
  222. package/dist/it/codicefiscale.d.ts +4 -3
  223. package/dist/it/codicefiscale.js +26 -2
  224. package/dist/it/codicefiscale.js.map +1 -1
  225. package/dist/it/iva.d.ts +0 -1
  226. package/dist/it/mod.d.ts +3 -2
  227. package/dist/jp/cn.d.ts +0 -1
  228. package/dist/jp/mod.d.ts +3 -2
  229. package/dist/jp/mynumber.d.ts +0 -1
  230. package/dist/kr/mod.d.ts +3 -2
  231. package/dist/kr/rrn.d.ts +4 -3
  232. package/dist/kr/rrn.js +13 -2
  233. package/dist/kr/rrn.js.map +1 -1
  234. package/dist/kw/civil.d.ts +6 -5
  235. package/dist/kw/civil.js +18 -3
  236. package/dist/kw/civil.js.map +1 -1
  237. package/dist/kw/mod.d.ts +3 -2
  238. package/dist/kz/iin.d.ts +1 -2
  239. package/dist/kz/iin.js +1 -0
  240. package/dist/kz/iin.js.map +1 -1
  241. package/dist/kz/mod.d.ts +3 -2
  242. package/dist/lei.d.ts +0 -1
  243. package/dist/li/mod.d.ts +3 -2
  244. package/dist/lk/mod.d.ts +3 -2
  245. package/dist/lk/nic.d.ts +4 -3
  246. package/dist/lk/nic.js +14 -2
  247. package/dist/lk/nic.js.map +1 -1
  248. package/dist/lt/asmens.d.ts +0 -1
  249. package/dist/lt/mod.d.ts +3 -2
  250. package/dist/lt/vat.d.ts +0 -1
  251. package/dist/lu/mod.d.ts +3 -2
  252. package/dist/lu/vat.d.ts +0 -1
  253. package/dist/luhn.d.ts +0 -1
  254. package/dist/luhn.js +7 -0
  255. package/dist/luhn.js.map +1 -1
  256. package/dist/lv/mod.d.ts +3 -2
  257. package/dist/lv/vat.d.ts +0 -1
  258. package/dist/lv/vat.js +39 -12
  259. package/dist/lv/vat.js.map +1 -1
  260. package/dist/ma/ice.d.ts +0 -1
  261. package/dist/ma/mod.d.ts +3 -2
  262. package/dist/mc/mod.d.ts +3 -2
  263. package/dist/mc/tva.d.ts +0 -1
  264. package/dist/md/idno.d.ts +0 -1
  265. package/dist/md/mod.d.ts +3 -2
  266. package/dist/me/mod.d.ts +3 -2
  267. package/dist/me/pib.d.ts +0 -1
  268. package/dist/mk/edb.d.ts +0 -1
  269. package/dist/mk/mod.d.ts +3 -2
  270. package/dist/mt/mod.d.ts +3 -2
  271. package/dist/mt/vat.d.ts +0 -1
  272. package/dist/mu/mod.d.ts +3 -2
  273. package/dist/mx/clabe.d.ts +0 -1
  274. package/dist/mx/curp.d.ts +4 -3
  275. package/dist/mx/curp.js +25 -3
  276. package/dist/mx/curp.js.map +1 -1
  277. package/dist/mx/mod.d.ts +3 -2
  278. package/dist/mx/rfc.d.ts +3 -2
  279. package/dist/mx/rfc.js +21 -2
  280. package/dist/mx/rfc.js.map +1 -1
  281. package/dist/my/mod.d.ts +3 -2
  282. package/dist/my/nric.d.ts +4 -3
  283. package/dist/my/nric.js +16 -2
  284. package/dist/my/nric.js.map +1 -1
  285. package/dist/ng/mod.d.ts +3 -2
  286. package/dist/ni/mod.d.ts +3 -2
  287. package/dist/ni/ruc.d.ts +0 -1
  288. package/dist/nl/bsn.d.ts +0 -1
  289. package/dist/nl/mod.d.ts +3 -2
  290. package/dist/nl/vat.d.ts +0 -1
  291. package/dist/nl/vat.js +9 -43
  292. package/dist/nl/vat.js.map +1 -1
  293. package/dist/no/fodselsnummer.d.ts +1 -2
  294. package/dist/no/fodselsnummer.js +1 -0
  295. package/dist/no/fodselsnummer.js.map +1 -1
  296. package/dist/no/mod.d.ts +3 -2
  297. package/dist/no/mva.d.ts +0 -1
  298. package/dist/no/orgnr.d.ts +0 -1
  299. package/dist/nz/ird.d.ts +0 -1
  300. package/dist/nz/ird.js +2 -2
  301. package/dist/nz/ird.js.map +1 -1
  302. package/dist/nz/mod.d.ts +3 -2
  303. package/dist/pa/mod.d.ts +3 -2
  304. package/dist/pa/ruc.d.ts +0 -1
  305. package/dist/pa/ruc.js +3 -1
  306. package/dist/pa/ruc.js.map +1 -1
  307. package/dist/patterns.d.ts +1 -4
  308. package/dist/patterns.js +80 -23
  309. package/dist/patterns.js.map +1 -1
  310. package/dist/pe/mod.d.ts +3 -2
  311. package/dist/pe/ruc.d.ts +0 -1
  312. package/dist/pe/ruc.js +9 -9
  313. package/dist/pe/ruc.js.map +1 -1
  314. package/dist/ph/mod.d.ts +3 -2
  315. package/dist/pk/cnic.js.map +1 -1
  316. package/dist/pk/mod.d.ts +3 -2
  317. package/dist/pl/mod.d.ts +3 -2
  318. package/dist/pl/nip.d.ts +0 -1
  319. package/dist/pl/pesel.d.ts +1 -2
  320. package/dist/pl/pesel.js +1 -0
  321. package/dist/pl/pesel.js.map +1 -1
  322. package/dist/pl/regon.d.ts +0 -1
  323. package/dist/pt/cc.d.ts +0 -1
  324. package/dist/pt/cc.js +6 -4
  325. package/dist/pt/cc.js.map +1 -1
  326. package/dist/pt/mod.d.ts +3 -2
  327. package/dist/pt/vat.d.ts +0 -1
  328. package/dist/ro/cnp.d.ts +1 -2
  329. package/dist/ro/cnp.js +1 -0
  330. package/dist/ro/cnp.js.map +1 -1
  331. package/dist/ro/mod.d.ts +3 -2
  332. package/dist/ro/vat.d.ts +0 -1
  333. package/dist/rs/mod.d.ts +3 -2
  334. package/dist/rs/pib.d.ts +0 -1
  335. package/dist/ru/inn.d.ts +0 -1
  336. package/dist/ru/inn.js +1 -1
  337. package/dist/ru/inn.js.map +1 -1
  338. package/dist/ru/mod.d.ts +3 -2
  339. package/dist/se/mod.d.ts +3 -2
  340. package/dist/se/orgnr.d.ts +0 -1
  341. package/dist/se/personnummer.d.ts +1 -2
  342. package/dist/se/personnummer.js +1 -0
  343. package/dist/se/personnummer.js.map +1 -1
  344. package/dist/se/vat.d.ts +0 -1
  345. package/dist/sg/mod.d.ts +3 -2
  346. package/dist/sg/uen.d.ts +0 -1
  347. package/dist/sg/uen.js +46 -55
  348. package/dist/sg/uen.js.map +1 -1
  349. package/dist/si/emso.d.ts +1 -2
  350. package/dist/si/emso.js +17 -4
  351. package/dist/si/emso.js.map +1 -1
  352. package/dist/si/mod.d.ts +3 -2
  353. package/dist/si/vat.d.ts +0 -1
  354. package/dist/sk/dic.d.ts +0 -1
  355. package/dist/sk/ico.d.ts +0 -1
  356. package/dist/sk/mod.d.ts +3 -2
  357. package/dist/sk/rc.d.ts +4 -5
  358. package/dist/sk/rc.js +5 -2
  359. package/dist/sk/rc.js.map +1 -1
  360. package/dist/th/mod.d.ts +3 -2
  361. package/dist/th/tin.d.ts +0 -1
  362. package/dist/tr/mod.d.ts +3 -2
  363. package/dist/tr/tckimlik.d.ts +0 -1
  364. package/dist/tr/vkn.d.ts +0 -1
  365. package/dist/tw/mod.d.ts +3 -2
  366. package/dist/tw/ubn.d.ts +0 -1
  367. package/dist/tw/ubn.js +1 -1
  368. package/dist/tw/ubn.js.map +1 -1
  369. package/dist/types.d.ts +35 -22
  370. package/dist/ua/edrpou.d.ts +0 -1
  371. package/dist/ua/edrpou.js +4 -1
  372. package/dist/ua/edrpou.js.map +1 -1
  373. package/dist/ua/mod.d.ts +3 -2
  374. package/dist/us/ein.js +87 -87
  375. package/dist/us/ein.js.map +1 -1
  376. package/dist/us/itin.js +3 -4
  377. package/dist/us/itin.js.map +1 -1
  378. package/dist/us/mod.d.ts +3 -2
  379. package/dist/us/rtn.d.ts +0 -1
  380. package/dist/us/rtn.js +8 -5
  381. package/dist/us/rtn.js.map +1 -1
  382. package/dist/uy/mod.d.ts +3 -2
  383. package/dist/uy/rut.d.ts +0 -1
  384. package/dist/uy/rut.js +1 -1
  385. package/dist/uy/rut.js.map +1 -1
  386. package/dist/ve/mod.d.ts +3 -2
  387. package/dist/ve/rif.d.ts +0 -1
  388. package/dist/ve/rif.js +11 -11
  389. package/dist/ve/rif.js.map +1 -1
  390. package/dist/vn/mod.d.ts +3 -2
  391. package/dist/vn/mst.d.ts +0 -1
  392. package/dist/za/idnr.d.ts +1 -2
  393. package/dist/za/idnr.js +1 -0
  394. package/dist/za/idnr.js.map +1 -1
  395. package/dist/za/mod.d.ts +3 -2
  396. package/package.json +18 -15
  397. package/src/_checksums/mod112.ts +7 -6
  398. package/src/_util/generate.ts +38 -0
  399. package/src/ad/nrt.ts +12 -4
  400. package/src/ar/cbu.ts +2 -2
  401. package/src/ar/cuit.ts +15 -7
  402. package/src/at/vnr.ts +26 -4
  403. package/src/az/voen.ts +2 -0
  404. package/src/ba/jmbg.ts +2 -1
  405. package/src/bd/nid.ts +4 -4
  406. package/src/bg/egn.ts +12 -4
  407. package/src/bh/cpr.ts +10 -1
  408. package/src/bic.ts +19 -17
  409. package/src/by/unp.ts +9 -4
  410. package/src/bz/tin.ts +12 -1
  411. package/src/cl/rut.ts +4 -2
  412. package/src/cn/ric.ts +4 -1
  413. package/src/cn/uscc.ts +20 -8
  414. package/src/co/nit.ts +6 -2
  415. package/src/cr/cpf.ts +4 -3
  416. package/src/cu/ni.ts +22 -2
  417. package/src/cz/rc.ts +54 -23
  418. package/src/de/handelsreg.ts +14 -3
  419. package/src/de/idnr.ts +3 -0
  420. package/src/de/stnr.ts +4 -0
  421. package/src/de/svnr.ts +7 -2
  422. package/src/dk/cpr.ts +16 -2
  423. package/src/do/rnc.ts +2 -2
  424. package/src/ec/ruc.ts +2 -2
  425. package/src/ee/ik.ts +14 -4
  426. package/src/ee/registrikood.ts +4 -3
  427. package/src/es/cif.ts +2 -3
  428. package/src/es/nie.ts +10 -5
  429. package/src/eu/vat.ts +46 -1
  430. package/src/fi/hetu.ts +19 -2
  431. package/src/fr/nir.ts +2 -1
  432. package/src/gb/nino.ts +11 -10
  433. package/src/gb/sedol.ts +14 -12
  434. package/src/gh/tin.ts +4 -3
  435. package/src/gt/nit.ts +6 -3
  436. package/src/hk/hkid.ts +2 -1
  437. package/src/in/gstin.ts +3 -1
  438. package/src/in/pan.ts +8 -3
  439. package/src/index.ts +3 -0
  440. package/src/isin.ts +10 -4
  441. package/src/it/codicefiscale.ts +40 -2
  442. package/src/kr/rrn.ts +20 -2
  443. package/src/kw/civil.ts +25 -9
  444. package/src/kz/iin.ts +2 -1
  445. package/src/lk/nic.ts +24 -2
  446. package/src/luhn.ts +3 -0
  447. package/src/lv/vat.ts +46 -20
  448. package/src/mx/curp.ts +41 -5
  449. package/src/mx/rfc.ts +35 -4
  450. package/src/my/nric.ts +26 -2
  451. package/src/nl/vat.ts +11 -66
  452. package/src/no/fodselsnummer.ts +2 -1
  453. package/src/nz/ird.ts +4 -4
  454. package/src/pa/ruc.ts +32 -8
  455. package/src/patterns.ts +135 -28
  456. package/src/pe/ruc.ts +6 -7
  457. package/src/pk/cnic.ts +2 -0
  458. package/src/pl/pesel.ts +2 -1
  459. package/src/pt/cc.ts +6 -4
  460. package/src/ro/cnp.ts +2 -1
  461. package/src/ru/inn.ts +2 -2
  462. package/src/se/personnummer.ts +2 -1
  463. package/src/sg/uen.ts +37 -20
  464. package/src/si/emso.ts +30 -5
  465. package/src/sk/rc.ts +13 -4
  466. package/src/tw/ubn.ts +2 -2
  467. package/src/types.ts +37 -6
  468. package/src/ua/edrpou.ts +3 -2
  469. package/src/us/ein.ts +88 -88
  470. package/src/us/itin.ts +7 -8
  471. package/src/us/rtn.ts +16 -11
  472. package/src/uy/rut.ts +2 -2
  473. package/src/ve/rif.ts +11 -6
  474. package/src/za/idnr.ts +2 -1
package/dist/hk/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import hkid from "./hkid.js";
3
2
 
4
3
  //#region src/hk/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { hkid };
6
+ }
6
7
  //#endregion
7
8
  export { hkid, mod_d_exports };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/hr/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import vat from "./vat.js";
3
2
 
4
3
  //#region src/hr/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { vat };
6
+ }
6
7
  //#endregion
7
8
  export { mod_d_exports, vat };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/hr/vat.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/hr/vat.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/hu/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import vat from "./vat.js";
3
2
 
4
3
  //#region src/hu/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { vat };
6
+ }
6
7
  //#endregion
7
8
  export { mod_d_exports, vat };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/hu/vat.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/hu/vat.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/iban.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "./types.js";
2
2
 
3
3
  //#region src/iban.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/id/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import npwp from "./npwp.js";
3
2
 
4
3
  //#region src/id/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { npwp };
6
+ }
6
7
  //#endregion
7
8
  export { mod_d_exports, npwp };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/id/npwp.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/id/npwp.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/ie/mod.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import pps from "./pps.js";
3
2
  import vat from "./vat.js";
4
3
 
5
4
  //#region src/ie/mod.d.ts
6
-
5
+ declare namespace mod_d_exports {
6
+ export { pps, vat };
7
+ }
7
8
  //#endregion
8
9
  export { mod_d_exports, pps, vat };
9
10
  //# sourceMappingURL=mod.d.ts.map
package/dist/ie/pps.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/ie/pps.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/ie/vat.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/ie/vat.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/il/idnr.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/il/idnr.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/il/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import idnr from "./idnr.js";
3
2
 
4
3
  //#region src/il/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { idnr };
6
+ }
6
7
  //#endregion
7
8
  export { idnr, mod_d_exports };
8
9
  //# sourceMappingURL=mod.d.ts.map
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/in/aadhaar.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/in/gstin.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/in/gstin.js CHANGED
@@ -63,7 +63,9 @@ const luhn36Checksum = (value) => {
63
63
  let sum = 0;
64
64
  let double = false;
65
65
  for (let i = value.length - 1; i >= 0; i--) {
66
- let v = charValue(value[i]);
66
+ const ch = value[i];
67
+ if (ch === void 0) continue;
68
+ let v = charValue(ch);
67
69
  if (double) {
68
70
  v *= 2;
69
71
  sum += Math.floor(v / BASE) + v % BASE;
@@ -1 +1 @@
1
- {"version":3,"file":"gstin.js","names":[],"sources":["../../src/in/gstin.ts"],"sourcesContent":["/**\n * GSTIN (Goods and Services Tax Identification\n * Number, India).\n *\n * 15 characters: 2-digit state code + 10-char PAN +\n * 1 entity number (1-9, A-Z) + \"Z\" + 1 check digit.\n * Check digit uses the Luhn mod 36 algorithm.\n *\n * @see https://en.wikipedia.org/wiki/Goods_and_Services_Tax_Identification_Number\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { charValue } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst GSTIN_RE =\n /^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z][0-9A-Z]Z[0-9A-Z]$/;\n\n/** Valid Indian state/UT codes: 01-37. */\nconst VALID_STATE_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 \"17\",\n \"18\",\n \"19\",\n \"20\",\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]);\n\nconst BASE = 36;\n\n/**\n * Luhn mod 36 checksum over the full GSTIN.\n * Returns 0 for a valid number.\n */\nconst luhn36Checksum = (value: string): number => {\n let sum = 0;\n let double = false;\n for (let i = value.length - 1; i >= 0; i--) {\n let v = charValue(value[i]!);\n if (double) {\n v *= 2;\n sum += Math.floor(v / BASE) + (v % BASE);\n } else {\n sum += v;\n }\n double = !double;\n }\n return sum % BASE;\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 15) {\n return err(\n \"INVALID_LENGTH\",\n \"GSTIN must be 15 characters\",\n );\n }\n if (!GSTIN_RE.test(v)) {\n return err(\"INVALID_FORMAT\", \"GSTIN format is invalid\");\n }\n const stateCode = v.slice(0, 2);\n if (!VALID_STATE_CODES.has(stateCode)) {\n return err(\n \"INVALID_COMPONENT\",\n \"GSTIN state code is invalid\",\n );\n }\n if (v[12] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"GSTIN entity number cannot be 0\",\n );\n }\n if (luhn36Checksum(v) !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"GSTIN check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid GSTIN. */\nconst generate = (): string => {\n for (;;) {\n const state = String(randomInt(1, 37)).padStart(2, \"0\");\n let pan = \"\";\n for (let i = 0; i < 5; i++)\n pan += String.fromCharCode(65 + randomInt(0, 25));\n pan +=\n randomDigits(4) +\n String.fromCharCode(65 + randomInt(0, 25));\n const entity = String(randomInt(1, 9));\n const partial = state + pan + entity + \"Z\";\n for (let d = 0; d <= 9; d++) {\n const c = partial + String(d);\n if (validate(c).valid) return c;\n }\n for (let c = 65; c <= 90; c++) {\n const cand = partial + String.fromCharCode(c);\n if (validate(cand).valid) return cand;\n }\n }\n};\n\n/** Indian Goods and Services Tax ID. */\nconst gstin: Validator = {\n name: \"Indian Goods and Services Tax ID\",\n localName: \"Goods and Services Tax Identification Number\",\n abbreviation: \"GSTIN\",\n aliases: [\"GSTIN\", \"GST number\"] as const,\n candidatePattern:\n \"\\\\d{2}[A-Z]{5}\\\\d{4}[A-Z][A-Z\\\\d][Z][A-Z\\\\d]\",\n country: \"IN\",\n entityType: \"company\",\n lengths: [15],\n examples: [\"27AAPFU0939F1ZV\", \"29AAGCB7383J1Z4\"],\n description:\n \"15-character tax identifier for GST-registered businesses\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Goods_and_Services_Tax_Identification_Number\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default gstin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,WACJ;;AAGF,MAAM,oBAAoB,IAAI,IAAI;CAChC;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,OAAO;;;;;AAMb,MAAM,kBAAkB,UAA0B;CAChD,IAAI,MAAM;CACV,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;EAC1C,IAAI,IAAI,UAAU,MAAM,GAAI;AAC5B,MAAI,QAAQ;AACV,QAAK;AACL,UAAO,KAAK,MAAM,IAAI,KAAK,GAAI,IAAI;QAEnC,QAAO;AAET,WAAS,CAAC;;AAEZ,QAAO,MAAM;;AAGf,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,aAAa;AAElC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,8BACD;AAEH,KAAI,CAAC,SAAS,KAAK,EAAE,CACnB,QAAO,IAAI,kBAAkB,0BAA0B;CAEzD,MAAM,YAAY,EAAE,MAAM,GAAG,EAAE;AAC/B,KAAI,CAAC,kBAAkB,IAAI,UAAU,CACnC,QAAO,IACL,qBACA,8BACD;AAEH,KAAI,EAAE,QAAQ,IACZ,QAAO,IACL,qBACA,kCACD;AAEH,KAAI,eAAe,EAAE,KAAK,EACxB,QAAO,IACL,oBACA,6BACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,QAAQ,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACvD,IAAI,MAAM;AACV,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,QAAO,OAAO,aAAa,KAAK,UAAU,GAAG,GAAG,CAAC;AACnD,SACE,aAAa,EAAE,GACf,OAAO,aAAa,KAAK,UAAU,GAAG,GAAG,CAAC;EAC5C,MAAM,SAAS,OAAO,UAAU,GAAG,EAAE,CAAC;EACtC,MAAM,UAAU,QAAQ,MAAM,SAAS;AACvC,OAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;GAC3B,MAAM,IAAI,UAAU,OAAO,EAAE;AAC7B,OAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;AAEhC,OAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK;GAC7B,MAAM,OAAO,UAAU,OAAO,aAAa,EAAE;AAC7C,OAAI,SAAS,KAAK,CAAC,MAAO,QAAO;;;;;AAMvC,MAAM,QAAmB;CACvB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,SAAS,aAAa;CAChC,kBACE;CACF,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,mBAAmB,kBAAkB;CAChD,aACE;CACF,WACE;CACF;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"gstin.js","names":[],"sources":["../../src/in/gstin.ts"],"sourcesContent":["/**\n * GSTIN (Goods and Services Tax Identification\n * Number, India).\n *\n * 15 characters: 2-digit state code + 10-char PAN +\n * 1 entity number (1-9, A-Z) + \"Z\" + 1 check digit.\n * Check digit uses the Luhn mod 36 algorithm.\n *\n * @see https://en.wikipedia.org/wiki/Goods_and_Services_Tax_Identification_Number\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { charValue } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst GSTIN_RE =\n /^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z][0-9A-Z]Z[0-9A-Z]$/;\n\n/** Valid Indian state/UT codes: 01-37. */\nconst VALID_STATE_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 \"17\",\n \"18\",\n \"19\",\n \"20\",\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]);\n\nconst BASE = 36;\n\n/**\n * Luhn mod 36 checksum over the full GSTIN.\n * Returns 0 for a valid number.\n */\nconst luhn36Checksum = (value: string): number => {\n let sum = 0;\n let double = false;\n for (let i = value.length - 1; i >= 0; i--) {\n const ch = value[i];\n if (ch === undefined) continue;\n let v = charValue(ch);\n if (double) {\n v *= 2;\n sum += Math.floor(v / BASE) + (v % BASE);\n } else {\n sum += v;\n }\n double = !double;\n }\n return sum % BASE;\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 15) {\n return err(\n \"INVALID_LENGTH\",\n \"GSTIN must be 15 characters\",\n );\n }\n if (!GSTIN_RE.test(v)) {\n return err(\"INVALID_FORMAT\", \"GSTIN format is invalid\");\n }\n const stateCode = v.slice(0, 2);\n if (!VALID_STATE_CODES.has(stateCode)) {\n return err(\n \"INVALID_COMPONENT\",\n \"GSTIN state code is invalid\",\n );\n }\n if (v[12] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"GSTIN entity number cannot be 0\",\n );\n }\n if (luhn36Checksum(v) !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"GSTIN check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid GSTIN. */\nconst generate = (): string => {\n for (;;) {\n const state = String(randomInt(1, 37)).padStart(2, \"0\");\n let pan = \"\";\n for (let i = 0; i < 5; i++)\n pan += String.fromCharCode(65 + randomInt(0, 25));\n pan +=\n randomDigits(4) +\n String.fromCharCode(65 + randomInt(0, 25));\n const entity = String(randomInt(1, 9));\n const partial = state + pan + entity + \"Z\";\n for (let d = 0; d <= 9; d++) {\n const c = partial + String(d);\n if (validate(c).valid) return c;\n }\n for (let c = 65; c <= 90; c++) {\n const cand = partial + String.fromCharCode(c);\n if (validate(cand).valid) return cand;\n }\n }\n};\n\n/** Indian Goods and Services Tax ID. */\nconst gstin: Validator = {\n name: \"Indian Goods and Services Tax ID\",\n localName: \"Goods and Services Tax Identification Number\",\n abbreviation: \"GSTIN\",\n aliases: [\"GSTIN\", \"GST number\"] as const,\n candidatePattern:\n \"\\\\d{2}[A-Z]{5}\\\\d{4}[A-Z][A-Z\\\\d][Z][A-Z\\\\d]\",\n country: \"IN\",\n entityType: \"company\",\n lengths: [15],\n examples: [\"27AAPFU0939F1ZV\", \"29AAGCB7383J1Z4\"],\n description:\n \"15-character tax identifier for GST-registered businesses\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Goods_and_Services_Tax_Identification_Number\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default gstin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,WACJ;;AAGF,MAAM,oBAAoB,IAAI,IAAI;CAChC;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,OAAO;;;;;AAMb,MAAM,kBAAkB,UAA0B;CAChD,IAAI,MAAM;CACV,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;EAC1C,MAAM,KAAK,MAAM;AACjB,MAAI,OAAO,KAAA,EAAW;EACtB,IAAI,IAAI,UAAU,GAAG;AACrB,MAAI,QAAQ;AACV,QAAK;AACL,UAAO,KAAK,MAAM,IAAI,KAAK,GAAI,IAAI;QAEnC,QAAO;AAET,WAAS,CAAC;;AAEZ,QAAO,MAAM;;AAGf,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,aAAa;AAElC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,8BACD;AAEH,KAAI,CAAC,SAAS,KAAK,EAAE,CACnB,QAAO,IAAI,kBAAkB,0BAA0B;CAEzD,MAAM,YAAY,EAAE,MAAM,GAAG,EAAE;AAC/B,KAAI,CAAC,kBAAkB,IAAI,UAAU,CACnC,QAAO,IACL,qBACA,8BACD;AAEH,KAAI,EAAE,QAAQ,IACZ,QAAO,IACL,qBACA,kCACD;AAEH,KAAI,eAAe,EAAE,KAAK,EACxB,QAAO,IACL,oBACA,6BACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,QAAQ,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACvD,IAAI,MAAM;AACV,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,QAAO,OAAO,aAAa,KAAK,UAAU,GAAG,GAAG,CAAC;AACnD,SACE,aAAa,EAAE,GACf,OAAO,aAAa,KAAK,UAAU,GAAG,GAAG,CAAC;EAC5C,MAAM,SAAS,OAAO,UAAU,GAAG,EAAE,CAAC;EACtC,MAAM,UAAU,QAAQ,MAAM,SAAS;AACvC,OAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;GAC3B,MAAM,IAAI,UAAU,OAAO,EAAE;AAC7B,OAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;AAEhC,OAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK;GAC7B,MAAM,OAAO,UAAU,OAAO,aAAa,EAAE;AAC7C,OAAI,SAAS,KAAK,CAAC,MAAO,QAAO;;;;;AAMvC,MAAM,QAAmB;CACvB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,SAAS,aAAa;CAChC,kBACE;CACF,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,mBAAmB,kBAAkB;CAChD,aACE;CACF,WACE;CACF;CACA;CACA;CACA;CACD"}
package/dist/in/mod.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import aadhaar from "./aadhaar.js";
3
2
  import gstin from "./gstin.js";
4
3
  import pan from "./pan.js";
5
4
 
6
5
  //#region src/in/mod.d.ts
7
-
6
+ declare namespace mod_d_exports {
7
+ export { aadhaar, gstin, pan };
8
+ }
8
9
  //#endregion
9
10
  export { aadhaar, gstin, mod_d_exports, pan };
10
11
  //# sourceMappingURL=mod.d.ts.map
package/dist/in/pan.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { clean } from "../_util/clean.js";
2
- import { randomDigits, randomInt } from "../_util/generate.js";
2
+ import { randomChar, randomDigits, randomInt } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  //#region src/in/pan.ts
5
5
  /**
@@ -18,7 +18,7 @@ import { err } from "../_util/result.js";
18
18
  /** Generate a random valid Indian PAN. */
19
19
  const generate = () => {
20
20
  const randomLetter = () => String.fromCodePoint(65 + randomInt(0, 25));
21
- return `${randomLetter() + randomLetter() + randomLetter()}${HOLDER_TYPES[randomInt(0, HOLDER_TYPES.length - 1)]}${randomLetter()}${randomDigits(4)}${randomLetter()}`;
21
+ return `${randomLetter() + randomLetter() + randomLetter()}${randomChar(HOLDER_TYPES)}${randomLetter()}${randomDigits(4)}${randomLetter()}`;
22
22
  };
23
23
  const PAN_RE = /^[A-Z]{5}\d{4}[A-Z]$/;
24
24
  const HOLDER_TYPES = "ABCFGHJLPT";
@@ -1 +1 @@
1
- {"version":3,"file":"pan.js","names":[],"sources":["../../src/in/pan.ts"],"sourcesContent":["/** Generate a random valid Indian PAN. */\nconst generate = (): string => {\n const randomLetter = (): string =>\n String.fromCodePoint(65 + randomInt(0, 25));\n const first3 =\n randomLetter() + randomLetter() + randomLetter();\n const holderType =\n HOLDER_TYPES[randomInt(0, HOLDER_TYPES.length - 1)]!;\n const fifth = randomLetter();\n const digits = randomDigits(4);\n const last = randomLetter();\n return `${first3}${holderType}${fifth}${digits}${last}`;\n};\n\n/**\n * PAN (Permanent Account Number, Indian tax ID).\n *\n * 10 characters: 5 letters + 4 digits + 1 letter.\n * The 4th letter encodes the holder type\n * (P=person, C=company, H=HUF, A=AOP, B=BOI,\n * G=government, J=AJP, L=local authority, F=FOP,\n * T=trust). The 5th letter is the first letter\n * of the surname or entity name.\n * No checksum; format validation only.\n *\n * @see https://en.wikipedia.org/wiki/Permanent_account_number\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst PAN_RE = /^[A-Z]{5}\\d{4}[A-Z]$/;\n\nconst HOLDER_TYPES = \"ABCFGHJLPT\";\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 !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"PAN must be 10 characters\",\n );\n }\n if (!PAN_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"PAN must be 5 letters + 4 digits + 1 letter\",\n );\n }\n if (!HOLDER_TYPES.includes(v[3]!)) {\n return err(\n \"INVALID_COMPONENT\",\n \"PAN 4th character must be a valid holder type\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Indian Permanent Account Number. */\nconst pan: Validator = {\n name: \"Indian Permanent Account Number\",\n localName: \"Permanent Account Number\",\n abbreviation: \"PAN\",\n aliases: [\"PAN\", \"Permanent Account Number\"] as const,\n candidatePattern: \"[A-Z]{5}\\\\d{4}[A-Z]\",\n country: \"IN\",\n entityType: \"any\",\n lengths: [10],\n examples: [\"ABCPP1234C\", \"AAACR5055K\"],\n description: \"10-character alphanumeric tax identifier\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Permanent_account_number\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default pan;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;AACA,MAAM,iBAAyB;CAC7B,MAAM,qBACJ,OAAO,cAAc,KAAK,UAAU,GAAG,GAAG,CAAC;AAQ7C,QAAO,GANL,cAAc,GAAG,cAAc,GAAG,cAAc,GAEhD,aAAa,UAAU,GAAG,aAAa,SAAS,EAAE,IACtC,cAAc,GACb,aAAa,EAAE,GACjB,cAAc;;AAwB7B,MAAM,SAAS;AAEf,MAAM,eAAe;AAErB,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,aAAa;AAElC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,4BACD;AAEH,KAAI,CAAC,OAAO,KAAK,EAAE,CACjB,QAAO,IACL,kBACA,8CACD;AAEH,KAAI,CAAC,aAAa,SAAS,EAAE,GAAI,CAC/B,QAAO,IACL,qBACA,gDACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,2BAA2B;CAC5C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,cAAc,aAAa;CACtC,aAAa;CACb,WACE;CACF;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"pan.js","names":[],"sources":["../../src/in/pan.ts"],"sourcesContent":["/** Generate a random valid Indian PAN. */\nconst generate = (): string => {\n const randomLetter = (): string =>\n String.fromCodePoint(65 + randomInt(0, 25));\n const first3 =\n randomLetter() + randomLetter() + randomLetter();\n const holderType = randomChar(HOLDER_TYPES);\n const fifth = randomLetter();\n const digits = randomDigits(4);\n const last = randomLetter();\n return `${first3}${holderType}${fifth}${digits}${last}`;\n};\n\n/**\n * PAN (Permanent Account Number, Indian tax ID).\n *\n * 10 characters: 5 letters + 4 digits + 1 letter.\n * The 4th letter encodes the holder type\n * (P=person, C=company, H=HUF, A=AOP, B=BOI,\n * G=government, J=AJP, L=local authority, F=FOP,\n * T=trust). The 5th letter is the first letter\n * of the surname or entity name.\n * No checksum; format validation only.\n *\n * @see https://en.wikipedia.org/wiki/Permanent_account_number\n */\n\nimport { clean } from \"#util/clean\";\nimport {\n randomChar,\n randomDigits,\n randomInt,\n} from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst PAN_RE = /^[A-Z]{5}\\d{4}[A-Z]$/;\n\nconst HOLDER_TYPES = \"ABCFGHJLPT\";\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 !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"PAN must be 10 characters\",\n );\n }\n if (!PAN_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"PAN must be 5 letters + 4 digits + 1 letter\",\n );\n }\n // SAFETY: regex above guarantees v.length === 10.\n // eslint-disable-next-line no-non-null-assertion\n if (!HOLDER_TYPES.includes(v[3]!)) {\n return err(\n \"INVALID_COMPONENT\",\n \"PAN 4th character must be a valid holder type\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Indian Permanent Account Number. */\nconst pan: Validator = {\n name: \"Indian Permanent Account Number\",\n localName: \"Permanent Account Number\",\n abbreviation: \"PAN\",\n aliases: [\"PAN\", \"Permanent Account Number\"] as const,\n candidatePattern: \"[A-Z]{5}\\\\d{4}[A-Z]\",\n country: \"IN\",\n entityType: \"any\",\n lengths: [10],\n examples: [\"ABCPP1234C\", \"AAACR5055K\"],\n description: \"10-character alphanumeric tax identifier\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/Permanent_account_number\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default pan;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;AACA,MAAM,iBAAyB;CAC7B,MAAM,qBACJ,OAAO,cAAc,KAAK,UAAU,GAAG,GAAG,CAAC;AAO7C,QAAO,GALL,cAAc,GAAG,cAAc,GAAG,cAAc,GAC/B,WAAW,aAAa,GAC7B,cAAc,GACb,aAAa,EAAE,GACjB,cAAc;;AA4B7B,MAAM,SAAS;AAEf,MAAM,eAAe;AAErB,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,aAAa;AAElC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,4BACD;AAEH,KAAI,CAAC,OAAO,KAAK,EAAE,CACjB,QAAO,IACL,kBACA,8CACD;AAIH,KAAI,CAAC,aAAa,SAAS,EAAE,GAAI,CAC/B,QAAO,IACL,qBACA,gDACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,2BAA2B;CAC5C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,cAAc,aAAa;CACtC,aAAa;CACb,WACE;CACF;CACA;CACA;CACA;CACD"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { CountryCode, ErrorCode, ParsedPersonId, StdnumError, ValidateResult, Validator } from "./types.js";
1
+ import { CountryCode, ErrorCode, ParsableValidator, ParsedBirthDate, ParsedIdentifier, ParsedPersonId, StdnumError, ValidateResult, Validator } from "./types.js";
2
2
  import { mod_d_exports } from "./ad/mod.js";
3
3
  import { mod_d_exports as mod_d_exports$1 } from "./ae/mod.js";
4
4
  import { mod_d_exports as mod_d_exports$2 } from "./ai/mod.js";
@@ -102,4 +102,4 @@ import { mod_d_exports as mod_d_exports$93 } from "./uy/mod.js";
102
102
  import { mod_d_exports as mod_d_exports$94 } from "./ve/mod.js";
103
103
  import { mod_d_exports as mod_d_exports$95 } from "./vn/mod.js";
104
104
  import { mod_d_exports as mod_d_exports$96 } from "./za/mod.js";
105
- export { type CardNetwork, type CountryCode, type ErrorCode, type ParsedPersonId, type StdnumError, type ValidateResult, type Validator, mod_d_exports as ad, mod_d_exports$1 as ae, mod_d_exports$2 as ai, mod_d_exports$3 as al, mod_d_exports$4 as am, mod_d_exports$5 as ar, mod_d_exports$6 as at, mod_d_exports$7 as au, mod_d_exports$8 as az, mod_d_exports$9 as ba, mod_d_exports$10 as bd, mod_d_exports$11 as be, mod_d_exports$12 as bg, mod_d_exports$13 as bh, bic, mod_d_exports$14 as br, mod_d_exports$15 as by, mod_d_exports$16 as bz, mod_d_exports$17 as ca, mod_d_exports$18 as ch, mod_d_exports$19 as cl, mod_d_exports$20 as cn, mod_d_exports$21 as co, mod_d_exports$22 as cr, creditCard as creditcard, mod_d_exports$23 as cu, mod_d_exports$24 as cy, mod_d_exports$25 as cz, mod_d_exports$26 as de, detectNetwork, mod_d_exports$27 as dk, mod_d_exports$28 as do_, mod_d_exports$29 as ec, mod_d_exports$30 as ee, mod_d_exports$31 as eg, mod_d_exports$32 as es, mod_d_exports$33 as eu, mod_d_exports$34 as fi, mod_d_exports$35 as fr, mod_d_exports$36 as gb, mod_d_exports$37 as ge, mod_d_exports$38 as gh, mod_d_exports$39 as gr, mod_d_exports$40 as gt, mod_d_exports$41 as hk, mod_d_exports$42 as hr, mod_d_exports$43 as hu, iban, mod_d_exports$44 as id, mod_d_exports$45 as ie, mod_d_exports$46 as il, mod_d_exports$47 as in_, mod_d_exports$48 as iq, mod_d_exports$49 as ir, mod_d_exports$50 as is_, isin, mod_d_exports$51 as it, mod_d_exports$52 as jp, mod_d_exports$53 as kr, mod_d_exports$54 as kw, mod_d_exports$55 as kz, lei, mod_d_exports$56 as li, mod_d_exports$57 as lk, mod_d_exports$58 as lt, mod_d_exports$59 as lu, luhn, mod_d_exports$60 as lv, mod_d_exports$61 as ma, mod_d_exports$62 as mc, mod_d_exports$63 as md, mod_d_exports$64 as me, mod_d_exports$65 as mk, mod_d_exports$66 as mt, mod_d_exports$67 as mu, mod_d_exports$68 as mx, mod_d_exports$69 as my, mod_d_exports$70 as ng, mod_d_exports$71 as ni, mod_d_exports$72 as nl, mod_d_exports$73 as no, mod_d_exports$74 as nz, mod_d_exports$75 as pa, mod_d_exports$76 as pe, mod_d_exports$77 as ph, mod_d_exports$78 as pk, mod_d_exports$79 as pl, mod_d_exports$80 as pt, mod_d_exports$81 as ro, mod_d_exports$82 as rs, mod_d_exports$83 as ru, mod_d_exports$84 as se, mod_d_exports$85 as sg, mod_d_exports$86 as si, mod_d_exports$87 as sk, mod_d_exports$88 as th, mod_d_exports$89 as tr, mod_d_exports$90 as tw, mod_d_exports$91 as ua, mod_d_exports$92 as us, mod_d_exports$93 as uy, mod_d_exports$94 as ve, mod_d_exports$95 as vn, mod_d_exports$96 as za };
105
+ export { type CardNetwork, type CountryCode, type ErrorCode, type ParsableValidator, type ParsedBirthDate, type ParsedIdentifier, type ParsedPersonId, type StdnumError, type ValidateResult, type Validator, mod_d_exports as ad, mod_d_exports$1 as ae, mod_d_exports$2 as ai, mod_d_exports$3 as al, mod_d_exports$4 as am, mod_d_exports$5 as ar, mod_d_exports$6 as at, mod_d_exports$7 as au, mod_d_exports$8 as az, mod_d_exports$9 as ba, mod_d_exports$10 as bd, mod_d_exports$11 as be, mod_d_exports$12 as bg, mod_d_exports$13 as bh, bic, mod_d_exports$14 as br, mod_d_exports$15 as by, mod_d_exports$16 as bz, mod_d_exports$17 as ca, mod_d_exports$18 as ch, mod_d_exports$19 as cl, mod_d_exports$20 as cn, mod_d_exports$21 as co, mod_d_exports$22 as cr, creditCard as creditcard, mod_d_exports$23 as cu, mod_d_exports$24 as cy, mod_d_exports$25 as cz, mod_d_exports$26 as de, detectNetwork, mod_d_exports$27 as dk, mod_d_exports$28 as do_, mod_d_exports$29 as ec, mod_d_exports$30 as ee, mod_d_exports$31 as eg, mod_d_exports$32 as es, mod_d_exports$33 as eu, mod_d_exports$34 as fi, mod_d_exports$35 as fr, mod_d_exports$36 as gb, mod_d_exports$37 as ge, mod_d_exports$38 as gh, mod_d_exports$39 as gr, mod_d_exports$40 as gt, mod_d_exports$41 as hk, mod_d_exports$42 as hr, mod_d_exports$43 as hu, iban, mod_d_exports$44 as id, mod_d_exports$45 as ie, mod_d_exports$46 as il, mod_d_exports$47 as in_, mod_d_exports$48 as iq, mod_d_exports$49 as ir, mod_d_exports$50 as is_, isin, mod_d_exports$51 as it, mod_d_exports$52 as jp, mod_d_exports$53 as kr, mod_d_exports$54 as kw, mod_d_exports$55 as kz, lei, mod_d_exports$56 as li, mod_d_exports$57 as lk, mod_d_exports$58 as lt, mod_d_exports$59 as lu, luhn, mod_d_exports$60 as lv, mod_d_exports$61 as ma, mod_d_exports$62 as mc, mod_d_exports$63 as md, mod_d_exports$64 as me, mod_d_exports$65 as mk, mod_d_exports$66 as mt, mod_d_exports$67 as mu, mod_d_exports$68 as mx, mod_d_exports$69 as my, mod_d_exports$70 as ng, mod_d_exports$71 as ni, mod_d_exports$72 as nl, mod_d_exports$73 as no, mod_d_exports$74 as nz, mod_d_exports$75 as pa, mod_d_exports$76 as pe, mod_d_exports$77 as ph, mod_d_exports$78 as pk, mod_d_exports$79 as pl, mod_d_exports$80 as pt, mod_d_exports$81 as ro, mod_d_exports$82 as rs, mod_d_exports$83 as ru, mod_d_exports$84 as se, mod_d_exports$85 as sg, mod_d_exports$86 as si, mod_d_exports$87 as sk, mod_d_exports$88 as th, mod_d_exports$89 as tr, mod_d_exports$90 as tw, mod_d_exports$91 as ua, mod_d_exports$92 as us, mod_d_exports$93 as uy, mod_d_exports$94 as ve, mod_d_exports$95 as vn, mod_d_exports$96 as za };
package/dist/iq/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import nid from "./nid.js";
3
2
 
4
3
  //#region src/iq/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { nid };
6
+ }
6
7
  //#endregion
7
8
  export { mod_d_exports, nid };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/ir/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import nid from "./nid.js";
3
2
 
4
3
  //#region src/ir/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { nid };
6
+ }
6
7
  //#endregion
7
8
  export { mod_d_exports, nid };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/ir/nid.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/ir/nid.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  /** Iranian NIDs are displayed without separators. */
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/is/kennitala.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/is/mod.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import kennitala from "./kennitala.js";
3
2
  import vsk from "./vsk.js";
4
3
 
5
4
  //#region src/is/mod.d.ts
6
-
5
+ declare namespace mod_d_exports {
6
+ export { kennitala, vsk };
7
+ }
7
8
  //#endregion
8
9
  export { kennitala, mod_d_exports, vsk };
9
10
  //# sourceMappingURL=mod.d.ts.map
package/dist/isin.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "./types.js";
2
2
 
3
3
  //#region src/isin.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/isin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { clean } from "./_util/clean.js";
2
- import { randomInt } from "./_util/generate.js";
2
+ import { randomInt, randomPick } from "./_util/generate.js";
3
3
  import { err } from "./_util/result.js";
4
4
  import { luhnChecksum } from "./_checksums/luhn.js";
5
5
  import { charValue, isalnum } from "./_util/strings.js";
@@ -44,17 +44,17 @@ const format = (value) => {
44
44
  const v = compact(value);
45
45
  return `${v.slice(0, 2)} ${v.slice(2, 6)} ${v.slice(6, 10)} ${v.slice(10)}`;
46
46
  };
47
+ const ISIN_COUNTRIES = [
48
+ "US",
49
+ "GB",
50
+ "DE",
51
+ "FR",
52
+ "JP"
53
+ ];
47
54
  /** Generate a random valid ISIN. */
48
55
  const generate = () => {
49
- const countries = [
50
- "US",
51
- "GB",
52
- "DE",
53
- "FR",
54
- "JP"
55
- ];
56
56
  for (;;) {
57
- const cc = countries[randomInt(0, countries.length - 1)];
57
+ const cc = randomPick(ISIN_COUNTRIES);
58
58
  let nsin = "";
59
59
  for (let i = 0; i < 9; i++) nsin += String(randomInt(0, 9));
60
60
  const base = cc + nsin;
package/dist/isin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"isin.js","names":[],"sources":["../src/isin.ts"],"sourcesContent":["/**\n * ISIN (International Securities Identification\n * Number).\n *\n * ISO 6166. 12-character alphanumeric code:\n * [A-Z]{2} (country) + [0-9A-Z]{9} (identifier) +\n * [0-9]{1} (check digit). Validated using the Luhn\n * algorithm on the alpha-numeric expansion.\n *\n * @see https://www.isin.org/\n */\n\nimport { luhnChecksum } from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { charValue, isalnum } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"./types\";\n\nconst ISIN_RE = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\n/**\n * Expand each character to its numeric value\n * (A=10..Z=35, digits unchanged) and concatenate.\n */\nconst expand = (value: string): string => {\n let result = \"\";\n for (let i = 0; i < value.length; i++) {\n const ch = value[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 !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"ISIN must be exactly 12 characters\",\n );\n }\n if (!isalnum(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"ISIN must contain only letters and digits\",\n );\n }\n if (!ISIN_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"ISIN must match [A-Z]{2}[0-9A-Z]{9}[0-9]\",\n );\n }\n const expanded = expand(v);\n if (luhnChecksum(expanded) !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"ISIN check digit is incorrect\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)} ${v.slice(2, 6)} ${v.slice(6, 10)} ${v.slice(10)}`;\n};\n\n/** Generate a random valid ISIN. */\nconst generate = (): string => {\n const countries = [\"US\", \"GB\", \"DE\", \"FR\", \"JP\"];\n for (;;) {\n const cc =\n countries[randomInt(0, countries.length - 1)]!;\n let nsin = \"\";\n for (let i = 0; i < 9; i++)\n nsin += String(randomInt(0, 9));\n const base = cc + nsin;\n for (let d = 0; d <= 9; d++) {\n const c = base + String(d);\n if (validate(c).valid) return c;\n }\n }\n};\n\n/** International Securities Identification Number. */\nconst isin: Validator = {\n name: \"International Securities Identification Number\",\n localName:\n \"International Securities Identification Number\",\n abbreviation: \"ISIN\",\n aliases: [\n \"ISIN\",\n \"International Securities Identification Number\",\n ] as const,\n candidatePattern: \"[A-Z]{2}[A-Z0-9]{9}\\\\d\",\n entityType: \"any\",\n sourceUrl: \"https://www.isin.org/\",\n examples: [\"US0378331005\", \"GB0002634946\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default isin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,MAAM,UAAU;AAEhB,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,aAAa;;;;;AAMlC,MAAM,UAAU,UAA0B;CACxC,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,MAAM,KAAK,MAAM;AACjB,MAAI,OAAO,KAAA,EACT,WAAU,OAAO,UAAU,GAAG,CAAC;;AAGnC,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,qCACD;AAEH,KAAI,CAAC,QAAQ,EAAE,CACb,QAAO,IACL,kBACA,4CACD;AAEH,KAAI,CAAC,QAAQ,KAAK,EAAE,CAClB,QAAO,IACL,kBACA,2CACD;AAGH,KAAI,aADa,OAAO,EAAE,CACA,KAAK,EAC7B,QAAO,IACL,oBACA,gCACD;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,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG;;;AAI3E,MAAM,iBAAyB;CAC7B,MAAM,YAAY;EAAC;EAAM;EAAM;EAAM;EAAM;EAAK;AAChD,UAAS;EACP,MAAM,KACJ,UAAU,UAAU,GAAG,UAAU,SAAS,EAAE;EAC9C,IAAI,OAAO;AACX,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,SAAQ,OAAO,UAAU,GAAG,EAAE,CAAC;EACjC,MAAM,OAAO,KAAK;AAClB,OAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;GAC3B,MAAM,IAAI,OAAO,OAAO,EAAE;AAC1B,OAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;;AAMpC,MAAM,OAAkB;CACtB,MAAM;CACN,WACE;CACF,cAAc;CACd,SAAS,CACP,QACA,iDACD;CACD,kBAAkB;CAClB,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,gBAAgB,eAAe;CAC1C;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"isin.js","names":[],"sources":["../src/isin.ts"],"sourcesContent":["/**\n * ISIN (International Securities Identification\n * Number).\n *\n * ISO 6166. 12-character alphanumeric code:\n * [A-Z]{2} (country) + [0-9A-Z]{9} (identifier) +\n * [0-9]{1} (check digit). Validated using the Luhn\n * algorithm on the alpha-numeric expansion.\n *\n * @see https://www.isin.org/\n */\n\nimport { luhnChecksum } from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { randomInt, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { charValue, isalnum } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"./types\";\n\nconst ISIN_RE = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\n/**\n * Expand each character to its numeric value\n * (A=10..Z=35, digits unchanged) and concatenate.\n */\nconst expand = (value: string): string => {\n let result = \"\";\n for (let i = 0; i < value.length; i++) {\n const ch = value[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 !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"ISIN must be exactly 12 characters\",\n );\n }\n if (!isalnum(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"ISIN must contain only letters and digits\",\n );\n }\n if (!ISIN_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"ISIN must match [A-Z]{2}[0-9A-Z]{9}[0-9]\",\n );\n }\n const expanded = expand(v);\n if (luhnChecksum(expanded) !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"ISIN check digit is incorrect\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, 2)} ${v.slice(2, 6)} ${v.slice(6, 10)} ${v.slice(10)}`;\n};\n\nconst ISIN_COUNTRIES = [\n \"US\",\n \"GB\",\n \"DE\",\n \"FR\",\n \"JP\",\n] as const;\n\n/** Generate a random valid ISIN. */\nconst generate = (): string => {\n for (;;) {\n const cc = randomPick(ISIN_COUNTRIES);\n let nsin = \"\";\n for (let i = 0; i < 9; i++)\n nsin += String(randomInt(0, 9));\n const base = cc + nsin;\n for (let d = 0; d <= 9; d++) {\n const c = base + String(d);\n if (validate(c).valid) return c;\n }\n }\n};\n\n/** International Securities Identification Number. */\nconst isin: Validator = {\n name: \"International Securities Identification Number\",\n localName:\n \"International Securities Identification Number\",\n abbreviation: \"ISIN\",\n aliases: [\n \"ISIN\",\n \"International Securities Identification Number\",\n ] as const,\n candidatePattern: \"[A-Z]{2}[A-Z0-9]{9}\\\\d\",\n entityType: \"any\",\n sourceUrl: \"https://www.isin.org/\",\n examples: [\"US0378331005\", \"GB0002634946\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default isin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,MAAM,UAAU;AAEhB,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,aAAa;;;;;AAMlC,MAAM,UAAU,UAA0B;CACxC,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,MAAM,KAAK,MAAM;AACjB,MAAI,OAAO,KAAA,EACT,WAAU,OAAO,UAAU,GAAG,CAAC;;AAGnC,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,qCACD;AAEH,KAAI,CAAC,QAAQ,EAAE,CACb,QAAO,IACL,kBACA,4CACD;AAEH,KAAI,CAAC,QAAQ,KAAK,EAAE,CAClB,QAAO,IACL,kBACA,2CACD;AAGH,KAAI,aADa,OAAO,EAAE,CACA,KAAK,EAC7B,QAAO,IACL,oBACA,gCACD;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,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG;;AAG3E,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;CACD;;AAGD,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,KAAK,WAAW,eAAe;EACrC,IAAI,OAAO;AACX,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,SAAQ,OAAO,UAAU,GAAG,EAAE,CAAC;EACjC,MAAM,OAAO,KAAK;AAClB,OAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;GAC3B,MAAM,IAAI,OAAO,OAAO,EAAE;AAC1B,OAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;;AAMpC,MAAM,OAAkB;CACtB,MAAM;CACN,WACE;CACF,cAAc;CACd,SAAS,CACP,QACA,iDACD;CACD,kBAAkB;CAClB,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,gBAAgB,eAAe;CAC1C;CACA;CACA;CACA;CACD"}
@@ -1,7 +1,6 @@
1
1
  import { ParsedPersonId, ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/it/codicefiscale.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
@@ -11,8 +10,10 @@ declare const format: (value: string) => string;
11
10
  * 11-digit Partita IVA (no personal data embedded).
12
11
  */
13
12
  declare const parse: (value: string) => ParsedPersonId | null;
13
+ /** Generate a random valid 16-character Codice Fiscale. */
14
+ declare const generate: () => string;
14
15
  /** Italian Tax Code. */
15
- declare const codiceFiscale: Validator;
16
+ declare const codiceFiscale: Validator<ParsedPersonId>;
16
17
  //#endregion
17
- export { compact, codiceFiscale as default, format, parse, validate };
18
+ export { compact, codiceFiscale as default, format, generate, parse, validate };
18
19
  //# sourceMappingURL=codicefiscale.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import { clean } from "../_util/clean.js";
2
+ import { randomInt } from "../_util/generate.js";
2
3
  import { err } from "../_util/result.js";
3
4
  import { isdigits } from "../_util/strings.js";
4
5
  import { validate as validate$1 } from "./iva.js";
@@ -185,6 +186,27 @@ const parse = (value) => {
185
186
  gender
186
187
  };
187
188
  };
189
+ const LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
190
+ const MONTH_CODES = Object.keys(MONTH_LETTERS);
191
+ const randomLetter = () => LETTERS.charAt(randomInt(0, 25));
192
+ /** Generate a random valid 16-character Codice Fiscale. */
193
+ const generate = () => {
194
+ let body = "";
195
+ for (let i = 0; i < 6; i++) body += randomLetter();
196
+ body += String(randomInt(0, 99)).padStart(2, "0");
197
+ body += MONTH_CODES[randomInt(0, MONTH_CODES.length - 1)] ?? "A";
198
+ const day = randomInt(1, 28) + (randomInt(0, 1) === 0 ? 0 : 40);
199
+ body += String(day).padStart(2, "0");
200
+ body += randomLetter();
201
+ body += String(randomInt(0, 999)).padStart(3, "0");
202
+ let sum = 0;
203
+ for (let i = 0; i < body.length; i++) {
204
+ const ch = body[i];
205
+ if (ch === void 0) continue;
206
+ sum += i % 2 === 0 ? ODD[ch] ?? 0 : EVEN[ch] ?? 0;
207
+ }
208
+ return `${body}${CHECK_LETTERS.charAt(sum % 26)}`;
209
+ };
188
210
  /** Italian Tax Code. */
189
211
  const codiceFiscale = {
190
212
  name: "Italian Tax Code",
@@ -206,9 +228,11 @@ const codiceFiscale = {
206
228
  examples: ["RCCMNL83S18D969H"],
207
229
  compact,
208
230
  format,
209
- validate
231
+ parse,
232
+ validate,
233
+ generate
210
234
  };
211
235
  //#endregion
212
- export { compact, codiceFiscale as default, format, parse, validate };
236
+ export { compact, codiceFiscale as default, format, generate, parse, validate };
213
237
 
214
238
  //# sourceMappingURL=codicefiscale.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codicefiscale.js","names":["validateIva"],"sources":["../../src/it/codicefiscale.ts"],"sourcesContent":["/**\n * Codice Fiscale (Italian tax code).\n *\n * 16-character alphanumeric code encoding name,\n * birth date, gender, and birthplace. The last\n * character is a check letter computed using\n * odd/even position value tables.\n *\n * Supports omocodia: when two people share the\n * same code, the tax office replaces digit\n * positions with letters from the set LMNPQRSTUV\n * (L=0, M=1, N=2, P=3, Q=4, R=5, S=6, T=7,\n * U=8, V=9). Only these 10 letters are valid\n * substitutes at digit positions.\n *\n * Also accepts 11-digit numbers (delegates to\n * Partita IVA validation).\n *\n * @see https://www.agenziaentrate.gov.it/\n * @see https://it.wikipedia.org/wiki/Codice_fiscale#Omocodia\n */\n\nimport { clean } from \"#util/clean\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n Validator,\n} from \"../types\";\nimport { validate as validateIva } from \"./iva\";\n\n// Values for odd-positioned characters (0-based\n// index 0, 2, 4, ...)\nconst ODD: Record<string, number> = {\n \"0\": 1,\n \"1\": 0,\n \"2\": 5,\n \"3\": 7,\n \"4\": 9,\n \"5\": 13,\n \"6\": 15,\n \"7\": 17,\n \"8\": 19,\n \"9\": 21,\n A: 1,\n B: 0,\n C: 5,\n D: 7,\n E: 9,\n F: 13,\n G: 15,\n H: 17,\n I: 19,\n J: 21,\n K: 2,\n L: 4,\n M: 18,\n N: 20,\n O: 11,\n P: 3,\n Q: 6,\n R: 8,\n S: 12,\n T: 14,\n U: 16,\n V: 10,\n W: 22,\n X: 25,\n Y: 24,\n Z: 23,\n};\n\n// Values for even-positioned characters (0-based\n// index 1, 3, 5, ...)\nconst EVEN: Record<string, number> = {\n \"0\": 0,\n \"1\": 1,\n \"2\": 2,\n \"3\": 3,\n \"4\": 4,\n \"5\": 5,\n \"6\": 6,\n \"7\": 7,\n \"8\": 8,\n \"9\": 9,\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n E: 4,\n F: 5,\n G: 6,\n H: 7,\n I: 8,\n J: 9,\n K: 10,\n L: 11,\n M: 12,\n N: 13,\n O: 14,\n P: 15,\n Q: 16,\n R: 17,\n S: 18,\n T: 19,\n U: 20,\n V: 21,\n W: 22,\n X: 23,\n Y: 24,\n Z: 25,\n};\n\nconst CHECK_LETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\n/** Omocodia letter-to-digit mapping. */\nconst OMOCODIA: Record<string, string> = {\n L: \"0\",\n M: \"1\",\n N: \"2\",\n P: \"3\",\n Q: \"4\",\n R: \"5\",\n S: \"6\",\n T: \"7\",\n U: \"8\",\n V: \"9\",\n};\n\n/** Month letter to 1-based month number. */\nconst MONTH_LETTERS: Record<string, number> = {\n A: 1,\n B: 2,\n C: 3,\n D: 4,\n E: 5,\n H: 6,\n L: 7,\n M: 8,\n P: 9,\n R: 10,\n S: 11,\n T: 12,\n};\n\nconst decodeCfDigit = (ch: string): number => {\n const mapped = OMOCODIA[ch];\n if (mapped !== undefined) return Number(mapped);\n return Number(ch);\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n // 11-digit: delegate to Partita IVA\n if (v.length === 11 && isdigits(v)) {\n return validateIva(v);\n }\n\n if (v.length !== 16) {\n return err(\n \"INVALID_LENGTH\",\n \"Codice Fiscale must be 16 characters\",\n );\n }\n // Structural format: 6 letters + 2 alphanumeric\n // + 1 letter (month) + 2 alphanumeric + 1 letter\n // (municipality) + 3 alphanumeric + 1 check letter\n // The \"alphanumeric\" positions accept omocodia\n // substitution letters (LMNPQRSTUV for 0-9)\n if (\n // Omocodia: digits can be replaced with\n // LMNPQRSTUV only (not arbitrary letters)\n !/^[A-Z]{6}[0-9LMNPQRSTUV]{2}[ABCDEHLMPRST][0-9LMNPQRSTUV]{2}[A-Z][0-9LMNPQRSTUV]{3}[A-Z]$/.test(\n v,\n )\n ) {\n return err(\n \"INVALID_FORMAT\",\n \"Codice Fiscale format is invalid\",\n );\n }\n\n // Compute check letter\n let sum = 0;\n for (let i = 0; i < 15; i++) {\n const ch = v[i];\n if (ch === undefined) continue;\n if (i % 2 === 0) {\n // Odd position (1-based) = even index\n const val = ODD[ch];\n if (val === undefined) {\n return err(\n \"INVALID_FORMAT\",\n \"Codice Fiscale contains invalid char\",\n );\n }\n sum += val;\n } else {\n const val = EVEN[ch];\n if (val === undefined) {\n return err(\n \"INVALID_FORMAT\",\n \"Codice Fiscale contains invalid char\",\n );\n }\n sum += val;\n }\n }\n\n const expected = CHECK_LETTERS[sum % 26];\n if (expected !== v[15]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Codice Fiscale check letter mismatch\",\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 Codice Fiscale.\n * Returns null if the value is not valid or is an\n * 11-digit Partita IVA (no personal data embedded).\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 if (v.length !== 16) return null;\n\n const yy =\n decodeCfDigit(v.charAt(6)) * 10 +\n decodeCfDigit(v.charAt(7));\n const month = MONTH_LETTERS[v.charAt(8)];\n if (month === undefined) return null;\n let dd =\n decodeCfDigit(v.charAt(9)) * 10 +\n decodeCfDigit(v.charAt(10));\n\n const gender = dd > 40 ? \"female\" : \"male\";\n if (dd > 40) dd -= 40;\n\n const currentYear = new Date().getFullYear();\n let year = 2000 + yy;\n if (year > currentYear) year -= 100;\n\n return {\n birthDate: new Date(year, month - 1, dd),\n gender,\n };\n};\n\n/** Italian Tax Code. */\nconst codiceFiscale: Validator = {\n name: \"Italian Tax Code\",\n localName: \"Codice Fiscale\",\n abbreviation: \"CF\",\n aliases: [\n \"codice fiscale\",\n \"C.F.\",\n \"CF\",\n \"cod. fisc.\",\n \"fiscal code\",\n ] as const,\n candidatePattern:\n \"[A-Z]{6}\\\\d{2}[A-Z]\\\\d{2}[A-Z]\\\\d{3}[A-Z]\",\n country: \"IT\",\n entityType: \"person\",\n description:\n \"Personal/company tax code (16-char personal, 11-digit company)\",\n sourceUrl: \"https://www.agenziaentrate.gov.it/\",\n lengths: [11, 16] as const,\n examples: [\"RCCMNL83S18D969H\"] as const,\n compact,\n format,\n validate,\n};\n\nexport default codiceFiscale;\nexport { compact, format, parse, validate };\n"],"mappings":"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"}
1
+ {"version":3,"file":"codicefiscale.js","names":["validateIva"],"sources":["../../src/it/codicefiscale.ts"],"sourcesContent":["/**\n * Codice Fiscale (Italian tax code).\n *\n * 16-character alphanumeric code encoding name,\n * birth date, gender, and birthplace. The last\n * character is a check letter computed using\n * odd/even position value tables.\n *\n * Supports omocodia: when two people share the\n * same code, the tax office replaces digit\n * positions with letters from the set LMNPQRSTUV\n * (L=0, M=1, N=2, P=3, Q=4, R=5, S=6, T=7,\n * U=8, V=9). Only these 10 letters are valid\n * substitutes at digit positions.\n *\n * Also accepts 11-digit numbers (delegates to\n * Partita IVA validation).\n *\n * @see https://www.agenziaentrate.gov.it/\n * @see https://it.wikipedia.org/wiki/Codice_fiscale#Omocodia\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type {\n ParsedPersonId,\n ValidateResult,\n Validator,\n} from \"../types\";\nimport { validate as validateIva } from \"./iva\";\n\n// Values for odd-positioned characters (0-based\n// index 0, 2, 4, ...)\nconst ODD: Record<string, number> = {\n \"0\": 1,\n \"1\": 0,\n \"2\": 5,\n \"3\": 7,\n \"4\": 9,\n \"5\": 13,\n \"6\": 15,\n \"7\": 17,\n \"8\": 19,\n \"9\": 21,\n A: 1,\n B: 0,\n C: 5,\n D: 7,\n E: 9,\n F: 13,\n G: 15,\n H: 17,\n I: 19,\n J: 21,\n K: 2,\n L: 4,\n M: 18,\n N: 20,\n O: 11,\n P: 3,\n Q: 6,\n R: 8,\n S: 12,\n T: 14,\n U: 16,\n V: 10,\n W: 22,\n X: 25,\n Y: 24,\n Z: 23,\n};\n\n// Values for even-positioned characters (0-based\n// index 1, 3, 5, ...)\nconst EVEN: Record<string, number> = {\n \"0\": 0,\n \"1\": 1,\n \"2\": 2,\n \"3\": 3,\n \"4\": 4,\n \"5\": 5,\n \"6\": 6,\n \"7\": 7,\n \"8\": 8,\n \"9\": 9,\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n E: 4,\n F: 5,\n G: 6,\n H: 7,\n I: 8,\n J: 9,\n K: 10,\n L: 11,\n M: 12,\n N: 13,\n O: 14,\n P: 15,\n Q: 16,\n R: 17,\n S: 18,\n T: 19,\n U: 20,\n V: 21,\n W: 22,\n X: 23,\n Y: 24,\n Z: 25,\n};\n\nconst CHECK_LETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\n/** Omocodia letter-to-digit mapping. */\nconst OMOCODIA: Record<string, string> = {\n L: \"0\",\n M: \"1\",\n N: \"2\",\n P: \"3\",\n Q: \"4\",\n R: \"5\",\n S: \"6\",\n T: \"7\",\n U: \"8\",\n V: \"9\",\n};\n\n/** Month letter to 1-based month number. */\nconst MONTH_LETTERS: Record<string, number> = {\n A: 1,\n B: 2,\n C: 3,\n D: 4,\n E: 5,\n H: 6,\n L: 7,\n M: 8,\n P: 9,\n R: 10,\n S: 11,\n T: 12,\n};\n\nconst decodeCfDigit = (ch: string): number => {\n const mapped = OMOCODIA[ch];\n if (mapped !== undefined) return Number(mapped);\n return Number(ch);\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\").toUpperCase();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n // 11-digit: delegate to Partita IVA\n if (v.length === 11 && isdigits(v)) {\n return validateIva(v);\n }\n\n if (v.length !== 16) {\n return err(\n \"INVALID_LENGTH\",\n \"Codice Fiscale must be 16 characters\",\n );\n }\n // Structural format: 6 letters + 2 alphanumeric\n // + 1 letter (month) + 2 alphanumeric + 1 letter\n // (municipality) + 3 alphanumeric + 1 check letter\n // The \"alphanumeric\" positions accept omocodia\n // substitution letters (LMNPQRSTUV for 0-9)\n if (\n // Omocodia: digits can be replaced with\n // LMNPQRSTUV only (not arbitrary letters)\n !/^[A-Z]{6}[0-9LMNPQRSTUV]{2}[ABCDEHLMPRST][0-9LMNPQRSTUV]{2}[A-Z][0-9LMNPQRSTUV]{3}[A-Z]$/.test(\n v,\n )\n ) {\n return err(\n \"INVALID_FORMAT\",\n \"Codice Fiscale format is invalid\",\n );\n }\n\n // Compute check letter\n let sum = 0;\n for (let i = 0; i < 15; i++) {\n const ch = v[i];\n if (ch === undefined) continue;\n if (i % 2 === 0) {\n // Odd position (1-based) = even index\n const val = ODD[ch];\n if (val === undefined) {\n return err(\n \"INVALID_FORMAT\",\n \"Codice Fiscale contains invalid char\",\n );\n }\n sum += val;\n } else {\n const val = EVEN[ch];\n if (val === undefined) {\n return err(\n \"INVALID_FORMAT\",\n \"Codice Fiscale contains invalid char\",\n );\n }\n sum += val;\n }\n }\n\n const expected = CHECK_LETTERS[sum % 26];\n if (expected !== v[15]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Codice Fiscale check letter mismatch\",\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 Codice Fiscale.\n * Returns null if the value is not valid or is an\n * 11-digit Partita IVA (no personal data embedded).\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 if (v.length !== 16) return null;\n\n const yy =\n decodeCfDigit(v.charAt(6)) * 10 +\n decodeCfDigit(v.charAt(7));\n const month = MONTH_LETTERS[v.charAt(8)];\n if (month === undefined) return null;\n let dd =\n decodeCfDigit(v.charAt(9)) * 10 +\n decodeCfDigit(v.charAt(10));\n\n const gender = dd > 40 ? \"female\" : \"male\";\n if (dd > 40) dd -= 40;\n\n const currentYear = new Date().getFullYear();\n let year = 2000 + yy;\n if (year > currentYear) year -= 100;\n\n return {\n birthDate: new Date(year, month - 1, dd),\n gender,\n };\n};\n\nconst LETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\nconst MONTH_CODES = Object.keys(MONTH_LETTERS);\n\nconst randomLetter = (): string =>\n LETTERS.charAt(randomInt(0, LETTERS.length - 1));\n\n/** Generate a random valid 16-character Codice Fiscale. */\nconst generate = (): string => {\n let body = \"\";\n\n for (let i = 0; i < 6; i++) {\n body += randomLetter();\n }\n\n body += String(randomInt(0, 99)).padStart(2, \"0\");\n body +=\n MONTH_CODES[randomInt(0, MONTH_CODES.length - 1)] ??\n \"A\";\n\n const day =\n randomInt(1, 28) + (randomInt(0, 1) === 0 ? 0 : 40);\n body += String(day).padStart(2, \"0\");\n body += randomLetter();\n body += String(randomInt(0, 999)).padStart(3, \"0\");\n\n let sum = 0;\n for (let i = 0; i < body.length; i++) {\n const ch = body[i];\n if (ch === undefined) continue;\n sum += i % 2 === 0 ? (ODD[ch] ?? 0) : (EVEN[ch] ?? 0);\n }\n\n return `${body}${CHECK_LETTERS.charAt(sum % 26)}`;\n};\n\n/** Italian Tax Code. */\nconst codiceFiscale: Validator<ParsedPersonId> = {\n name: \"Italian Tax Code\",\n localName: \"Codice Fiscale\",\n abbreviation: \"CF\",\n aliases: [\n \"codice fiscale\",\n \"C.F.\",\n \"CF\",\n \"cod. fisc.\",\n \"fiscal code\",\n ] as const,\n candidatePattern:\n \"[A-Z]{6}\\\\d{2}[A-Z]\\\\d{2}[A-Z]\\\\d{3}[A-Z]\",\n country: \"IT\",\n entityType: \"person\",\n description:\n \"Personal/company tax code (16-char personal, 11-digit company)\",\n sourceUrl: \"https://www.agenziaentrate.gov.it/\",\n lengths: [11, 16] as const,\n examples: [\"RCCMNL83S18D969H\"] as const,\n compact,\n format,\n parse,\n validate,\n generate,\n};\n\nexport default codiceFiscale;\nexport { compact, format, generate, parse, validate };\n"],"mappings":"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"}
package/dist/it/iva.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/it/iva.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/it/mod.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import codiceFiscale from "./codicefiscale.js";
3
2
  import iva from "./iva.js";
4
3
 
5
4
  //#region src/it/mod.d.ts
6
-
5
+ declare namespace mod_d_exports {
6
+ export { codiceFiscale, iva };
7
+ }
7
8
  //#endregion
8
9
  export { codiceFiscale, iva, mod_d_exports };
9
10
  //# sourceMappingURL=mod.d.ts.map
package/dist/jp/cn.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/jp/cn.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/jp/mod.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import cn from "./cn.js";
3
2
  import mynumber from "./mynumber.js";
4
3
 
5
4
  //#region src/jp/mod.d.ts
6
-
5
+ declare namespace mod_d_exports {
6
+ export { cn, mynumber };
7
+ }
7
8
  //#endregion
8
9
  export { cn, mod_d_exports, mynumber };
9
10
  //# sourceMappingURL=mod.d.ts.map
@@ -1,7 +1,6 @@
1
1
  import { ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/jp/mynumber.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
package/dist/kr/mod.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import brn from "./brn.js";
3
2
  import rrn from "./rrn.js";
4
3
 
5
4
  //#region src/kr/mod.d.ts
6
-
5
+ declare namespace mod_d_exports {
6
+ export { brn, rrn };
7
+ }
7
8
  //#endregion
8
9
  export { brn, mod_d_exports, rrn };
9
10
  //# sourceMappingURL=mod.d.ts.map
package/dist/kr/rrn.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ParsedPersonId, ValidateResult, Validator } from "../types.js";
2
2
 
3
3
  //#region src/kr/rrn.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
@@ -15,8 +14,10 @@ declare const format: (value: string) => string;
15
14
  * 0, 9 = pre-1800 (male/female by convention)
16
15
  */
17
16
  declare const parse: (value: string) => ParsedPersonId | null;
17
+ /** Generate a random valid Korean RRN. */
18
+ declare const generate: () => string;
18
19
  /** Korean Resident Registration Number. */
19
- declare const rrn: Validator;
20
+ declare const rrn: Validator<ParsedPersonId>;
20
21
  //#endregion
21
- export { compact, rrn as default, format, parse, validate };
22
+ export { compact, rrn as default, format, generate, parse, validate };
22
23
  //# sourceMappingURL=rrn.d.ts.map