@stll/stdnum 0.0.1 → 2.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 (808) hide show
  1. package/LICENSE +1 -5
  2. package/README.md +28 -4
  3. package/dist/_checksums/luhn.js.map +1 -1
  4. package/dist/_checksums/mod1110.js +1 -1
  5. package/dist/_checksums/mod1110.js.map +1 -1
  6. package/dist/_checksums/mod112.js +5 -5
  7. package/dist/_checksums/mod112.js.map +1 -1
  8. package/dist/_checksums/mod97.js.map +1 -1
  9. package/dist/_checksums/verhoeff.js.map +1 -1
  10. package/dist/_checksums/weighted-sum.js.map +1 -1
  11. package/dist/_util/arabic.js.map +1 -1
  12. package/dist/_util/clean.js.map +1 -1
  13. package/dist/_util/date.js.map +1 -1
  14. package/dist/_util/generate.d.ts +13 -1
  15. package/dist/_util/generate.js +23 -1
  16. package/dist/_util/generate.js.map +1 -1
  17. package/dist/_util/result.js.map +1 -1
  18. package/dist/_util/strings.js.map +1 -1
  19. package/dist/ad/mod.d.ts +3 -2
  20. package/dist/ad/nrt.d.ts +16 -2
  21. package/dist/ad/nrt.js +4 -16
  22. package/dist/ad/nrt.js.map +1 -1
  23. package/dist/ae/eid.d.ts +2 -3
  24. package/dist/ae/eid.js +2 -12
  25. package/dist/ae/eid.js.map +1 -1
  26. package/dist/ae/mod.d.ts +3 -2
  27. package/dist/ai/mod.d.ts +3 -2
  28. package/dist/ai/tin.d.ts +20 -2
  29. package/dist/ai/tin.js +1 -18
  30. package/dist/ai/tin.js.map +1 -1
  31. package/dist/al/mod.d.ts +3 -2
  32. package/dist/al/nipt.d.ts +13 -2
  33. package/dist/al/nipt.js +1 -11
  34. package/dist/al/nipt.js.map +1 -1
  35. package/dist/am/mod.d.ts +3 -2
  36. package/dist/am/tin.d.ts +16 -2
  37. package/dist/am/tin.js +1 -14
  38. package/dist/am/tin.js.map +1 -1
  39. package/dist/ar/cbu.d.ts +2 -3
  40. package/dist/ar/cbu.js +2 -10
  41. package/dist/ar/cbu.js.map +1 -1
  42. package/dist/ar/cuit.d.ts +2 -3
  43. package/dist/ar/cuit.js +13 -29
  44. package/dist/ar/cuit.js.map +1 -1
  45. package/dist/ar/dni.d.ts +11 -2
  46. package/dist/ar/dni.js +1 -9
  47. package/dist/ar/dni.js.map +1 -1
  48. package/dist/ar/mod.d.ts +3 -2
  49. package/dist/at/businessid.d.ts +10 -2
  50. package/dist/at/businessid.js +1 -8
  51. package/dist/at/businessid.js.map +1 -1
  52. package/dist/at/mod.d.ts +3 -2
  53. package/dist/at/tin.d.ts +2 -3
  54. package/dist/at/tin.js +1 -11
  55. package/dist/at/tin.js.map +1 -1
  56. package/dist/at/uid.d.ts +2 -3
  57. package/dist/at/uid.js +2 -10
  58. package/dist/at/uid.js.map +1 -1
  59. package/dist/at/vnr.d.ts +5 -4
  60. package/dist/at/vnr.js +23 -16
  61. package/dist/at/vnr.js.map +1 -1
  62. package/dist/au/abn.d.ts +2 -3
  63. package/dist/au/abn.js +1 -10
  64. package/dist/au/abn.js.map +1 -1
  65. package/dist/au/acn.d.ts +2 -3
  66. package/dist/au/acn.js +1 -10
  67. package/dist/au/acn.js.map +1 -1
  68. package/dist/au/mod.d.ts +3 -2
  69. package/dist/au/tfn.d.ts +2 -3
  70. package/dist/au/tfn.js +1 -10
  71. package/dist/au/tfn.js.map +1 -1
  72. package/dist/az/mod.d.ts +3 -2
  73. package/dist/az/voen.d.ts +2 -3
  74. package/dist/az/voen.js +1 -14
  75. package/dist/az/voen.js.map +1 -1
  76. package/dist/ba/jmbg.d.ts +2 -3
  77. package/dist/ba/jmbg.js +4 -11
  78. package/dist/ba/jmbg.js.map +1 -1
  79. package/dist/ba/mod.d.ts +3 -2
  80. package/dist/bd/mod.d.ts +3 -2
  81. package/dist/bd/nid.d.ts +23 -2
  82. package/dist/bd/nid.js +11 -32
  83. package/dist/bd/nid.js.map +1 -1
  84. package/dist/be/bis.d.ts +2 -3
  85. package/dist/be/bis.js +1 -11
  86. package/dist/be/bis.js.map +1 -1
  87. package/dist/be/mod.d.ts +3 -2
  88. package/dist/be/nn.d.ts +2 -3
  89. package/dist/be/nn.js +1 -11
  90. package/dist/be/nn.js.map +1 -1
  91. package/dist/be/vat.d.ts +2 -3
  92. package/dist/be/vat.js +1 -9
  93. package/dist/be/vat.js.map +1 -1
  94. package/dist/bg/egn.d.ts +2 -3
  95. package/dist/bg/egn.js +5 -13
  96. package/dist/bg/egn.js.map +1 -1
  97. package/dist/bg/mod.d.ts +3 -2
  98. package/dist/bg/pnf.d.ts +2 -3
  99. package/dist/bg/pnf.js +1 -8
  100. package/dist/bg/pnf.js.map +1 -1
  101. package/dist/bg/vat.d.ts +2 -3
  102. package/dist/bg/vat.js +3 -9
  103. package/dist/bg/vat.js.map +1 -1
  104. package/dist/bh/cpr.d.ts +5 -4
  105. package/dist/bh/cpr.js +9 -19
  106. package/dist/bh/cpr.js.map +1 -1
  107. package/dist/bh/mod.d.ts +3 -2
  108. package/dist/bic.d.ts +13 -2
  109. package/dist/bic.js +14 -26
  110. package/dist/bic.js.map +1 -1
  111. package/dist/br/cnpj.d.ts +2 -3
  112. package/dist/br/cnpj.js +1 -20
  113. package/dist/br/cnpj.js.map +1 -1
  114. package/dist/br/cpf.d.ts +2 -3
  115. package/dist/br/cpf.js +1 -14
  116. package/dist/br/cpf.js.map +1 -1
  117. package/dist/br/mod.d.ts +3 -2
  118. package/dist/by/mod.d.ts +3 -2
  119. package/dist/by/unp.d.ts +2 -3
  120. package/dist/by/unp.js +9 -17
  121. package/dist/by/unp.js.map +1 -1
  122. package/dist/bz/mod.d.ts +3 -2
  123. package/dist/bz/tin.d.ts +5 -4
  124. package/dist/bz/tin.js +10 -27
  125. package/dist/bz/tin.js.map +1 -1
  126. package/dist/ca/bn.d.ts +2 -3
  127. package/dist/ca/bn.js +2 -10
  128. package/dist/ca/bn.js.map +1 -1
  129. package/dist/ca/mod.d.ts +3 -2
  130. package/dist/ca/sin.d.ts +2 -3
  131. package/dist/ca/sin.js +2 -10
  132. package/dist/ca/sin.js.map +1 -1
  133. package/dist/ch/mod.d.ts +3 -2
  134. package/dist/ch/ssn.d.ts +2 -3
  135. package/dist/ch/ssn.js +1 -9
  136. package/dist/ch/ssn.js.map +1 -1
  137. package/dist/ch/uid.d.ts +2 -3
  138. package/dist/ch/uid.js +1 -9
  139. package/dist/ch/uid.js.map +1 -1
  140. package/dist/ch/vat.d.ts +2 -3
  141. package/dist/ch/vat.js +1 -9
  142. package/dist/ch/vat.js.map +1 -1
  143. package/dist/cl/mod.d.ts +3 -2
  144. package/dist/cl/rut.d.ts +2 -3
  145. package/dist/cl/rut.js +2 -15
  146. package/dist/cl/rut.js.map +1 -1
  147. package/dist/cn/mod.d.ts +3 -2
  148. package/dist/cn/ric.d.ts +2 -3
  149. package/dist/cn/ric.js +4 -14
  150. package/dist/cn/ric.js.map +1 -1
  151. package/dist/cn/uscc.d.ts +2 -3
  152. package/dist/cn/uscc.js +8 -16
  153. package/dist/cn/uscc.js.map +1 -1
  154. package/dist/co/mod.d.ts +3 -2
  155. package/dist/co/nit.d.ts +2 -3
  156. package/dist/co/nit.js +6 -13
  157. package/dist/co/nit.js.map +1 -1
  158. package/dist/cr/cpf.d.ts +18 -2
  159. package/dist/cr/cpf.js +5 -19
  160. package/dist/cr/cpf.js.map +1 -1
  161. package/dist/cr/mod.d.ts +3 -2
  162. package/dist/creditcard.d.ts +2 -3
  163. package/dist/creditcard.js +5 -14
  164. package/dist/creditcard.js.map +1 -1
  165. package/dist/cu/mod.d.ts +3 -2
  166. package/dist/cu/ni.d.ts +5 -4
  167. package/dist/cu/ni.js +13 -18
  168. package/dist/cu/ni.js.map +1 -1
  169. package/dist/cy/mod.d.ts +3 -2
  170. package/dist/cy/vat.d.ts +2 -3
  171. package/dist/cy/vat.js +1 -8
  172. package/dist/cy/vat.js.map +1 -1
  173. package/dist/cz/dic.d.ts +2 -3
  174. package/dist/cz/dic.js +7 -13
  175. package/dist/cz/dic.js.map +1 -1
  176. package/dist/cz/ico.d.ts +2 -3
  177. package/dist/cz/ico.js +2 -10
  178. package/dist/cz/ico.js.map +1 -1
  179. package/dist/cz/mod.d.ts +3 -2
  180. package/dist/cz/rc.d.ts +2 -3
  181. package/dist/cz/rc.js +22 -21
  182. package/dist/cz/rc.js.map +1 -1
  183. package/dist/de/handelsreg.d.ts +19 -2
  184. package/dist/de/handelsreg.js +10 -26
  185. package/dist/de/handelsreg.js.map +1 -1
  186. package/dist/de/idnr.d.ts +2 -3
  187. package/dist/de/idnr.js +2 -12
  188. package/dist/de/idnr.js.map +1 -1
  189. package/dist/de/mod.d.ts +3 -2
  190. package/dist/de/stnr.d.ts +17 -3
  191. package/dist/de/stnr.js +1 -15
  192. package/dist/de/stnr.js.map +1 -1
  193. package/dist/de/svnr.d.ts +2 -3
  194. package/dist/de/svnr.js +4 -13
  195. package/dist/de/svnr.js.map +1 -1
  196. package/dist/de/vat.d.ts +2 -3
  197. package/dist/de/vat.js +2 -11
  198. package/dist/de/vat.js.map +1 -1
  199. package/dist/dk/cpr.d.ts +5 -4
  200. package/dist/dk/cpr.js +14 -12
  201. package/dist/dk/cpr.js.map +1 -1
  202. package/dist/dk/cvr.d.ts +2 -3
  203. package/dist/dk/cvr.js +2 -15
  204. package/dist/dk/cvr.js.map +1 -1
  205. package/dist/dk/mod.d.ts +3 -2
  206. package/dist/dk/vat.d.ts +2 -3
  207. package/dist/dk/vat.js +3 -13
  208. package/dist/dk/vat.js.map +1 -1
  209. package/dist/do/mod.d.ts +3 -2
  210. package/dist/do/rnc.d.ts +2 -3
  211. package/dist/do/rnc.js +3 -17
  212. package/dist/do/rnc.js.map +1 -1
  213. package/dist/ec/mod.d.ts +3 -2
  214. package/dist/ec/ruc.d.ts +2 -3
  215. package/dist/ec/ruc.js +2 -19
  216. package/dist/ec/ruc.js.map +1 -1
  217. package/dist/ee/ik.d.ts +2 -3
  218. package/dist/ee/ik.js +6 -15
  219. package/dist/ee/ik.js.map +1 -1
  220. package/dist/ee/mod.d.ts +3 -2
  221. package/dist/ee/registrikood.d.ts +2 -3
  222. package/dist/ee/registrikood.js +9 -15
  223. package/dist/ee/registrikood.js.map +1 -1
  224. package/dist/ee/vat.d.ts +2 -3
  225. package/dist/ee/vat.js +2 -10
  226. package/dist/ee/vat.js.map +1 -1
  227. package/dist/eg/mod.d.ts +3 -2
  228. package/dist/eg/tn.d.ts +11 -2
  229. package/dist/eg/tn.js +1 -9
  230. package/dist/eg/tn.js.map +1 -1
  231. package/dist/es/cif.d.ts +2 -3
  232. package/dist/es/cif.js +3 -12
  233. package/dist/es/cif.js.map +1 -1
  234. package/dist/es/dni.d.ts +2 -3
  235. package/dist/es/dni.js +1 -9
  236. package/dist/es/dni.js.map +1 -1
  237. package/dist/es/mod.d.ts +3 -2
  238. package/dist/es/nie.d.ts +2 -3
  239. package/dist/es/nie.js +14 -22
  240. package/dist/es/nie.js.map +1 -1
  241. package/dist/es/nss.d.ts +2 -3
  242. package/dist/es/nss.js +1 -16
  243. package/dist/es/nss.js.map +1 -1
  244. package/dist/es/vat.d.ts +2 -3
  245. package/dist/es/vat.js +5 -10
  246. package/dist/es/vat.js.map +1 -1
  247. package/dist/eu/mod.d.ts +3 -2
  248. package/dist/eu/vat.d.ts +5 -4
  249. package/dist/eu/vat.js +44 -2
  250. package/dist/eu/vat.js.map +1 -1
  251. package/dist/fi/hetu.d.ts +5 -4
  252. package/dist/fi/hetu.js +19 -12
  253. package/dist/fi/hetu.js.map +1 -1
  254. package/dist/fi/mod.d.ts +3 -2
  255. package/dist/fi/vat.d.ts +2 -3
  256. package/dist/fi/vat.js +3 -10
  257. package/dist/fi/vat.js.map +1 -1
  258. package/dist/fi/ytunnus.d.ts +2 -3
  259. package/dist/fi/ytunnus.js +2 -10
  260. package/dist/fi/ytunnus.js.map +1 -1
  261. package/dist/fr/mod.d.ts +3 -2
  262. package/dist/fr/nif.d.ts +2 -3
  263. package/dist/fr/nif.js +1 -9
  264. package/dist/fr/nif.js.map +1 -1
  265. package/dist/fr/nir.d.ts +2 -3
  266. package/dist/fr/nir.js +3 -14
  267. package/dist/fr/nir.js.map +1 -1
  268. package/dist/fr/siren.d.ts +2 -3
  269. package/dist/fr/siren.js +2 -10
  270. package/dist/fr/siren.js.map +1 -1
  271. package/dist/fr/siret.d.ts +2 -3
  272. package/dist/fr/siret.js +2 -11
  273. package/dist/fr/siret.js.map +1 -1
  274. package/dist/fr/tva.d.ts +2 -3
  275. package/dist/fr/tva.js +2 -12
  276. package/dist/fr/tva.js.map +1 -1
  277. package/dist/gb/mod.d.ts +3 -2
  278. package/dist/gb/nino.d.ts +12 -2
  279. package/dist/gb/nino.js +8 -17
  280. package/dist/gb/nino.js.map +1 -1
  281. package/dist/gb/sedol.d.ts +2 -3
  282. package/dist/gb/sedol.js +9 -18
  283. package/dist/gb/sedol.js.map +1 -1
  284. package/dist/gb/utr.d.ts +2 -3
  285. package/dist/gb/utr.js +2 -10
  286. package/dist/gb/utr.js.map +1 -1
  287. package/dist/gb/vat.d.ts +2 -3
  288. package/dist/gb/vat.js +2 -11
  289. package/dist/gb/vat.js.map +1 -1
  290. package/dist/ge/mod.d.ts +3 -2
  291. package/dist/ge/pin.d.ts +14 -2
  292. package/dist/ge/pin.js +1 -12
  293. package/dist/ge/pin.js.map +1 -1
  294. package/dist/gh/mod.d.ts +3 -2
  295. package/dist/gh/tin.d.ts +2 -3
  296. package/dist/gh/tin.js +10 -24
  297. package/dist/gh/tin.js.map +1 -1
  298. package/dist/gr/amka.d.ts +2 -3
  299. package/dist/gr/amka.js +3 -11
  300. package/dist/gr/amka.js.map +1 -1
  301. package/dist/gr/mod.d.ts +3 -2
  302. package/dist/gr/vat.d.ts +2 -3
  303. package/dist/gr/vat.js +1 -10
  304. package/dist/gr/vat.js.map +1 -1
  305. package/dist/gt/mod.d.ts +3 -2
  306. package/dist/gt/nit.d.ts +2 -3
  307. package/dist/gt/nit.js +6 -14
  308. package/dist/gt/nit.js.map +1 -1
  309. package/dist/hk/hkid.d.ts +2 -3
  310. package/dist/hk/hkid.js +2 -10
  311. package/dist/hk/hkid.js.map +1 -1
  312. package/dist/hk/mod.d.ts +3 -2
  313. package/dist/hr/mod.d.ts +3 -2
  314. package/dist/hr/vat.d.ts +2 -3
  315. package/dist/hr/vat.js +2 -9
  316. package/dist/hr/vat.js.map +1 -1
  317. package/dist/hu/mod.d.ts +3 -2
  318. package/dist/hu/vat.d.ts +2 -3
  319. package/dist/hu/vat.js +3 -10
  320. package/dist/hu/vat.js.map +1 -1
  321. package/dist/iban.d.ts +2 -3
  322. package/dist/iban.js +2 -8
  323. package/dist/iban.js.map +1 -1
  324. package/dist/id/mod.d.ts +3 -2
  325. package/dist/id/npwp.d.ts +2 -3
  326. package/dist/id/npwp.js +3 -13
  327. package/dist/id/npwp.js.map +1 -1
  328. package/dist/ie/mod.d.ts +3 -2
  329. package/dist/ie/pps.d.ts +2 -3
  330. package/dist/ie/pps.js +1 -10
  331. package/dist/ie/pps.js.map +1 -1
  332. package/dist/ie/vat.d.ts +2 -3
  333. package/dist/ie/vat.js +1 -9
  334. package/dist/ie/vat.js.map +1 -1
  335. package/dist/il/idnr.d.ts +2 -3
  336. package/dist/il/idnr.js +2 -9
  337. package/dist/il/idnr.js.map +1 -1
  338. package/dist/il/mod.d.ts +3 -2
  339. package/dist/in/aadhaar.d.ts +2 -3
  340. package/dist/in/aadhaar.js +2 -12
  341. package/dist/in/aadhaar.js.map +1 -1
  342. package/dist/in/gstin.d.ts +2 -3
  343. package/dist/in/gstin.js +4 -11
  344. package/dist/in/gstin.js.map +1 -1
  345. package/dist/in/mod.d.ts +3 -2
  346. package/dist/in/pan.d.ts +15 -2
  347. package/dist/in/pan.js +3 -15
  348. package/dist/in/pan.js.map +1 -1
  349. package/dist/index.d.ts +2 -2
  350. package/dist/index.js +6 -6
  351. package/dist/iq/mod.d.ts +3 -2
  352. package/dist/iq/nid.d.ts +16 -2
  353. package/dist/iq/nid.js +2 -15
  354. package/dist/iq/nid.js.map +1 -1
  355. package/dist/ir/mod.d.ts +3 -2
  356. package/dist/ir/nid.d.ts +2 -3
  357. package/dist/ir/nid.js +2 -24
  358. package/dist/ir/nid.js.map +1 -1
  359. package/dist/is/kennitala.d.ts +2 -3
  360. package/dist/is/kennitala.js +2 -13
  361. package/dist/is/kennitala.js.map +1 -1
  362. package/dist/is/mod.d.ts +3 -2
  363. package/dist/is/vsk.d.ts +9 -2
  364. package/dist/is/vsk.js +1 -7
  365. package/dist/is/vsk.js.map +1 -1
  366. package/dist/isin.d.ts +2 -3
  367. package/dist/isin.js +11 -21
  368. package/dist/isin.js.map +1 -1
  369. package/dist/it/codicefiscale.d.ts +5 -4
  370. package/dist/it/codicefiscale.js +27 -23
  371. package/dist/it/codicefiscale.js.map +1 -1
  372. package/dist/it/iva.d.ts +2 -3
  373. package/dist/it/iva.js +2 -9
  374. package/dist/it/iva.js.map +1 -1
  375. package/dist/it/mod.d.ts +3 -2
  376. package/dist/jp/cn.d.ts +2 -3
  377. package/dist/jp/cn.js +1 -9
  378. package/dist/jp/cn.js.map +1 -1
  379. package/dist/jp/mod.d.ts +3 -2
  380. package/dist/jp/mynumber.d.ts +2 -3
  381. package/dist/jp/mynumber.js +1 -10
  382. package/dist/jp/mynumber.js.map +1 -1
  383. package/dist/kr/brn.d.ts +11 -2
  384. package/dist/kr/brn.js +1 -9
  385. package/dist/kr/brn.js.map +1 -1
  386. package/dist/kr/mod.d.ts +3 -2
  387. package/dist/kr/rrn.d.ts +5 -4
  388. package/dist/kr/rrn.js +15 -13
  389. package/dist/kr/rrn.js.map +1 -1
  390. package/dist/kw/civil.d.ts +6 -5
  391. package/dist/kw/civil.js +20 -17
  392. package/dist/kw/civil.js.map +1 -1
  393. package/dist/kw/mod.d.ts +3 -2
  394. package/dist/kz/iin.d.ts +2 -3
  395. package/dist/kz/iin.js +4 -18
  396. package/dist/kz/iin.js.map +1 -1
  397. package/dist/kz/mod.d.ts +3 -2
  398. package/dist/lei.d.ts +2 -3
  399. package/dist/lei.js +2 -11
  400. package/dist/lei.js.map +1 -1
  401. package/dist/li/mod.d.ts +3 -2
  402. package/dist/li/peid.d.ts +11 -2
  403. package/dist/li/peid.js +1 -9
  404. package/dist/li/peid.js.map +1 -1
  405. package/dist/lk/mod.d.ts +3 -2
  406. package/dist/lk/nic.d.ts +5 -4
  407. package/dist/lk/nic.js +16 -16
  408. package/dist/lk/nic.js.map +1 -1
  409. package/dist/lt/asmens.d.ts +2 -3
  410. package/dist/lt/asmens.js +2 -1
  411. package/dist/lt/asmens.js.map +1 -1
  412. package/dist/lt/mod.d.ts +3 -2
  413. package/dist/lt/vat.d.ts +2 -3
  414. package/dist/lt/vat.js +2 -10
  415. package/dist/lt/vat.js.map +1 -1
  416. package/dist/lu/mod.d.ts +3 -2
  417. package/dist/lu/vat.d.ts +2 -3
  418. package/dist/lu/vat.js +2 -8
  419. package/dist/lu/vat.js.map +1 -1
  420. package/dist/luhn.d.ts +2 -3
  421. package/dist/luhn.js +9 -9
  422. package/dist/luhn.js.map +1 -1
  423. package/dist/lv/mod.d.ts +3 -2
  424. package/dist/lv/vat.d.ts +2 -3
  425. package/dist/lv/vat.js +19 -18
  426. package/dist/lv/vat.js.map +1 -1
  427. package/dist/ma/ice.d.ts +2 -3
  428. package/dist/ma/ice.js +2 -11
  429. package/dist/ma/ice.js.map +1 -1
  430. package/dist/ma/mod.d.ts +3 -2
  431. package/dist/mc/mod.d.ts +3 -2
  432. package/dist/mc/tva.d.ts +2 -3
  433. package/dist/mc/tva.js +1 -0
  434. package/dist/mc/tva.js.map +1 -1
  435. package/dist/md/idno.d.ts +2 -3
  436. package/dist/md/idno.js +1 -10
  437. package/dist/md/idno.js.map +1 -1
  438. package/dist/md/mod.d.ts +3 -2
  439. package/dist/me/mod.d.ts +3 -2
  440. package/dist/me/pib.d.ts +2 -3
  441. package/dist/me/pib.js +2 -10
  442. package/dist/me/pib.js.map +1 -1
  443. package/dist/mk/edb.d.ts +2 -3
  444. package/dist/mk/edb.js +2 -11
  445. package/dist/mk/edb.js.map +1 -1
  446. package/dist/mk/mod.d.ts +3 -2
  447. package/dist/mt/mod.d.ts +3 -2
  448. package/dist/mt/vat.d.ts +2 -3
  449. package/dist/mt/vat.js +3 -10
  450. package/dist/mt/vat.js.map +1 -1
  451. package/dist/mu/brn.d.ts +23 -2
  452. package/dist/mu/brn.js +1 -21
  453. package/dist/mu/brn.js.map +1 -1
  454. package/dist/mu/mod.d.ts +3 -2
  455. package/dist/mx/clabe.d.ts +2 -3
  456. package/dist/mx/clabe.js +1 -14
  457. package/dist/mx/clabe.js.map +1 -1
  458. package/dist/mx/curp.d.ts +5 -4
  459. package/dist/mx/curp.js +27 -19
  460. package/dist/mx/curp.js.map +1 -1
  461. package/dist/mx/mod.d.ts +3 -2
  462. package/dist/mx/rfc.d.ts +5 -4
  463. package/dist/mx/rfc.js +23 -20
  464. package/dist/mx/rfc.js.map +1 -1
  465. package/dist/my/mod.d.ts +3 -2
  466. package/dist/my/nric.d.ts +5 -4
  467. package/dist/my/nric.js +18 -16
  468. package/dist/my/nric.js.map +1 -1
  469. package/dist/ng/mod.d.ts +3 -2
  470. package/dist/ng/nin.d.ts +13 -2
  471. package/dist/ng/nin.js +1 -11
  472. package/dist/ng/nin.js.map +1 -1
  473. package/dist/ni/mod.d.ts +3 -2
  474. package/dist/ni/ruc.d.ts +2 -3
  475. package/dist/ni/ruc.js +1 -23
  476. package/dist/ni/ruc.js.map +1 -1
  477. package/dist/nl/bsn.d.ts +2 -3
  478. package/dist/nl/bsn.js +2 -10
  479. package/dist/nl/bsn.js.map +1 -1
  480. package/dist/nl/kvk.d.ts +9 -2
  481. package/dist/nl/kvk.js +1 -7
  482. package/dist/nl/kvk.js.map +1 -1
  483. package/dist/nl/mod.d.ts +3 -2
  484. package/dist/nl/vat.d.ts +2 -3
  485. package/dist/nl/vat.js +4 -50
  486. package/dist/nl/vat.js.map +1 -1
  487. package/dist/no/fodselsnummer.d.ts +2 -3
  488. package/dist/no/fodselsnummer.js +3 -10
  489. package/dist/no/fodselsnummer.js.map +1 -1
  490. package/dist/no/mod.d.ts +3 -2
  491. package/dist/no/mva.d.ts +2 -3
  492. package/dist/no/mva.js +1 -8
  493. package/dist/no/mva.js.map +1 -1
  494. package/dist/no/orgnr.d.ts +2 -3
  495. package/dist/no/orgnr.js +2 -8
  496. package/dist/no/orgnr.js.map +1 -1
  497. package/dist/nz/ird.d.ts +2 -3
  498. package/dist/nz/ird.js +4 -13
  499. package/dist/nz/ird.js.map +1 -1
  500. package/dist/nz/mod.d.ts +3 -2
  501. package/dist/pa/mod.d.ts +3 -2
  502. package/dist/pa/ruc.d.ts +2 -3
  503. package/dist/pa/ruc.js +4 -19
  504. package/dist/pa/ruc.js.map +1 -1
  505. package/dist/patterns.d.ts +8 -10
  506. package/dist/patterns.js +83 -28
  507. package/dist/patterns.js.map +1 -1
  508. package/dist/pe/mod.d.ts +3 -2
  509. package/dist/pe/ruc.d.ts +2 -3
  510. package/dist/pe/ruc.js +10 -24
  511. package/dist/pe/ruc.js.map +1 -1
  512. package/dist/ph/mod.d.ts +3 -2
  513. package/dist/ph/philid.d.ts +14 -2
  514. package/dist/ph/philid.js +1 -12
  515. package/dist/ph/philid.js.map +1 -1
  516. package/dist/pk/cnic.d.ts +14 -2
  517. package/dist/pk/cnic.js +1 -12
  518. package/dist/pk/cnic.js.map +1 -1
  519. package/dist/pk/mod.d.ts +3 -2
  520. package/dist/pl/mod.d.ts +3 -2
  521. package/dist/pl/nip.d.ts +2 -3
  522. package/dist/pl/nip.js +2 -10
  523. package/dist/pl/nip.js.map +1 -1
  524. package/dist/pl/pesel.d.ts +2 -3
  525. package/dist/pl/pesel.js +4 -13
  526. package/dist/pl/pesel.js.map +1 -1
  527. package/dist/pl/regon.d.ts +2 -3
  528. package/dist/pl/regon.js +2 -11
  529. package/dist/pl/regon.js.map +1 -1
  530. package/dist/pt/cc.d.ts +2 -3
  531. package/dist/pt/cc.js +7 -13
  532. package/dist/pt/cc.js.map +1 -1
  533. package/dist/pt/mod.d.ts +3 -2
  534. package/dist/pt/vat.d.ts +2 -3
  535. package/dist/pt/vat.js +3 -11
  536. package/dist/pt/vat.js.map +1 -1
  537. package/dist/ro/cnp.d.ts +2 -3
  538. package/dist/ro/cnp.js +5 -14
  539. package/dist/ro/cnp.js.map +1 -1
  540. package/dist/ro/mod.d.ts +3 -2
  541. package/dist/ro/vat.d.ts +2 -3
  542. package/dist/ro/vat.js +13 -11
  543. package/dist/ro/vat.js.map +1 -1
  544. package/dist/rs/mod.d.ts +3 -2
  545. package/dist/rs/pib.d.ts +2 -3
  546. package/dist/rs/pib.js +1 -9
  547. package/dist/rs/pib.js.map +1 -1
  548. package/dist/ru/inn.d.ts +2 -3
  549. package/dist/ru/inn.js +2 -12
  550. package/dist/ru/inn.js.map +1 -1
  551. package/dist/ru/mod.d.ts +3 -2
  552. package/dist/se/mod.d.ts +3 -2
  553. package/dist/se/orgnr.d.ts +2 -3
  554. package/dist/se/orgnr.js +2 -9
  555. package/dist/se/orgnr.js.map +1 -1
  556. package/dist/se/personnummer.d.ts +2 -3
  557. package/dist/se/personnummer.js +8 -15
  558. package/dist/se/personnummer.js.map +1 -1
  559. package/dist/se/vat.d.ts +2 -3
  560. package/dist/se/vat.js +3 -10
  561. package/dist/se/vat.js.map +1 -1
  562. package/dist/sg/mod.d.ts +3 -2
  563. package/dist/sg/uen.d.ts +2 -3
  564. package/dist/sg/uen.js +47 -70
  565. package/dist/sg/uen.js.map +1 -1
  566. package/dist/si/emso.d.ts +2 -3
  567. package/dist/si/emso.js +12 -14
  568. package/dist/si/emso.js.map +1 -1
  569. package/dist/si/mod.d.ts +3 -2
  570. package/dist/si/vat.d.ts +2 -3
  571. package/dist/si/vat.js +3 -12
  572. package/dist/si/vat.js.map +1 -1
  573. package/dist/sk/dic.d.ts +2 -3
  574. package/dist/sk/dic.js +1 -0
  575. package/dist/sk/dic.js.map +1 -1
  576. package/dist/sk/ico.d.ts +2 -3
  577. package/dist/sk/ico.js +1 -0
  578. package/dist/sk/ico.js.map +1 -1
  579. package/dist/sk/mod.d.ts +3 -2
  580. package/dist/sk/rc.d.ts +4 -5
  581. package/dist/sk/rc.js +6 -2
  582. package/dist/sk/rc.js.map +1 -1
  583. package/dist/th/mod.d.ts +3 -2
  584. package/dist/th/tin.d.ts +2 -3
  585. package/dist/th/tin.js +1 -11
  586. package/dist/th/tin.js.map +1 -1
  587. package/dist/tr/mod.d.ts +3 -2
  588. package/dist/tr/tckimlik.d.ts +2 -3
  589. package/dist/tr/tckimlik.js +1 -20
  590. package/dist/tr/tckimlik.js.map +1 -1
  591. package/dist/tr/vkn.d.ts +2 -3
  592. package/dist/tr/vkn.js +1 -20
  593. package/dist/tr/vkn.js.map +1 -1
  594. package/dist/tw/mod.d.ts +3 -2
  595. package/dist/tw/ubn.d.ts +2 -3
  596. package/dist/tw/ubn.js +2 -12
  597. package/dist/tw/ubn.js.map +1 -1
  598. package/dist/types.d.ts +56 -21
  599. package/dist/ua/edrpou.d.ts +2 -3
  600. package/dist/ua/edrpou.js +5 -12
  601. package/dist/ua/edrpou.js.map +1 -1
  602. package/dist/ua/mod.d.ts +3 -2
  603. package/dist/us/ein.d.ts +12 -2
  604. package/dist/us/ein.js +88 -97
  605. package/dist/us/ein.js.map +1 -1
  606. package/dist/us/itin.d.ts +13 -2
  607. package/dist/us/itin.js +4 -15
  608. package/dist/us/itin.js.map +1 -1
  609. package/dist/us/mod.d.ts +3 -2
  610. package/dist/us/rtn.d.ts +2 -3
  611. package/dist/us/rtn.js +11 -23
  612. package/dist/us/rtn.js.map +1 -1
  613. package/dist/us/ssn.d.ts +13 -2
  614. package/dist/us/ssn.js +1 -11
  615. package/dist/us/ssn.js.map +1 -1
  616. package/dist/uy/mod.d.ts +3 -2
  617. package/dist/uy/rut.d.ts +2 -3
  618. package/dist/uy/rut.js +2 -15
  619. package/dist/uy/rut.js.map +1 -1
  620. package/dist/ve/mod.d.ts +3 -2
  621. package/dist/ve/rif.d.ts +2 -3
  622. package/dist/ve/rif.js +13 -26
  623. package/dist/ve/rif.js.map +1 -1
  624. package/dist/vn/mod.d.ts +3 -2
  625. package/dist/vn/mst.d.ts +2 -3
  626. package/dist/vn/mst.js +1 -12
  627. package/dist/vn/mst.js.map +1 -1
  628. package/dist/za/idnr.d.ts +2 -3
  629. package/dist/za/idnr.js +4 -16
  630. package/dist/za/idnr.js.map +1 -1
  631. package/dist/za/mod.d.ts +3 -2
  632. package/package.json +34 -21
  633. package/src/_checksums/mod1110.ts +1 -1
  634. package/src/_checksums/mod112.ts +7 -6
  635. package/src/_util/generate.ts +38 -0
  636. package/src/ad/nrt.ts +19 -7
  637. package/src/ae/eid.ts +7 -3
  638. package/src/ai/tin.ts +7 -3
  639. package/src/al/nipt.ts +7 -3
  640. package/src/am/tin.ts +7 -3
  641. package/src/ar/cbu.ts +9 -5
  642. package/src/ar/cuit.ts +22 -10
  643. package/src/ar/dni.ts +7 -3
  644. package/src/at/businessid.ts +7 -3
  645. package/src/at/tin.ts +7 -3
  646. package/src/at/uid.ts +7 -3
  647. package/src/at/vnr.ts +62 -12
  648. package/src/au/abn.ts +7 -3
  649. package/src/au/acn.ts +7 -3
  650. package/src/au/tfn.ts +7 -3
  651. package/src/az/voen.ts +9 -3
  652. package/src/ba/jmbg.ts +9 -7
  653. package/src/bd/nid.ts +11 -7
  654. package/src/be/bis.ts +8 -4
  655. package/src/be/nn.ts +7 -3
  656. package/src/be/vat.ts +7 -3
  657. package/src/bg/egn.ts +19 -10
  658. package/src/bg/pnf.ts +7 -3
  659. package/src/bg/vat.ts +8 -3
  660. package/src/bh/cpr.ts +17 -4
  661. package/src/bic.ts +26 -20
  662. package/src/br/cnpj.ts +7 -3
  663. package/src/br/cpf.ts +7 -3
  664. package/src/by/unp.ts +19 -9
  665. package/src/bz/tin.ts +19 -4
  666. package/src/ca/bn.ts +7 -3
  667. package/src/ca/sin.ts +7 -3
  668. package/src/ch/ssn.ts +7 -3
  669. package/src/ch/uid.ts +7 -3
  670. package/src/ch/vat.ts +9 -5
  671. package/src/cl/rut.ts +11 -5
  672. package/src/cn/ric.ts +11 -7
  673. package/src/cn/uscc.ts +27 -11
  674. package/src/co/nit.ts +14 -6
  675. package/src/cr/cpf.ts +11 -6
  676. package/src/creditcard.ts +10 -6
  677. package/src/cu/ni.ts +28 -7
  678. package/src/cy/vat.ts +7 -3
  679. package/src/cz/dic.ts +9 -4
  680. package/src/cz/ico.ts +7 -3
  681. package/src/cz/rc.ts +61 -29
  682. package/src/de/handelsreg.ts +21 -6
  683. package/src/de/idnr.ts +10 -3
  684. package/src/de/stnr.ts +11 -3
  685. package/src/de/svnr.ts +14 -5
  686. package/src/de/vat.ts +7 -3
  687. package/src/dk/cpr.ts +23 -8
  688. package/src/dk/cvr.ts +7 -3
  689. package/src/dk/vat.ts +8 -3
  690. package/src/do/rnc.ts +9 -5
  691. package/src/ec/ruc.ts +9 -5
  692. package/src/ee/ik.ts +21 -10
  693. package/src/ee/registrikood.ts +12 -7
  694. package/src/ee/vat.ts +7 -3
  695. package/src/eg/tn.ts +7 -3
  696. package/src/es/cif.ts +10 -7
  697. package/src/es/dni.ts +7 -3
  698. package/src/es/nie.ts +18 -9
  699. package/src/es/nss.ts +7 -3
  700. package/src/es/vat.ts +13 -5
  701. package/src/eu/vat.ts +55 -6
  702. package/src/fi/hetu.ts +26 -8
  703. package/src/fi/vat.ts +8 -3
  704. package/src/fi/ytunnus.ts +7 -3
  705. package/src/fr/nif.ts +7 -3
  706. package/src/fr/nir.ts +9 -7
  707. package/src/fr/siren.ts +7 -3
  708. package/src/fr/siret.ts +7 -3
  709. package/src/fr/tva.ts +7 -3
  710. package/src/gb/nino.ts +18 -13
  711. package/src/gb/sedol.ts +21 -15
  712. package/src/gb/utr.ts +7 -3
  713. package/src/gb/vat.ts +7 -3
  714. package/src/ge/pin.ts +7 -3
  715. package/src/gh/tin.ts +11 -6
  716. package/src/gr/amka.ts +7 -3
  717. package/src/gr/vat.ts +7 -3
  718. package/src/gt/nit.ts +13 -6
  719. package/src/hk/hkid.ts +9 -4
  720. package/src/hr/vat.ts +7 -3
  721. package/src/hu/vat.ts +8 -3
  722. package/src/iban.ts +7 -3
  723. package/src/id/npwp.ts +7 -3
  724. package/src/ie/pps.ts +7 -3
  725. package/src/ie/vat.ts +7 -3
  726. package/src/il/idnr.ts +7 -3
  727. package/src/in/aadhaar.ts +7 -3
  728. package/src/in/gstin.ts +10 -4
  729. package/src/in/pan.ts +15 -6
  730. package/src/index.ts +6 -0
  731. package/src/iq/nid.ts +7 -3
  732. package/src/ir/nid.ts +7 -3
  733. package/src/is/kennitala.ts +7 -3
  734. package/src/is/vsk.ts +7 -3
  735. package/src/isin.ts +17 -7
  736. package/src/it/codicefiscale.ts +49 -7
  737. package/src/it/iva.ts +7 -3
  738. package/src/jp/cn.ts +7 -3
  739. package/src/jp/mynumber.ts +7 -3
  740. package/src/kr/brn.ts +7 -3
  741. package/src/kr/rrn.ts +27 -8
  742. package/src/kw/civil.ts +31 -14
  743. package/src/kz/iin.ts +9 -8
  744. package/src/lei.ts +7 -3
  745. package/src/li/peid.ts +7 -3
  746. package/src/lk/nic.ts +31 -8
  747. package/src/lt/asmens.ts +8 -4
  748. package/src/lt/vat.ts +8 -3
  749. package/src/lu/vat.ts +8 -3
  750. package/src/luhn.ts +10 -3
  751. package/src/lv/vat.ts +53 -23
  752. package/src/ma/ice.ts +7 -3
  753. package/src/mc/tva.ts +9 -5
  754. package/src/md/idno.ts +7 -3
  755. package/src/me/pib.ts +7 -3
  756. package/src/mk/edb.ts +7 -3
  757. package/src/mt/vat.ts +8 -3
  758. package/src/mu/brn.ts +7 -3
  759. package/src/mx/clabe.ts +7 -3
  760. package/src/mx/curp.ts +47 -10
  761. package/src/mx/rfc.ts +42 -7
  762. package/src/my/nric.ts +33 -8
  763. package/src/ng/nin.ts +7 -3
  764. package/src/ni/ruc.ts +7 -3
  765. package/src/nl/bsn.ts +7 -3
  766. package/src/nl/kvk.ts +7 -3
  767. package/src/nl/vat.ts +18 -69
  768. package/src/no/fodselsnummer.ts +12 -7
  769. package/src/no/mva.ts +9 -5
  770. package/src/no/orgnr.ts +7 -3
  771. package/src/nz/ird.ts +12 -8
  772. package/src/pa/ruc.ts +39 -11
  773. package/src/patterns.ts +184 -46
  774. package/src/pe/ruc.ts +13 -10
  775. package/src/ph/philid.ts +7 -3
  776. package/src/pk/cnic.ts +9 -3
  777. package/src/pl/nip.ts +7 -3
  778. package/src/pl/pesel.ts +9 -7
  779. package/src/pl/regon.ts +7 -3
  780. package/src/pt/cc.ts +13 -7
  781. package/src/pt/vat.ts +8 -3
  782. package/src/ro/cnp.ts +16 -8
  783. package/src/ro/vat.ts +8 -3
  784. package/src/rs/pib.ts +7 -3
  785. package/src/ru/inn.ts +9 -5
  786. package/src/se/orgnr.ts +7 -3
  787. package/src/se/personnummer.ts +35 -32
  788. package/src/se/vat.ts +8 -3
  789. package/src/sg/uen.ts +44 -23
  790. package/src/si/emso.ts +37 -11
  791. package/src/si/vat.ts +8 -3
  792. package/src/sk/dic.ts +8 -4
  793. package/src/sk/ico.ts +3 -2
  794. package/src/sk/rc.ts +17 -4
  795. package/src/th/tin.ts +7 -3
  796. package/src/tr/tckimlik.ts +7 -3
  797. package/src/tr/vkn.ts +7 -3
  798. package/src/tw/ubn.ts +9 -5
  799. package/src/types.ts +69 -7
  800. package/src/ua/edrpou.ts +10 -5
  801. package/src/us/ein.ts +95 -91
  802. package/src/us/itin.ts +14 -11
  803. package/src/us/rtn.ts +32 -19
  804. package/src/us/ssn.ts +7 -3
  805. package/src/uy/rut.ts +9 -5
  806. package/src/ve/rif.ts +19 -12
  807. package/src/vn/mst.ts +7 -3
  808. package/src/za/idnr.ts +9 -7
@@ -1 +1 @@
1
- {"version":3,"file":"dic.js","names":["validateRc"],"sources":["../../src/sk/dic.ts"],"sourcesContent":["/**\n * IČ DPH (Identifikačné číslo pre daň z\n * pridanej hodnoty).\n *\n * Slovak VAT number. Format: \"SK\" + 10 digits.\n * The 10-digit number must be divisible by 11.\n * First digit is 1-9.\n *\n * @see https://www.financnasprava.sk/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport { validate as validateRc } from \"../cz/rc\";\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string => {\n const v = clean(value, \" -\");\n if (v.startsWith(\"SK\") || v.startsWith(\"sk\")) {\n return v.slice(2);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Slovak VAT number must be 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Slovak VAT number must contain only digits\",\n );\n }\n // A valid birth number is also accepted as DPH\n if (validateRc(v).valid) {\n return { valid: true, compact: v };\n }\n if (v[0] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Slovak VAT number cannot start with 0\",\n );\n }\n // Third digit must be 2, 3, 4, 7, 8, or 9\n const d3 = Number(v[2]);\n if (\n d3 !== 2 &&\n d3 !== 3 &&\n d3 !== 4 &&\n d3 !== 7 &&\n d3 !== 8 &&\n d3 !== 9\n ) {\n return err(\n \"INVALID_FORMAT\",\n \"Slovak VAT number has invalid third digit\",\n );\n }\n if (Number(v) % 11 !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Slovak VAT number is not divisible by 11\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `SK${compact(value)}`;\n\n/** Generate a random valid Slovak DIČ. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(10);\n if (validate(c).valid) return c;\n }\n};\n\n/** Slovak VAT Number. */\nconst dic: Validator = {\n name: \"Slovak VAT Number\",\n localName:\n \"Identifikačné číslo pre daň z pridanej hodnoty\",\n abbreviation: \"IČ DPH\",\n aliases: [\"DIČ\", \"daňové identifikačné číslo\"] as const,\n candidatePattern: \"SK\\\\d{10}\",\n country: \"SK\",\n entityType: \"company\",\n sourceUrl: \"https://www.financnasprava.sk/\",\n examples: [\"2021853504\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default dic;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,MAAM,WAAW,UAA0B;CACzC,MAAM,IAAI,MAAM,OAAO,KAAK;AAC5B,KAAI,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,CAC1C,QAAO,EAAE,MAAM,EAAE;AAEnB,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,sCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,6CACD;AAGH,KAAIA,WAAW,EAAE,CAAC,MAChB,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;AAEpC,KAAI,EAAE,OAAO,IACX,QAAO,IACL,qBACA,wCACD;CAGH,MAAM,KAAK,OAAO,EAAE,GAAG;AACvB,KACE,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,EAEP,QAAO,IACL,kBACA,4CACD;AAEH,KAAI,OAAO,EAAE,GAAG,OAAO,EACrB,QAAO,IACL,oBACA,2CACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UACd,KAAK,QAAQ,MAAM;;AAGrB,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,IAAI,aAAa,GAAG;AAC1B,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,MAAiB;CACrB,MAAM;CACN,WACE;CACF,cAAc;CACd,SAAS,CAAC,OAAO,6BAA6B;CAC9C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"dic.js","names":["validateRc"],"sources":["../../src/sk/dic.ts"],"sourcesContent":["/**\n * IČ DPH (Identifikačné číslo pre daň z\n * pridanej hodnoty).\n *\n * Slovak VAT number. Format: \"SK\" + 10 digits.\n * The 10-digit number must be divisible by 11.\n * First digit is 1-9.\n *\n * @see https://www.financnasprava.sk/\n */\n\nimport { validate as validateRc } from \"../cz/rc\";\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string => {\n const v = clean(value, \" -\");\n if (v.startsWith(\"SK\") || v.startsWith(\"sk\")) {\n return v.slice(2);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\n \"INVALID_LENGTH\",\n \"Slovak VAT number must be 10 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Slovak VAT number must contain only digits\",\n );\n }\n // A valid birth number is also accepted as DPH\n if (validateRc(v).valid) {\n return { valid: true, compact: v };\n }\n if (v[0] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Slovak VAT number cannot start with 0\",\n );\n }\n // Third digit must be 2, 3, 4, 7, 8, or 9\n const d3 = Number(v[2]);\n if (\n d3 !== 2 &&\n d3 !== 3 &&\n d3 !== 4 &&\n d3 !== 7 &&\n d3 !== 8 &&\n d3 !== 9\n ) {\n return err(\n \"INVALID_FORMAT\",\n \"Slovak VAT number has invalid third digit\",\n );\n }\n if (Number(v) % 11 !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Slovak VAT number is not divisible by 11\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `SK${compact(value)}`;\n\n/** Generate a random valid Slovak DIČ. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(10);\n if (validate(c).valid) return c;\n }\n};\n\n/** Slovak VAT Number. */\nconst dic: CountryValidator<\"SK\"> = {\n name: \"Slovak VAT Number\",\n localName:\n \"Identifikačné číslo pre daň z pridanej hodnoty\",\n abbreviation: \"IČ DPH\",\n aliases: [\"DIČ\", \"daňové identifikačné číslo\"] as const,\n candidatePattern: \"SK\\\\d{10}\",\n scope: \"country\",\n country: \"SK\",\n entityType: \"company\",\n sourceUrl: \"https://www.financnasprava.sk/\",\n examples: [\"2021853504\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default dic;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,MAAM,WAAW,UAA0B;CACzC,MAAM,IAAI,MAAM,OAAO,IAAI;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,OAAO,EAAE,MAAM,CAAC;CAElB,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,qCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,4CACF;CAGF,IAAIA,WAAW,CAAC,EAAE,OAChB,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;CAEnC,IAAI,EAAE,OAAO,KACX,OAAO,IACL,qBACA,uCACF;CAGF,MAAM,KAAK,OAAO,EAAE,EAAE;CACtB,IACE,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,KACP,OAAO,GAEP,OAAO,IACL,kBACA,2CACF;CAEF,IAAI,OAAO,CAAC,IAAI,OAAO,GACrB,OAAO,IACL,oBACA,0CACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,EAAE;EACzB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WACE;CACF,cAAc;CACd,SAAS,CAAC,OAAO,4BAA4B;CAC7C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;AACF"}
package/dist/sk/ico.d.ts CHANGED
@@ -1,10 +1,9 @@
1
- import { Validator } from "../types.js";
1
+ import { CountryValidator } from "../types.js";
2
2
  import { compact, format, generate, validate } from "../cz/ico.js";
3
3
 
4
4
  //#region src/sk/ico.d.ts
5
-
6
5
  /** Slovak Company Identification Number. */
7
- declare const ico: Validator;
6
+ declare const ico: CountryValidator<"SK">;
8
7
  //#endregion
9
8
  export { compact, ico as default, format, generate, validate };
10
9
  //# sourceMappingURL=ico.d.ts.map
package/dist/sk/ico.js CHANGED
@@ -15,6 +15,7 @@ const ico = {
15
15
  abbreviation: "IČO",
16
16
  aliases: ["IČO", "identifikačné číslo organizácie"],
17
17
  candidatePattern: "\\d{8}",
18
+ scope: "country",
18
19
  country: "SK",
19
20
  entityType: "company",
20
21
  sourceUrl: "https://www.statistics.sk/",
@@ -1 +1 @@
1
- {"version":3,"file":"ico.js","names":[],"sources":["../../src/sk/ico.ts"],"sourcesContent":["/**\n * IČO (Identifikačné číslo organizácie).\n *\n * Slovak company identification number. Same\n * 8-digit weighted checksum as the Czech IČO.\n *\n * @see https://www.statistics.sk/\n */\n\nimport {\n compact,\n format,\n generate,\n validate,\n} from \"../cz/ico\";\nimport type { Validator } from \"../types\";\n\n/** Slovak Company Identification Number. */\nconst ico: Validator = {\n name: \"Slovak Company ID\",\n localName: \"Identifikačné číslo organizácie\",\n abbreviation: \"IČO\",\n aliases: [\n \"IČO\",\n \"identifikačné číslo organizácie\",\n ] as const,\n candidatePattern: \"\\\\d{8}\",\n country: \"SK\",\n entityType: \"company\",\n sourceUrl: \"https://www.statistics.sk/\",\n examples: [\"25123891\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ico;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;AAkBA,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,OACA,kCACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"ico.js","names":[],"sources":["../../src/sk/ico.ts"],"sourcesContent":["/**\n * IČO (Identifikačné číslo organizácie).\n *\n * Slovak company identification number. Same\n * 8-digit weighted checksum as the Czech IČO.\n *\n * @see https://www.statistics.sk/\n */\n\nimport {\n compact,\n format,\n generate,\n validate,\n} from \"../cz/ico\";\nimport type { CountryValidator } from \"../types\";\n\n/** Slovak Company Identification Number. */\nconst ico: CountryValidator<\"SK\"> = {\n name: \"Slovak Company ID\",\n localName: \"Identifikačné číslo organizácie\",\n abbreviation: \"IČO\",\n aliases: [\n \"IČO\",\n \"identifikačné číslo organizácie\",\n ] as const,\n candidatePattern: \"\\\\d{8}\",\n scope: \"country\",\n country: \"SK\",\n entityType: \"company\",\n sourceUrl: \"https://www.statistics.sk/\",\n examples: [\"25123891\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ico;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;AAkBA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,OACA,iCACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,UAAU;CACrB;CACA;CACA;CACA;AACF"}
package/dist/sk/mod.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import dic from "./dic.js";
3
2
  import ico from "./ico.js";
4
3
  import rc from "./rc.js";
5
4
 
6
5
  //#region src/sk/mod.d.ts
7
-
6
+ declare namespace mod_d_exports {
7
+ export { dic, ico, rc };
8
+ }
8
9
  //#endregion
9
10
  export { dic, ico, mod_d_exports, rc };
10
11
  //# sourceMappingURL=mod.d.ts.map
package/dist/sk/rc.d.ts CHANGED
@@ -1,10 +1,9 @@
1
- import { Validator } from "../types.js";
2
- import { compact, format, parse, validate } from "../cz/rc.js";
1
+ import { CountryValidator, ParsedPersonId } from "../types.js";
2
+ import { compact, format, generate, parse, validate } from "../cz/rc.js";
3
3
 
4
4
  //#region src/sk/rc.d.ts
5
-
6
5
  /** Slovak Birth Number. */
7
- declare const rc: Validator;
6
+ declare const rc: CountryValidator<"SK", ParsedPersonId>;
8
7
  //#endregion
9
- export { compact, rc as default, format, parse, validate };
8
+ export { compact, rc as default, format, generate, parse, validate };
10
9
  //# sourceMappingURL=rc.d.ts.map
package/dist/sk/rc.js CHANGED
@@ -1,4 +1,4 @@
1
- import { compact, format, parse, validate } from "../cz/rc.js";
1
+ import { compact, format, generate, parse, validate } from "../cz/rc.js";
2
2
  //#region src/sk/rc.ts
3
3
  /**
4
4
  * RČ (Rodné číslo).
@@ -16,15 +16,19 @@ const rc = {
16
16
  abbreviation: "RČ",
17
17
  aliases: ["rodné číslo", "RČ"],
18
18
  candidatePattern: "\\d{6}/\\d{3,4}",
19
+ scope: "country",
19
20
  country: "SK",
20
21
  entityType: "person",
21
22
  sourceUrl: "https://www.minv.sk/",
23
+ lengths: [9, 10],
22
24
  examples: ["7103192745"],
23
25
  compact,
24
26
  format,
27
+ generate,
28
+ parse,
25
29
  validate
26
30
  };
27
31
  //#endregion
28
- export { compact, rc as default, format, parse, validate };
32
+ export { compact, rc as default, format, generate, parse, validate };
29
33
 
30
34
  //# sourceMappingURL=rc.js.map
package/dist/sk/rc.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rc.js","names":[],"sources":["../../src/sk/rc.ts"],"sourcesContent":["/**\n * RČ (Rodné číslo).\n *\n * Slovak birth number. Identical algorithm to\n * the Czech birth number.\n *\n * @see https://www.mvcr.cz/mvcren/docDetail.aspx?docid=21975362&doctype=ART\n * @see https://www.minv.sk/\n */\n\nimport { compact, format, parse, validate } from \"../cz/rc\";\nimport type { Validator } from \"../types\";\n\n/** Slovak Birth Number. */\nconst rc: Validator = {\n name: \"Slovak Birth Number\",\n localName: \"Rodné číslo\",\n abbreviation: \"RČ\",\n aliases: [\"rodné číslo\", \"RČ\"] as const,\n candidatePattern: \"\\\\d{6}/\\\\d{3,4}\",\n country: \"SK\",\n entityType: \"person\",\n sourceUrl: \"https://www.minv.sk/\",\n examples: [\"7103192745\"] as const,\n compact,\n format,\n validate,\n};\n\nexport default rc;\nexport { compact, format, parse, validate };\n"],"mappings":";;;;;;;;;;;;AAcA,MAAM,KAAgB;CACpB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,eAAe,KAAK;CAC9B,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACD"}
1
+ {"version":3,"file":"rc.js","names":[],"sources":["../../src/sk/rc.ts"],"sourcesContent":["/**\n * RČ (Rodné číslo).\n *\n * Slovak birth number. Identical algorithm to\n * the Czech birth number.\n *\n * @see https://www.mvcr.cz/mvcren/docDetail.aspx?docid=21975362&doctype=ART\n * @see https://www.minv.sk/\n */\n\nimport {\n compact,\n format,\n generate,\n parse,\n validate,\n} from \"../cz/rc\";\nimport type {\n ParsedPersonId,\n CountryValidator,\n} from \"../types\";\n\n/** Slovak Birth Number. */\nconst rc: CountryValidator<\"SK\", ParsedPersonId> = {\n name: \"Slovak Birth Number\",\n localName: \"Rodné číslo\",\n abbreviation: \"RČ\",\n aliases: [\"rodné číslo\", \"RČ\"] as const,\n candidatePattern: \"\\\\d{6}/\\\\d{3,4}\",\n scope: \"country\",\n country: \"SK\",\n entityType: \"person\",\n sourceUrl: \"https://www.minv.sk/\",\n lengths: [9, 10] as const,\n examples: [\"7103192745\"] as const,\n compact,\n format,\n generate,\n parse,\n validate,\n};\n\nexport default rc;\nexport { compact, format, generate, parse, validate };\n"],"mappings":";;;;;;;;;;;;AAuBA,MAAM,KAA6C;CACjD,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,eAAe,IAAI;CAC7B,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,SAAS,CAAC,GAAG,EAAE;CACf,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;CACA;AACF"}
package/dist/th/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import tin from "./tin.js";
3
2
 
4
3
  //#region src/th/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { tin };
6
+ }
6
7
  //#endregion
7
8
  export { mod_d_exports, tin };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/th/tin.d.ts CHANGED
@@ -1,14 +1,13 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } from "../types.js";
2
2
 
3
3
  //#region src/th/tin.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;
8
7
  /** Generate a random valid Thai TIN. */
9
8
  declare const generate: () => string;
10
9
  /** Thai Tax Identification Number. */
11
- declare const tin: Validator;
10
+ declare const tin: CountryValidator<"TH">;
12
11
  //#endregion
13
12
  export { compact, tin as default, format, generate, validate };
14
13
  //# sourceMappingURL=tin.d.ts.map
package/dist/th/tin.js CHANGED
@@ -3,17 +3,6 @@ import { randomDigits, randomInt } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/th/tin.ts
6
- /**
7
- * TIN (Thai Tax Identification Number,
8
- * เลขประจำตัวผู้เสียภาษี).
9
- *
10
- * 13 digits. Individual TINs have first digit 1-8;
11
- * company TINs (MOA) start with 0. Both use a
12
- * weighted mod-11 check digit.
13
- *
14
- * @see https://www.rd.go.th/
15
- * @see https://en.wikipedia.org/wiki/Thai_identity_card
16
- */
17
6
  const compact = (value) => clean(value, " -");
18
7
  const validate = (value) => {
19
8
  const v = compact(value);
@@ -46,6 +35,7 @@ const tin = {
46
35
  abbreviation: "TIN",
47
36
  aliases: ["เลขประจำตัวผู้เสียภาษี", "TIN"],
48
37
  candidatePattern: "\\d{13}",
38
+ scope: "country",
49
39
  country: "TH",
50
40
  entityType: "any",
51
41
  description: "13-digit tax identifier for individuals and companies",
@@ -1 +1 @@
1
- {"version":3,"file":"tin.js","names":[],"sources":["../../src/th/tin.ts"],"sourcesContent":["/**\n * TIN (Thai Tax Identification Number,\n * เลขประจำตัวผู้เสียภาษี).\n *\n * 13 digits. Individual TINs have first digit 1-8;\n * company TINs (MOA) start with 0. Both use a\n * weighted mod-11 check digit.\n *\n * @see https://www.rd.go.th/\n * @see https://en.wikipedia.org/wiki/Thai_identity_card\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } 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 !== 13) {\n return err(\n \"INVALID_LENGTH\",\n \"TIN must be exactly 13 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"TIN must contain only digits\",\n );\n }\n\n // First digit: 1-8 for individuals, 0 for companies\n const first = Number(v[0]);\n if (first > 8) {\n return err(\n \"INVALID_COMPONENT\",\n \"TIN first digit must be 0-8\",\n );\n }\n\n // Mod-11 check digit (position 13)\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n sum += Number(v[i]) * (13 - i);\n }\n const check = (11 - (sum % 11)) % 10;\n if (check !== Number(v[12])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"TIN check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return (\n `${v[0]} ${v.slice(1, 5)} ` +\n `${v.slice(5, 10)} ${v.slice(10, 12)} ${v[12]}`\n );\n};\n\n/** Generate a random valid Thai TIN. */\nconst generate = (): string => {\n const first = String(randomInt(1, 8));\n const payload = first + randomDigits(11);\n let sum = 0;\n for (let i = 0; i < 12; i++)\n sum += (13 - i) * Number(payload[i]);\n return payload + String((11 - (sum % 11)) % 10);\n};\n\n/** Thai Tax Identification Number. */\nconst tin: Validator = {\n name: \"Thai Tax Identification Number\",\n localName: \"เลขประจำตัวผู้เสียภาษี\",\n abbreviation: \"TIN\",\n aliases: [\"เลขประจำตัวผู้เสียภาษี\", \"TIN\"] as const,\n candidatePattern: \"\\\\d{13}\",\n country: \"TH\",\n entityType: \"any\",\n description:\n \"13-digit tax identifier for individuals and companies\",\n sourceUrl: \"https://www.rd.go.th/\",\n lengths: [13] as const,\n examples: [\"1101700230708\", \"3100600445015\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default tin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,gCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;AAKH,KADc,OAAO,EAAE,GAAG,GACd,EACV,QAAO,IACL,qBACA,8BACD;CAIH,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IACtB,QAAO,OAAO,EAAE,GAAG,IAAI,KAAK;AAG9B,MADe,KAAM,MAAM,MAAO,OACpB,OAAO,EAAE,IAAI,CACzB,QAAO,IACL,oBACA,iCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QACE,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GACtB,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;;;AAK9C,MAAM,iBAAyB;CAE7B,MAAM,UADQ,OAAO,UAAU,GAAG,EAAE,CAAC,GACb,aAAa,GAAG;CACxC,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IACtB,SAAQ,KAAK,KAAK,OAAO,QAAQ,GAAG;AACtC,QAAO,UAAU,QAAQ,KAAM,MAAM,MAAO,GAAG;;;AAIjD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,0BAA0B,MAAM;CAC1C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,aACE;CACF,WAAW;CACX,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,iBAAiB,gBAAgB;CAC5C;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"tin.js","names":[],"sources":["../../src/th/tin.ts"],"sourcesContent":["/**\n * TIN (Thai Tax Identification Number,\n * เลขประจำตัวผู้เสียภาษี).\n *\n * 13 digits. Individual TINs have first digit 1-8;\n * company TINs (MOA) start with 0. Both use a\n * weighted mod-11 check digit.\n *\n * @see https://www.rd.go.th/\n * @see https://en.wikipedia.org/wiki/Thai_identity_card\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 13) {\n return err(\n \"INVALID_LENGTH\",\n \"TIN must be exactly 13 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"TIN must contain only digits\",\n );\n }\n\n // First digit: 1-8 for individuals, 0 for companies\n const first = Number(v[0]);\n if (first > 8) {\n return err(\n \"INVALID_COMPONENT\",\n \"TIN first digit must be 0-8\",\n );\n }\n\n // Mod-11 check digit (position 13)\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n sum += Number(v[i]) * (13 - i);\n }\n const check = (11 - (sum % 11)) % 10;\n if (check !== Number(v[12])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"TIN check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n return (\n `${v[0]} ${v.slice(1, 5)} ` +\n `${v.slice(5, 10)} ${v.slice(10, 12)} ${v[12]}`\n );\n};\n\n/** Generate a random valid Thai TIN. */\nconst generate = (): string => {\n const first = String(randomInt(1, 8));\n const payload = first + randomDigits(11);\n let sum = 0;\n for (let i = 0; i < 12; i++)\n sum += (13 - i) * Number(payload[i]);\n return payload + String((11 - (sum % 11)) % 10);\n};\n\n/** Thai Tax Identification Number. */\nconst tin: CountryValidator<\"TH\"> = {\n name: \"Thai Tax Identification Number\",\n localName: \"เลขประจำตัวผู้เสียภาษี\",\n abbreviation: \"TIN\",\n aliases: [\"เลขประจำตัวผู้เสียภาษี\", \"TIN\"] as const,\n candidatePattern: \"\\\\d{13}\",\n scope: \"country\",\n country: \"TH\",\n entityType: \"any\",\n description:\n \"13-digit tax identifier for individuals and companies\",\n sourceUrl: \"https://www.rd.go.th/\",\n lengths: [13] as const,\n examples: [\"1101700230708\", \"3100600445015\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default tin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAsBA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAKF,IADc,OAAO,EAAE,EACf,IAAI,GACV,OAAO,IACL,qBACA,6BACF;CAIF,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,OAAO,OAAO,EAAE,EAAE,KAAK,KAAK;CAG9B,KADe,KAAM,MAAM,MAAO,OACpB,OAAO,EAAE,GAAG,GACxB,OAAO,IACL,oBACA,gCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OACE,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GACtB,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE;AAE9C;;AAGA,MAAM,iBAAyB;CAE7B,MAAM,UADQ,OAAO,UAAU,GAAG,CAAC,CACf,IAAI,aAAa,EAAE;CACvC,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,QAAQ,KAAK,KAAK,OAAO,QAAQ,EAAE;CACrC,OAAO,UAAU,QAAQ,KAAM,MAAM,MAAO,EAAE;AAChD;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,0BAA0B,KAAK;CACzC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CACF,WAAW;CACX,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,iBAAiB,eAAe;CAC3C;CACA;CACA;CACA;AACF"}
package/dist/tr/mod.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import tckimlik from "./tckimlik.js";
3
2
  import vkn from "./vkn.js";
4
3
 
5
4
  //#region src/tr/mod.d.ts
6
-
5
+ declare namespace mod_d_exports {
6
+ export { tckimlik, vkn };
7
+ }
7
8
  //#endregion
8
9
  export { mod_d_exports, tckimlik, vkn };
9
10
  //# sourceMappingURL=mod.d.ts.map
@@ -1,7 +1,6 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } from "../types.js";
2
2
 
3
3
  //#region src/tr/tckimlik.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  /** TR IDs are displayed without separators. */
@@ -9,7 +8,7 @@ declare const format: (value: string) => string;
9
8
  /** Generate a random valid Turkish T.C. Kimlik No. */
10
9
  declare const generate: () => string;
11
10
  /** Turkish Personal Identification Number. */
12
- declare const tckimlik: Validator;
11
+ declare const tckimlik: CountryValidator<"TR">;
13
12
  //#endregion
14
13
  export { compact, tckimlik as default, format, generate, validate };
15
14
  //# sourceMappingURL=tckimlik.d.ts.map
@@ -3,26 +3,6 @@ import { randomDigits, randomInt } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/tr/tckimlik.ts
6
- /**
7
- * T.C. Kimlik No.
8
- * (Türkiye Cumhuriyeti Kimlik Numarası,
9
- * Turkish personal identification number).
10
- *
11
- * 11-digit unique personal ID assigned to every
12
- * Turkish citizen by MERNİS (Merkezi Nüfus İdaresi
13
- * Sistemi). The first digit is never zero. The last
14
- * two digits are check digits.
15
- *
16
- * Check digit algorithm:
17
- * Let A = sum of digits at odd positions (1,3,5,7,9)
18
- * Let B = sum of digits at even positions (2,4,6,8)
19
- * d10 = (7 * A - B) mod 10
20
- * d11 = (d1 + d2 + ... + d10) mod 10
21
- *
22
- * @see https://tckimlik.nvi.gov.tr/
23
- * @see https://en.wikipedia.org/wiki/Turkish_Identification_Number
24
- * @see https://www.turkiye.gov.tr/nvi-tckn-dogrulama
25
- */
26
6
  const compact = (value) => clean(value, " -./");
27
7
  /**
28
8
  * Calculate the two check digits from the first
@@ -64,6 +44,7 @@ const tckimlik = {
64
44
  abbreviation: "T.C. Kimlik",
65
45
  aliases: ["TC Kimlik No", "T.C. Kimlik Numarası"],
66
46
  candidatePattern: "[1-9]\\d{10}",
47
+ scope: "country",
67
48
  country: "TR",
68
49
  entityType: "person",
69
50
  sourceUrl: "https://www.nvi.gov.tr/",
@@ -1 +1 @@
1
- {"version":3,"file":"tckimlik.js","names":[],"sources":["../../src/tr/tckimlik.ts"],"sourcesContent":["/**\n * T.C. Kimlik No.\n * (Türkiye Cumhuriyeti Kimlik Numarası,\n * Turkish personal identification number).\n *\n * 11-digit unique personal ID assigned to every\n * Turkish citizen by MERNİS (Merkezi Nüfus İdaresi\n * Sistemi). The first digit is never zero. The last\n * two digits are check digits.\n *\n * Check digit algorithm:\n * Let A = sum of digits at odd positions (1,3,5,7,9)\n * Let B = sum of digits at even positions (2,4,6,8)\n * d10 = (7 * A - B) mod 10\n * d11 = (d1 + d2 + ... + d10) mod 10\n *\n * @see https://tckimlik.nvi.gov.tr/\n * @see https://en.wikipedia.org/wiki/Turkish_Identification_Number\n * @see https://www.turkiye.gov.tr/nvi-tckn-dogrulama\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string =>\n clean(value, \" -./\");\n\n/**\n * Calculate the two check digits from the first\n * nine digits of a T.C. Kimlik number.\n */\nconst calcCheckDigits = (number: string): string => {\n let oddSum = 0;\n let evenSum = 0;\n for (let i = 0; i < 9; i++) {\n const d = Number(number[i]);\n if (i % 2 === 0) {\n oddSum += d;\n } else {\n evenSum += d;\n }\n }\n const d10 = (((7 * oddSum - evenSum) % 10) + 10) % 10;\n const d11 = (oddSum + evenSum + d10) % 10;\n return `${d10}${d11}`;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"T.C. Kimlik number must be 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"T.C. Kimlik number must contain only digits\",\n );\n }\n if (v[0] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"T.C. Kimlik number cannot start with 0\",\n );\n }\n if (calcCheckDigits(v) !== v.slice(9)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"T.C. Kimlik number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\n/** TR IDs are displayed without separators. */\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Turkish T.C. Kimlik No. */\nconst generate = (): string => {\n const payload = String(randomInt(1, 9)) + randomDigits(8);\n return payload + calcCheckDigits(payload);\n};\n\n/** Turkish Personal Identification Number. */\nconst tckimlik: Validator = {\n name: \"Turkish Personal ID\",\n localName: \"T.C. Kimlik Numarası\",\n abbreviation: \"T.C. Kimlik\",\n aliases: [\n \"TC Kimlik No\",\n \"T.C. Kimlik Numarası\",\n ] as const,\n candidatePattern: \"[1-9]\\\\d{10}\",\n country: \"TR\",\n entityType: \"person\",\n sourceUrl: \"https://www.nvi.gov.tr/\",\n examples: [\"17291716060\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default tckimlik;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAM,WAAW,UACf,MAAM,OAAO,OAAO;;;;;AAMtB,MAAM,mBAAmB,WAA2B;CAClD,IAAI,SAAS;CACb,IAAI,UAAU;AACd,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,IAAI,OAAO,OAAO,GAAG;AAC3B,MAAI,IAAI,MAAM,EACZ,WAAU;MAEV,YAAW;;CAGf,MAAM,QAAS,IAAI,SAAS,WAAW,KAAM,MAAM;AAEnD,QAAO,GAAG,OADG,SAAS,UAAU,OAAO;;AAIzC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,uCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,8CACD;AAEH,KAAI,EAAE,OAAO,IACX,QAAO,IACL,qBACA,yCACD;AAEH,KAAI,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,CACnC,QAAO,IACL,oBACA,0CACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;;AAIpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;CAC7B,MAAM,UAAU,OAAO,UAAU,GAAG,EAAE,CAAC,GAAG,aAAa,EAAE;AACzD,QAAO,UAAU,gBAAgB,QAAQ;;;AAI3C,MAAM,WAAsB;CAC1B,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,gBACA,uBACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,cAAc;CACzB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"tckimlik.js","names":[],"sources":["../../src/tr/tckimlik.ts"],"sourcesContent":["/**\n * T.C. Kimlik No.\n * (Türkiye Cumhuriyeti Kimlik Numarası,\n * Turkish personal identification number).\n *\n * 11-digit unique personal ID assigned to every\n * Turkish citizen by MERNİS (Merkezi Nüfus İdaresi\n * Sistemi). The first digit is never zero. The last\n * two digits are check digits.\n *\n * Check digit algorithm:\n * Let A = sum of digits at odd positions (1,3,5,7,9)\n * Let B = sum of digits at even positions (2,4,6,8)\n * d10 = (7 * A - B) mod 10\n * d11 = (d1 + d2 + ... + d10) mod 10\n *\n * @see https://tckimlik.nvi.gov.tr/\n * @see https://en.wikipedia.org/wiki/Turkish_Identification_Number\n * @see https://www.turkiye.gov.tr/nvi-tckn-dogrulama\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -./\");\n\n/**\n * Calculate the two check digits from the first\n * nine digits of a T.C. Kimlik number.\n */\nconst calcCheckDigits = (number: string): string => {\n let oddSum = 0;\n let evenSum = 0;\n for (let i = 0; i < 9; i++) {\n const d = Number(number[i]);\n if (i % 2 === 0) {\n oddSum += d;\n } else {\n evenSum += d;\n }\n }\n const d10 = (((7 * oddSum - evenSum) % 10) + 10) % 10;\n const d11 = (oddSum + evenSum + d10) % 10;\n return `${d10}${d11}`;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"T.C. Kimlik number must be 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"T.C. Kimlik number must contain only digits\",\n );\n }\n if (v[0] === \"0\") {\n return err(\n \"INVALID_COMPONENT\",\n \"T.C. Kimlik number cannot start with 0\",\n );\n }\n if (calcCheckDigits(v) !== v.slice(9)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"T.C. Kimlik number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\n/** TR IDs are displayed without separators. */\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Turkish T.C. Kimlik No. */\nconst generate = (): string => {\n const payload = String(randomInt(1, 9)) + randomDigits(8);\n return payload + calcCheckDigits(payload);\n};\n\n/** Turkish Personal Identification Number. */\nconst tckimlik: CountryValidator<\"TR\"> = {\n name: \"Turkish Personal ID\",\n localName: \"T.C. Kimlik Numarası\",\n abbreviation: \"T.C. Kimlik\",\n aliases: [\n \"TC Kimlik No\",\n \"T.C. Kimlik Numarası\",\n ] as const,\n candidatePattern: \"[1-9]\\\\d{10}\",\n scope: \"country\",\n country: \"TR\",\n entityType: \"person\",\n sourceUrl: \"https://www.nvi.gov.tr/\",\n examples: [\"17291716060\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default tckimlik;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AA+BA,MAAM,WAAW,UACf,MAAM,OAAO,MAAM;;;;;AAMrB,MAAM,mBAAmB,WAA2B;CAClD,IAAI,SAAS;CACb,IAAI,UAAU;CACd,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,IAAI,OAAO,OAAO,EAAE;EAC1B,IAAI,IAAI,MAAM,GACZ,UAAU;OAEV,WAAW;CAEf;CACA,MAAM,QAAS,IAAI,SAAS,WAAW,KAAM,MAAM;CAEnD,OAAO,GAAG,OADG,SAAS,UAAU,OAAO;AAEzC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,sCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,6CACF;CAEF,IAAI,EAAE,OAAO,KACX,OAAO,IACL,qBACA,wCACF;CAEF,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,IACL,oBACA,yCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;;AAGA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,MAAM,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC;CACxD,OAAO,UAAU,gBAAgB,OAAO;AAC1C;;AAGA,MAAM,WAAmC;CACvC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,gBACA,sBACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
package/dist/tr/vkn.d.ts CHANGED
@@ -1,7 +1,6 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } from "../types.js";
2
2
 
3
3
  //#region src/tr/vkn.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  /** TR IDs are displayed without separators. */
@@ -9,7 +8,7 @@ declare const format: (value: string) => string;
9
8
  /** Generate a random valid Turkish VKN. */
10
9
  declare const generate: () => string;
11
10
  /** Turkish Tax Identification Number. */
12
- declare const vkn: Validator;
11
+ declare const vkn: CountryValidator<"TR">;
13
12
  //#endregion
14
13
  export { compact, vkn as default, format, generate, validate };
15
14
  //# sourceMappingURL=vkn.d.ts.map
package/dist/tr/vkn.js CHANGED
@@ -3,26 +3,6 @@ import { randomDigits } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/tr/vkn.ts
6
- /**
7
- * VKN (Vergi Kimlik Numarası, Turkish tax
8
- * identification number).
9
- *
10
- * 10-digit tax ID used for businesses in Turkey.
11
- * The last digit is a check digit.
12
- *
13
- * Check digit algorithm:
14
- * For each of the first 9 digits (right to left,
15
- * position i = 1..9):
16
- * c1 = (digit + i) mod 10
17
- * c2 = if c1 != 0: (c1 * 2^i) mod 9, or 9 if
18
- * that result is 0
19
- * sum += c2
20
- * check = (10 - sum) mod 10
21
- *
22
- * @see https://www.turkiye.gov.tr/gib-intvrg-vergi-kimlik-numarasi-dogrulama
23
- * @see https://arthurdejong.org/python-stdnum/doc/1.17/stdnum.tr.vkn
24
- * @see https://www.gib.gov.tr/
25
- */
26
6
  const compact = (value) => clean(value, " -./");
27
7
  /**
28
8
  * Calculate the check digit for the first 9 digits
@@ -64,6 +44,7 @@ const vkn = {
64
44
  abbreviation: "VKN",
65
45
  aliases: ["VKN", "Vergi Kimlik Numarası"],
66
46
  candidatePattern: "\\d{10}",
47
+ scope: "country",
67
48
  country: "TR",
68
49
  entityType: "company",
69
50
  sourceUrl: "https://www.gib.gov.tr/",
@@ -1 +1 @@
1
- {"version":3,"file":"vkn.js","names":[],"sources":["../../src/tr/vkn.ts"],"sourcesContent":["/**\n * VKN (Vergi Kimlik Numarası, Turkish tax\n * identification number).\n *\n * 10-digit tax ID used for businesses in Turkey.\n * The last digit is a check digit.\n *\n * Check digit algorithm:\n * For each of the first 9 digits (right to left,\n * position i = 1..9):\n * c1 = (digit + i) mod 10\n * c2 = if c1 != 0: (c1 * 2^i) mod 9, or 9 if\n * that result is 0\n * sum += c2\n * check = (10 - sum) mod 10\n *\n * @see https://www.turkiye.gov.tr/gib-intvrg-vergi-kimlik-numarasi-dogrulama\n * @see https://arthurdejong.org/python-stdnum/doc/1.17/stdnum.tr.vkn\n * @see https://www.gib.gov.tr/\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\n/**\n * Calculate the check digit for the first 9 digits\n * of a VKN.\n */\nconst calcCheckDigit = (number: string): string => {\n let s = 0;\n for (let i = 0; i < 9; i++) {\n const pos = 9 - i; // position 1..9 from right\n const c1 = (Number(number[i]) + pos) % 10;\n if (c1 !== 0) {\n const pow = 2 ** pos;\n const c2 = (c1 * pow) % 9 || 9;\n s += c2;\n }\n }\n return String((10 - (s % 10)) % 10);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\"INVALID_LENGTH\", \"VKN must be 10 digits\");\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"VKN must contain only digits\",\n );\n }\n if (calcCheckDigit(v) !== v[9]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"VKN check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\n/** TR IDs are displayed without separators. */\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Turkish VKN. */\nconst generate = (): string => {\n const payload = randomDigits(9);\n return payload + calcCheckDigit(payload);\n};\n\n/** Turkish Tax Identification Number. */\nconst vkn: Validator = {\n name: \"Turkish Tax ID\",\n localName: \"Vergi Kimlik Numarası\",\n abbreviation: \"VKN\",\n aliases: [\"VKN\", \"Vergi Kimlik Numarası\"] as const,\n candidatePattern: \"\\\\d{10}\",\n country: \"TR\",\n entityType: \"company\",\n sourceUrl: \"https://www.gib.gov.tr/\",\n examples: [\"4540536920\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vkn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAM,WAAW,UACf,MAAM,OAAO,OAAO;;;;;AAMtB,MAAM,kBAAkB,WAA2B;CACjD,IAAI,IAAI;AACR,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,MAAM,IAAI;EAChB,MAAM,MAAM,OAAO,OAAO,GAAG,GAAG,OAAO;AACvC,MAAI,OAAO,GAAG;GAEZ,MAAM,KAAM,KADA,KAAK,MACO,KAAK;AAC7B,QAAK;;;AAGT,QAAO,QAAQ,KAAM,IAAI,MAAO,GAAG;;AAGrC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IAAI,kBAAkB,wBAAwB;AAEvD,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;AAEH,KAAI,eAAe,EAAE,KAAK,EAAE,GAC1B,QAAO,IACL,oBACA,2BACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;;AAIpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,EAAE;AAC/B,QAAO,UAAU,eAAe,QAAQ;;;AAI1C,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,wBAAwB;CACzC,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"vkn.js","names":[],"sources":["../../src/tr/vkn.ts"],"sourcesContent":["/**\n * VKN (Vergi Kimlik Numarası, Turkish tax\n * identification number).\n *\n * 10-digit tax ID used for businesses in Turkey.\n * The last digit is a check digit.\n *\n * Check digit algorithm:\n * For each of the first 9 digits (right to left,\n * position i = 1..9):\n * c1 = (digit + i) mod 10\n * c2 = if c1 != 0: (c1 * 2^i) mod 9, or 9 if\n * that result is 0\n * sum += c2\n * check = (10 - sum) mod 10\n *\n * @see https://www.turkiye.gov.tr/gib-intvrg-vergi-kimlik-numarasi-dogrulama\n * @see https://arthurdejong.org/python-stdnum/doc/1.17/stdnum.tr.vkn\n * @see https://www.gib.gov.tr/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst compact = (value: string): string =>\n clean(value, \" -./\");\n\n/**\n * Calculate the check digit for the first 9 digits\n * of a VKN.\n */\nconst calcCheckDigit = (number: string): string => {\n let s = 0;\n for (let i = 0; i < 9; i++) {\n const pos = 9 - i; // position 1..9 from right\n const c1 = (Number(number[i]) + pos) % 10;\n if (c1 !== 0) {\n const pow = 2 ** pos;\n const c2 = (c1 * pow) % 9 || 9;\n s += c2;\n }\n }\n return String((10 - (s % 10)) % 10);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 10) {\n return err(\"INVALID_LENGTH\", \"VKN must be 10 digits\");\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"VKN must contain only digits\",\n );\n }\n if (calcCheckDigit(v) !== v[9]) {\n return err(\n \"INVALID_CHECKSUM\",\n \"VKN check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\n/** TR IDs are displayed without separators. */\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Turkish VKN. */\nconst generate = (): string => {\n const payload = randomDigits(9);\n return payload + calcCheckDigit(payload);\n};\n\n/** Turkish Tax Identification Number. */\nconst vkn: CountryValidator<\"TR\"> = {\n name: \"Turkish Tax ID\",\n localName: \"Vergi Kimlik Numarası\",\n abbreviation: \"VKN\",\n aliases: [\"VKN\", \"Vergi Kimlik Numarası\"] as const,\n candidatePattern: \"\\\\d{10}\",\n scope: \"country\",\n country: \"TR\",\n entityType: \"company\",\n sourceUrl: \"https://www.gib.gov.tr/\",\n examples: [\"4540536920\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vkn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AA+BA,MAAM,WAAW,UACf,MAAM,OAAO,MAAM;;;;;AAMrB,MAAM,kBAAkB,WAA2B;CACjD,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,MAAM,IAAI;EAChB,MAAM,MAAM,OAAO,OAAO,EAAE,IAAI,OAAO;EACvC,IAAI,OAAO,GAAG;GAEZ,MAAM,KAAM,KADA,KAAK,MACO,KAAK;GAC7B,KAAK;EACP;CACF;CACA,OAAO,QAAQ,KAAM,IAAI,MAAO,EAAE;AACpC;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IAAI,kBAAkB,uBAAuB;CAEtD,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,eAAe,CAAC,MAAM,EAAE,IAC1B,OAAO,IACL,oBACA,0BACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;;AAGA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,CAAC;CAC9B,OAAO,UAAU,eAAe,OAAO;AACzC;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,uBAAuB;CACxC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;AACF"}
package/dist/tw/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import ubn from "./ubn.js";
3
2
 
4
3
  //#region src/tw/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { ubn };
6
+ }
6
7
  //#endregion
7
8
  export { mod_d_exports, ubn };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/tw/ubn.d.ts CHANGED
@@ -1,14 +1,13 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } from "../types.js";
2
2
 
3
3
  //#region src/tw/ubn.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;
8
7
  /** Generate a random valid UBN. */
9
8
  declare const generate: () => string;
10
9
  /** Taiwanese Unified Business Number. */
11
- declare const ubn: Validator;
10
+ declare const ubn: CountryValidator<"TW">;
12
11
  //#endregion
13
12
  export { compact, ubn as default, format, generate, validate };
14
13
  //# sourceMappingURL=ubn.d.ts.map
package/dist/tw/ubn.js CHANGED
@@ -3,17 +3,6 @@ import { randomDigits } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/tw/ubn.ts
6
- /**
7
- * UBN (Unified Business Number, 統一編號).
8
- *
9
- * Taiwanese company identifier. 8 digits with a
10
- * weighted checksum. Weights [1,2,1,2,1,2,4,1];
11
- * sum the individual digits of each product, total
12
- * mod 10 must be 0. Special case: when the 7th digit
13
- * is 7, checksum 9 is also accepted.
14
- *
15
- * @see https://zh.wikipedia.org/wiki/統一編號
16
- */
17
6
  const WEIGHTS = [
18
7
  1,
19
8
  2,
@@ -39,7 +28,7 @@ const validate = (value) => {
39
28
  if (v.length !== 8) return err("INVALID_LENGTH", "UBN must be exactly 8 digits");
40
29
  if (!isdigits(v)) return err("INVALID_FORMAT", "UBN must contain only digits");
41
30
  let sum = 0;
42
- for (let i = 0; i < 8; i++) sum += digitSum(Number(v[i]) * WEIGHTS[i]);
31
+ for (const [i, weight] of WEIGHTS.entries()) sum += digitSum(Number(v[i]) * weight);
43
32
  const checksum = sum % 10;
44
33
  if (checksum === 0) return {
45
34
  valid: true,
@@ -69,6 +58,7 @@ const ubn = {
69
58
  abbreviation: "UBN",
70
59
  aliases: ["統一編號", "UBN"],
71
60
  candidatePattern: "\\d{8}",
61
+ scope: "country",
72
62
  country: "TW",
73
63
  entityType: "company",
74
64
  description: "8-digit company identifier issued by the Ministry of Economic Affairs",
@@ -1 +1 @@
1
- {"version":3,"file":"ubn.js","names":[],"sources":["../../src/tw/ubn.ts"],"sourcesContent":["/**\n * UBN (Unified Business Number, 統一編號).\n *\n * Taiwanese company identifier. 8 digits with a\n * weighted checksum. Weights [1,2,1,2,1,2,4,1];\n * sum the individual digits of each product, total\n * mod 10 must be 0. Special case: when the 7th digit\n * is 7, checksum 9 is also accepted.\n *\n * @see https://zh.wikipedia.org/wiki/統一編號\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 WEIGHTS = [1, 2, 1, 2, 1, 2, 4, 1] as const;\n\n/** Sum the individual digits of a number. */\nconst digitSum = (n: number): number => {\n let sum = 0;\n while (n > 0) {\n sum += n % 10;\n n = Math.floor(n / 10);\n }\n return sum;\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"UBN must be exactly 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"UBN must contain only digits\",\n );\n }\n\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n sum += digitSum(Number(v[i]) * WEIGHTS[i]!);\n }\n\n const checksum = sum % 10;\n if (checksum === 0) {\n return { valid: true, compact: v };\n }\n\n // Special case: when the 7th digit is 7 (product\n // 4*7=28), the checksum may be 9 instead of 0.\n if (checksum === 9 && v[6] === \"7\") {\n return { valid: true, compact: v };\n }\n\n return err(\n \"INVALID_CHECKSUM\",\n \"UBN checksum does not match\",\n );\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid UBN. */\nconst generate = (): string => {\n for (;;) {\n const prefix = randomDigits(7);\n for (let d = 0; d < 10; d++) {\n const candidate = `${prefix}${d}`;\n const r = validate(candidate);\n if (r.valid) return candidate;\n }\n }\n};\n\n/** Taiwanese Unified Business Number. */\nconst ubn: Validator = {\n name: \"Unified Business Number\",\n localName: \"統一編號\",\n abbreviation: \"UBN\",\n aliases: [\"統一編號\", \"UBN\"] as const,\n candidatePattern: \"\\\\d{8}\",\n country: \"TW\",\n entityType: \"company\",\n description:\n \"8-digit company identifier issued by the Ministry of Economic Affairs\",\n sourceUrl:\n \"https://zh.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E7%B7%A8%E8%99%9F\",\n lengths: [8] as const,\n examples: [\"00501503\", \"04595257\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ubn;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;;AAGxC,MAAM,YAAY,MAAsB;CACtC,IAAI,MAAM;AACV,QAAO,IAAI,GAAG;AACZ,SAAO,IAAI;AACX,MAAI,KAAK,MAAM,IAAI,GAAG;;AAExB,QAAO;;AAGT,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,+BACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;CAGH,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,QAAO,SAAS,OAAO,EAAE,GAAG,GAAG,QAAQ,GAAI;CAG7C,MAAM,WAAW,MAAM;AACvB,KAAI,aAAa,EACf,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;AAKpC,KAAI,aAAa,KAAK,EAAE,OAAO,IAC7B,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;AAGpC,QAAO,IACL,oBACA,8BACD;;AAGH,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,SAAS,aAAa,EAAE;AAC9B,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;GAC3B,MAAM,YAAY,GAAG,SAAS;AAE9B,OADU,SAAS,UAAU,CACvB,MAAO,QAAO;;;;;AAM1B,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,MAAM;CACxB,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,aACE;CACF,WACE;CACF,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,YAAY,WAAW;CAClC;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"ubn.js","names":[],"sources":["../../src/tw/ubn.ts"],"sourcesContent":["/**\n * UBN (Unified Business Number, 統一編號).\n *\n * Taiwanese company identifier. 8 digits with a\n * weighted checksum. Weights [1,2,1,2,1,2,4,1];\n * sum the individual digits of each product, total\n * mod 10 must be 0. Special case: when the 7th digit\n * is 7, checksum 9 is also accepted.\n *\n * @see https://zh.wikipedia.org/wiki/統一編號\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [1, 2, 1, 2, 1, 2, 4, 1] as const;\n\n/** Sum the individual digits of a number. */\nconst digitSum = (n: number): number => {\n let sum = 0;\n while (n > 0) {\n sum += n % 10;\n n = Math.floor(n / 10);\n }\n return sum;\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"UBN must be exactly 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"UBN must contain only digits\",\n );\n }\n\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += digitSum(Number(v[i]) * weight);\n }\n\n const checksum = sum % 10;\n if (checksum === 0) {\n return { valid: true, compact: v };\n }\n\n // Special case: when the 7th digit is 7 (product\n // 4*7=28), the checksum may be 9 instead of 0.\n if (checksum === 9 && v[6] === \"7\") {\n return { valid: true, compact: v };\n }\n\n return err(\n \"INVALID_CHECKSUM\",\n \"UBN checksum does not match\",\n );\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid UBN. */\nconst generate = (): string => {\n for (;;) {\n const prefix = randomDigits(7);\n for (let d = 0; d < 10; d++) {\n const candidate = `${prefix}${d}`;\n const r = validate(candidate);\n if (r.valid) return candidate;\n }\n }\n};\n\n/** Taiwanese Unified Business Number. */\nconst ubn: CountryValidator<\"TW\"> = {\n name: \"Unified Business Number\",\n localName: \"統一編號\",\n abbreviation: \"UBN\",\n aliases: [\"統一編號\", \"UBN\"] as const,\n candidatePattern: \"\\\\d{8}\",\n scope: \"country\",\n country: \"TW\",\n entityType: \"company\",\n description:\n \"8-digit company identifier issued by the Ministry of Economic Affairs\",\n sourceUrl:\n \"https://zh.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E7%B7%A8%E8%99%9F\",\n lengths: [8] as const,\n examples: [\"00501503\", \"04595257\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ubn;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;AAsBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;;AAGvC,MAAM,YAAY,MAAsB;CACtC,IAAI,MAAM;CACV,OAAO,IAAI,GAAG;EACZ,OAAO,IAAI;EACX,IAAI,KAAK,MAAM,IAAI,EAAE;CACvB;CACA,OAAO;AACT;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAGF,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GACxC,OAAO,SAAS,OAAO,EAAE,EAAE,IAAI,MAAM;CAGvC,MAAM,WAAW,MAAM;CACvB,IAAI,aAAa,GACf,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;CAKnC,IAAI,aAAa,KAAK,EAAE,OAAO,KAC7B,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;CAGnC,OAAO,IACL,oBACA,6BACF;AACF;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,SAAS,aAAa,CAAC;EAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;GAC3B,MAAM,YAAY,GAAG,SAAS;GAE9B,IADU,SAAS,SACf,EAAE,OAAO,OAAO;EACtB;CACF;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,KAAK;CACvB,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aACE;CACF,WACE;CACF,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,YAAY,UAAU;CACjC;CACA;CACA;CACA;AACF"}
package/dist/types.d.ts CHANGED
@@ -17,24 +17,39 @@ type ValidateResult = {
17
17
  error: StdnumError;
18
18
  };
19
19
  /**
20
- * Structured data extracted from a personal ID number.
21
- * Returned by `parse()` on validators that encode
22
- * birth date and gender.
20
+ * Structured data extracted from an identifier that
21
+ * encodes a birth date.
23
22
  */
24
- type ParsedPersonId = {
23
+ type ParsedBirthDate = {
25
24
  birthDate: Date;
25
+ };
26
+ /**
27
+ * Structured data extracted from a personal ID number
28
+ * that also encodes gender.
29
+ */
30
+ type ParsedPersonId = ParsedBirthDate & {
26
31
  gender: "male" | "female";
27
32
  };
28
- type Validator = {
29
- /** English name. */
30
- name: string;
31
- /** Name in the local language. */
32
- localName: string;
33
- /** Common abbreviation (e.g. "IČO"). */
34
- abbreviation: string;
35
- /** Country this identifier belongs to. */
36
- country?: CountryCode;
37
- /** What kind of entity this identifies. */
33
+ type ParsedIdentifier = ParsedBirthDate | ParsedPersonId;
34
+ /**
35
+ * Whether an identifier is scoped to a single
36
+ * country (e.g. Czech IČO) or is cross-border by
37
+ * design (e.g. IBAN, ISIN, BIC, LEI, EU VAT).
38
+ *
39
+ * Modeled as a discriminated union so consumers
40
+ * can group, filter, and exhaustively switch
41
+ * without null-checking `country`.
42
+ */
43
+ type ValidatorScope = {
44
+ scope: "country";
45
+ country: CountryCode;
46
+ } | {
47
+ scope: "global";
48
+ };
49
+ type ValidatorBase<TParsed extends ParsedIdentifier | undefined = undefined> = {
50
+ /** English name. */name: string; /** Name in the local language. */
51
+ localName: string; /** Common abbreviation (e.g. "IČO"). */
52
+ abbreviation: string; /** What kind of entity this identifies. */
38
53
  entityType: "person" | "company" | "any";
39
54
  /**
40
55
  * Strip separators and normalize to a
@@ -51,12 +66,9 @@ type Validator = {
51
66
  * compact form on success, or an error
52
67
  * with a code and message on failure.
53
68
  */
54
- validate: (value: string) => ValidateResult;
55
- /** One-liner describing the identifier. */
56
- description?: string;
57
- /** URL to official authority or spec page. */
58
- sourceUrl?: string;
59
- /** Valid lengths of the compact form. */
69
+ validate: (value: string) => ValidateResult; /** One-liner describing the identifier. */
70
+ description?: string; /** URL to official authority or spec page. */
71
+ sourceUrl?: string; /** Valid lengths of the compact form. */
60
72
  lengths?: readonly number[];
61
73
  /**
62
74
  * Known-valid compact values. Useful as test
@@ -89,7 +101,30 @@ type Validator = {
89
101
  * passed to validate() for confirmation.
90
102
  */
91
103
  candidatePattern?: string;
104
+ /**
105
+ * Extract structured data (e.g. birth date,
106
+ * gender) from a known-valid identifier.
107
+ * Available on personal IDs that encode such
108
+ * data. Returns null if the input cannot be
109
+ * parsed.
110
+ *
111
+ * On the base `Validator` type this is optional
112
+ * with a widened return; narrow it by typing the
113
+ * validator as `Validator<ParsedPersonId>` etc.
114
+ */
115
+ parse?: (value: string) => ParsedIdentifier | null;
116
+ } & ([TParsed] extends [undefined] ? unknown : {
117
+ parse: (value: string) => TParsed | null;
118
+ });
119
+ type CountryValidator<TCountry extends CountryCode = CountryCode, TParsed extends ParsedIdentifier | undefined = undefined> = ValidatorBase<TParsed> & {
120
+ scope: "country";
121
+ country: TCountry;
122
+ };
123
+ type GlobalValidator<TParsed extends ParsedIdentifier | undefined = undefined> = ValidatorBase<TParsed> & {
124
+ scope: "global";
92
125
  };
126
+ type Validator<TParsed extends ParsedIdentifier | undefined = undefined> = CountryValidator<CountryCode, TParsed> | GlobalValidator<TParsed>;
127
+ type ParsableValidator<TParsed extends ParsedIdentifier = ParsedIdentifier> = Validator<TParsed>;
93
128
  //#endregion
94
- export { CountryCode, ErrorCode, ParsedPersonId, StdnumError, ValidateResult, Validator };
129
+ export { CountryCode, CountryValidator, ErrorCode, GlobalValidator, ParsableValidator, ParsedBirthDate, ParsedIdentifier, ParsedPersonId, StdnumError, ValidateResult, Validator, ValidatorScope };
95
130
  //# sourceMappingURL=types.d.ts.map
@@ -1,14 +1,13 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } from "../types.js";
2
2
 
3
3
  //#region src/ua/edrpou.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;
8
7
  /** Generate a random valid Ukrainian EDRPOU. */
9
8
  declare const generate: () => string;
10
9
  /** Ukrainian Company Register Number. */
11
- declare const edrpou: Validator;
10
+ declare const edrpou: CountryValidator<"UA">;
12
11
  //#endregion
13
12
  export { compact, edrpou as default, format, generate, validate };
14
13
  //# sourceMappingURL=edrpou.d.ts.map