@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":"pin.js","names":[],"sources":["../../src/ge/pin.ts"],"sourcesContent":["/** Generate a random valid Georgian PIN (11-digit). */\nconst generate = (): string => randomDigits(11);\n\n/**\n * PIN (Personal Identification Number, პირადი ნომერი).\n *\n * Georgian personal identification number issued by the\n * Public Service Development Agency. Citizens receive an\n * 11-digit number (also used as TIN); non-citizens and\n * entities receive a 9-digit number. The number is a\n * serial with no embedded semantics and no publicly\n * documented checksum algorithm.\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Georgia-TIN.pdf\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, \" -\").trim();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 9 && v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Georgian PIN must be 9 or 11 digits\",\n );\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Georgian PIN must contain only digits\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Georgian Personal Identification Number. */\nconst pin: Validator = {\n name: \"Georgian Personal ID\",\n localName: \"პირადი ნომერი\",\n abbreviation: \"PIN\",\n aliases: [\"პირადი ნომერი\", \"PIN\"] as const,\n candidatePattern: \"\\\\d{11}\",\n country: \"GE\",\n entityType: \"any\",\n lengths: [9, 11] as const,\n examples: [\"010043120\", \"01024030303\"] as const,\n compact,\n format,\n validate,\n sourceUrl:\n \"https://www.oecd.org/tax/automatic-exchange/\" +\n \"crs-implementation-and-assistance/\" +\n \"tax-identification-numbers/Georgia-TIN.pdf\",\n generate,\n};\n\nexport default pin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;AACA,MAAM,iBAAyB,aAAa,GAAG;AAsB/C,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,MAAM;AAE3B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,GACjC,QAAO,IACL,kBACA,sCACD;AAGH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,wCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,iBAAiB,MAAM;CACjC,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG,GAAG;CAChB,UAAU,CAAC,aAAa,cAAc;CACtC;CACA;CACA;CACA,WACE;CAGF;CACD"}
1
+ {"version":3,"file":"pin.js","names":[],"sources":["../../src/ge/pin.ts"],"sourcesContent":["/** Generate a random valid Georgian PIN (11-digit). */\nconst generate = (): string => randomDigits(11);\n\n/**\n * PIN (Personal Identification Number, პირადი ნომერი).\n *\n * Georgian personal identification number issued by the\n * Public Service Development Agency. Citizens receive an\n * 11-digit number (also used as TIN); non-citizens and\n * entities receive a 9-digit number. The number is a\n * serial with no embedded semantics and no publicly\n * documented checksum algorithm.\n *\n * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Georgia-TIN.pdf\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, \" -\").trim();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 9 && v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Georgian PIN must be 9 or 11 digits\",\n );\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Georgian PIN must contain only digits\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Georgian Personal Identification Number. */\nconst pin: CountryValidator<\"GE\"> = {\n name: \"Georgian Personal ID\",\n localName: \"პირადი ნომერი\",\n abbreviation: \"PIN\",\n aliases: [\"პირადი ნომერი\", \"PIN\"] as const,\n candidatePattern: \"\\\\d{11}\",\n scope: \"country\",\n country: \"GE\",\n entityType: \"any\",\n lengths: [9, 11] as const,\n examples: [\"010043120\", \"01024030303\"] as const,\n compact,\n format,\n validate,\n sourceUrl:\n \"https://www.oecd.org/tax/automatic-exchange/\" +\n \"crs-implementation-and-assistance/\" +\n \"tax-identification-numbers/Georgia-TIN.pdf\",\n generate,\n};\n\nexport default pin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AACA,MAAM,iBAAyB,aAAa,EAAE;AAyB9C,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,EAAE,KAAK;AAE1B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,KAAK,EAAE,WAAW,IACjC,OAAO,IACL,kBACA,qCACF;CAGF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,uCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,iBAAiB,KAAK;CAChC,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG,EAAE;CACf,UAAU,CAAC,aAAa,aAAa;CACrC;CACA;CACA;CACA,WACE;CAGF;AACF"}
package/dist/gh/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/gh/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/gh/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/gh/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 Ghana TIN. */
9
8
  declare const generate: () => string;
10
9
  /** Ghanaian Tax Identification Number. */
11
- declare const tin: Validator;
10
+ declare const tin: CountryValidator<"GH">;
12
11
  //#endregion
13
12
  export { compact, tin as default, format, generate, validate };
14
13
  //# sourceMappingURL=tin.d.ts.map
package/dist/gh/tin.js CHANGED
@@ -1,22 +1,7 @@
1
1
  import { clean } from "../_util/clean.js";
2
- import { randomDigits, randomInt } from "../_util/generate.js";
2
+ import { randomDigits, randomPick } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  //#region src/gh/tin.ts
5
- /**
6
- * TIN (Tax Identification Number, Ghana).
7
- *
8
- * 11-character alphanumeric identifier. Structure:
9
- * - Position 1: type prefix (P/C/G/Q/V)
10
- * - Positions 2-3: always "00"
11
- * - Positions 4-10: digits
12
- * - Position 11: check digit (0-9 or X)
13
- *
14
- * Prefixes: P = individual, C = company,
15
- * G = government, Q = foreign mission,
16
- * V = public institution / trust.
17
- *
18
- * @see https://gra.gov.gh/
19
- */
20
5
  const FORMAT_RE = /^[PCGQV]00[0-9]{7}[0-9X]$/;
21
6
  const compact = (value) => clean(value, " ").toUpperCase();
22
7
  /**
@@ -41,17 +26,17 @@ const validate = (value) => {
41
26
  };
42
27
  };
43
28
  const format = (value) => compact(value);
29
+ const TIN_PREFIXES = [
30
+ "P",
31
+ "C",
32
+ "G",
33
+ "Q",
34
+ "V"
35
+ ];
44
36
  /** Generate a random valid Ghana TIN. */
45
37
  const generate = () => {
46
- const prefixes = [
47
- "P",
48
- "C",
49
- "G",
50
- "Q",
51
- "V"
52
- ];
53
38
  for (;;) {
54
- const partial = prefixes[randomInt(0, 4)] + randomDigits(9);
39
+ const partial = randomPick(TIN_PREFIXES) + randomDigits(9);
55
40
  const c = partial + calcCheckDigit(partial);
56
41
  if (validate(c).valid) return c;
57
42
  }
@@ -63,6 +48,7 @@ const tin = {
63
48
  abbreviation: "TIN",
64
49
  aliases: ["TIN", "Tax Identification Number"],
65
50
  candidatePattern: "[A-Z]\\d{9,10}",
51
+ scope: "country",
66
52
  country: "GH",
67
53
  entityType: "any",
68
54
  compact,
@@ -1 +1 @@
1
- {"version":3,"file":"tin.js","names":[],"sources":["../../src/gh/tin.ts"],"sourcesContent":["/**\n * TIN (Tax Identification Number, Ghana).\n *\n * 11-character alphanumeric identifier. Structure:\n * - Position 1: type prefix (P/C/G/Q/V)\n * - Positions 2-3: always \"00\"\n * - Positions 4-10: digits\n * - Position 11: check digit (0-9 or X)\n *\n * Prefixes: P = individual, C = company,\n * G = government, Q = foreign mission,\n * V = public institution / trust.\n *\n * @see https://gra.gov.gh/\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 FORMAT_RE = /^[PCGQV]00[0-9]{7}[0-9X]$/;\n\nconst compact = (value: string): string =>\n clean(value, \" \").toUpperCase();\n\n/**\n * Calculate the expected check digit.\n * Uses positions 1-9 (0-indexed) with weights 1-9,\n * mod 11. Returns \"X\" when the remainder is 10.\n */\nconst calcCheckDigit = (value: string): string => {\n let sum = 0;\n for (let i = 1; i <= 9; i++) {\n sum += i * Number(value[i]);\n }\n const check = sum % 11;\n return check === 10 ? \"X\" : String(check);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Ghanaian TIN must be exactly 11 characters\",\n );\n }\n if (!FORMAT_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Ghanaian TIN must match [PCGQV]00 + \" +\n \"7 digits + check digit\",\n );\n }\n if (v[10] !== calcCheckDigit(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Ghanaian TIN 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 Ghana TIN. */\nconst generate = (): string => {\n const prefixes = [\"P\", \"C\", \"G\", \"Q\", \"V\"] as const;\n for (;;) {\n const p = prefixes[randomInt(0, 4)]!;\n const d = randomDigits(9);\n const partial = p + d;\n const c = partial + calcCheckDigit(partial);\n if (validate(c).valid) return c;\n }\n};\n\n/** Ghanaian Tax Identification Number. */\nconst tin: Validator = {\n name: \"Ghanaian Tax Identification Number\",\n localName: \"Tax Identification Number\",\n abbreviation: \"TIN\",\n aliases: [\"TIN\", \"Tax Identification Number\"] as const,\n candidatePattern: \"[A-Z]\\\\d{9,10}\",\n country: \"GH\",\n entityType: \"any\",\n compact,\n format,\n validate,\n description: \"Ghanaian tax identification number\",\n sourceUrl: \"https://gra.gov.gh/\",\n lengths: [11] as const,\n examples: [\"C0000803561\"] as const,\n generate,\n};\n\nexport default tin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAsBA,MAAM,YAAY;AAElB,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,CAAC,aAAa;;;;;;AAOjC,MAAM,kBAAkB,UAA0B;CAChD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,IACtB,QAAO,IAAI,OAAO,MAAM,GAAG;CAE7B,MAAM,QAAQ,MAAM;AACpB,QAAO,UAAU,KAAK,MAAM,OAAO,MAAM;;AAG3C,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,6CACD;AAEH,KAAI,CAAC,UAAU,KAAK,EAAE,CACpB,QAAO,IACL,kBACA,6DAED;AAEH,KAAI,EAAE,QAAQ,eAAe,EAAE,CAC7B,QAAO,IACL,oBACA,oCACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;CAC7B,MAAM,WAAW;EAAC;EAAK;EAAK;EAAK;EAAK;EAAI;AAC1C,UAAS;EAGP,MAAM,UAFI,SAAS,UAAU,GAAG,EAAE,IACxB,aAAa,EAAE;EAEzB,MAAM,IAAI,UAAU,eAAe,QAAQ;AAC3C,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,4BAA4B;CAC7C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ;CACA;CACA;CACA,aAAa;CACb,WAAW;CACX,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,cAAc;CACzB;CACD"}
1
+ {"version":3,"file":"tin.js","names":[],"sources":["../../src/gh/tin.ts"],"sourcesContent":["/**\n * TIN (Tax Identification Number, Ghana).\n *\n * 11-character alphanumeric identifier. Structure:\n * - Position 1: type prefix (P/C/G/Q/V)\n * - Positions 2-3: always \"00\"\n * - Positions 4-10: digits\n * - Position 11: check digit (0-9 or X)\n *\n * Prefixes: P = individual, C = company,\n * G = government, Q = foreign mission,\n * V = public institution / trust.\n *\n * @see https://gra.gov.gh/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\n\nconst FORMAT_RE = /^[PCGQV]00[0-9]{7}[0-9X]$/;\n\nconst compact = (value: string): string =>\n clean(value, \" \").toUpperCase();\n\n/**\n * Calculate the expected check digit.\n * Uses positions 1-9 (0-indexed) with weights 1-9,\n * mod 11. Returns \"X\" when the remainder is 10.\n */\nconst calcCheckDigit = (value: string): string => {\n let sum = 0;\n for (let i = 1; i <= 9; i++) {\n sum += i * Number(value[i]);\n }\n const check = sum % 11;\n return check === 10 ? \"X\" : String(check);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Ghanaian TIN must be exactly 11 characters\",\n );\n }\n if (!FORMAT_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Ghanaian TIN must match [PCGQV]00 + \" +\n \"7 digits + check digit\",\n );\n }\n if (v[10] !== calcCheckDigit(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Ghanaian TIN check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\nconst TIN_PREFIXES = [\"P\", \"C\", \"G\", \"Q\", \"V\"] as const;\n\n/** Generate a random valid Ghana TIN. */\nconst generate = (): string => {\n for (;;) {\n const p = randomPick(TIN_PREFIXES);\n const d = randomDigits(9);\n const partial = p + d;\n const c = partial + calcCheckDigit(partial);\n if (validate(c).valid) return c;\n }\n};\n\n/** Ghanaian Tax Identification Number. */\nconst tin: CountryValidator<\"GH\"> = {\n name: \"Ghanaian Tax Identification Number\",\n localName: \"Tax Identification Number\",\n abbreviation: \"TIN\",\n aliases: [\"TIN\", \"Tax Identification Number\"] as const,\n candidatePattern: \"[A-Z]\\\\d{9,10}\",\n scope: \"country\",\n country: \"GH\",\n entityType: \"any\",\n compact,\n format,\n validate,\n description: \"Ghanaian tax identification number\",\n sourceUrl: \"https://gra.gov.gh/\",\n lengths: [11] as const,\n examples: [\"C0000803561\"] as const,\n generate,\n};\n\nexport default tin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;AAyBA,MAAM,YAAY;AAElB,MAAM,WAAW,UACf,MAAM,OAAO,GAAG,EAAE,YAAY;;;;;;AAOhC,MAAM,kBAAkB,UAA0B;CAChD,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KACtB,OAAO,IAAI,OAAO,MAAM,EAAE;CAE5B,MAAM,QAAQ,MAAM;CACpB,OAAO,UAAU,KAAK,MAAM,OAAO,KAAK;AAC1C;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,4CACF;CAEF,IAAI,CAAC,UAAU,KAAK,CAAC,GACnB,OAAO,IACL,kBACA,4DAEF;CAEF,IAAI,EAAE,QAAQ,eAAe,CAAC,GAC5B,OAAO,IACL,oBACA,mCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;AAEvD,MAAM,eAAe;CAAC;CAAK;CAAK;CAAK;CAAK;AAAG;;AAG7C,MAAM,iBAAyB;CAC7B,SAAS;EAGP,MAAM,UAFI,WAAW,YAEL,IADN,aAAa,CACH;EACpB,MAAM,IAAI,UAAU,eAAe,OAAO;EAC1C,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,2BAA2B;CAC5C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ;CACA;CACA;CACA,aAAa;CACb,WAAW;CACX,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,aAAa;CACxB;AACF"}
package/dist/gr/amka.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/gr/amka.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 Greek AMKA. */
9
8
  declare const generate: () => string;
10
9
  /** Greek Social Security Number. */
11
- declare const amka: Validator;
10
+ declare const amka: CountryValidator<"GR">;
12
11
  //#endregion
13
12
  export { compact, amka as default, format, generate, validate };
14
13
  //# sourceMappingURL=amka.d.ts.map
package/dist/gr/amka.js CHANGED
@@ -1,19 +1,10 @@
1
+ import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
1
2
  import { clean } from "../_util/clean.js";
3
+ import { isValidDate } from "../_util/date.js";
2
4
  import { randomDigits, randomInt } from "../_util/generate.js";
3
5
  import { err } from "../_util/result.js";
4
- import { luhnChecksum, luhnValidate } from "../_checksums/luhn.js";
5
6
  import { isdigits } from "../_util/strings.js";
6
- import { isValidDate } from "../_util/date.js";
7
7
  //#region src/gr/amka.ts
8
- /**
9
- * AMKA (Αριθμός Μητρώου Κοινωνικής Ασφάλισης).
10
- *
11
- * Greek social security number. 11 digits where the
12
- * first 6 are DDMMYY, followed by 4-digit serial and
13
- * a Luhn check digit.
14
- *
15
- * @see https://www.amka.gr/
16
- */
17
8
  const compact = (value) => clean(value, " -");
18
9
  const validate = (value) => {
19
10
  const v = compact(value);
@@ -56,6 +47,7 @@ const amka = {
56
47
  "AMKA"
57
48
  ],
58
49
  candidatePattern: "\\d{11}",
50
+ scope: "country",
59
51
  country: "GR",
60
52
  entityType: "person",
61
53
  sourceUrl: "https://www.amka.gr/",
@@ -1 +1 @@
1
- {"version":3,"file":"amka.js","names":[],"sources":["../../src/gr/amka.ts"],"sourcesContent":["/**\n * AMKA (Αριθμός Μητρώου Κοινωνικής Ασφάλισης).\n *\n * Greek social security number. 11 digits where the\n * first 6 are DDMMYY, followed by 4-digit serial and\n * a Luhn check digit.\n *\n * @see https://www.amka.gr/\n */\n\nimport {\n luhnValidate,\n luhnChecksum,\n} from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\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 !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"AMKA must be exactly 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"AMKA must contain only digits\",\n );\n }\n\n const dd = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const yy = Number(v.slice(4, 6));\n\n // AMKA doesn't encode century explicitly;\n // validate the date for both 1900s and 2000s\n const valid1900 = isValidDate(1900 + yy, mm, dd);\n const valid2000 = isValidDate(2000 + yy, mm, dd);\n if (!valid1900 && !valid2000) {\n return err(\n \"INVALID_COMPONENT\",\n \"AMKA contains an invalid date\",\n );\n }\n\n if (!luhnValidate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"AMKA Luhn check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Greek AMKA. */\nconst generate = (): string => {\n for (;;) {\n const dd = String(randomInt(1, 28)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n const yy = String(randomInt(50, 99)).padStart(2, \"0\");\n const serial = randomDigits(4);\n const payload = dd + mm + yy + serial;\n const cs = luhnChecksum(payload + \"0\");\n const c = payload + String((10 - cs) % 10);\n if (validate(c).valid) return c;\n }\n};\n\n/** Greek Social Security Number. */\nconst amka: Validator = {\n name: \"Greek Social Security Number\",\n localName: \"Αριθμός Μητρώου Κοινωνικής Ασφάλισης\",\n abbreviation: \"ΑΜΚΑ\",\n aliases: [\n \"ΑΜΚΑ\",\n \"Αριθμός Μητρώου Κοινωνικής Ασφάλισης\",\n \"AMKA\",\n ] as const,\n candidatePattern: \"\\\\d{11}\",\n country: \"GR\",\n entityType: \"person\",\n sourceUrl: \"https://www.amka.gr/\",\n examples: [\"01013099997\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default amka;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,iCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,gCACD;CAGH,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAChC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CAIhC,MAAM,YAAY,YAAY,OAAO,IAAI,IAAI,GAAG;CAChD,MAAM,YAAY,YAAY,MAAO,IAAI,IAAI,GAAG;AAChD,KAAI,CAAC,aAAa,CAAC,UACjB,QAAO,IACL,qBACA,gCACD;AAGH,KAAI,CAAC,aAAa,EAAE,CAClB,QAAO,IACL,oBACA,uCACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,KAAK,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACpD,MAAM,KAAK,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACpD,MAAM,KAAK,OAAO,UAAU,IAAI,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;EACrD,MAAM,SAAS,aAAa,EAAE;EAC9B,MAAM,UAAU,KAAK,KAAK,KAAK;EAC/B,MAAM,KAAK,aAAa,UAAU,IAAI;EACtC,MAAM,IAAI,UAAU,QAAQ,KAAK,MAAM,GAAG;AAC1C,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,cAAc;CACzB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"amka.js","names":[],"sources":["../../src/gr/amka.ts"],"sourcesContent":["/**\n * AMKA (Αριθμός Μητρώου Κοινωνικής Ασφάλισης).\n *\n * Greek social security number. 11 digits where the\n * first 6 are DDMMYY, followed by 4-digit serial and\n * a Luhn check digit.\n *\n * @see https://www.amka.gr/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport {\n luhnValidate,\n luhnChecksum,\n} from \"#checksums/luhn\";\nimport { clean } from \"#util/clean\";\nimport { isValidDate } from \"#util/date\";\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 !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"AMKA must be exactly 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"AMKA must contain only digits\",\n );\n }\n\n const dd = Number(v.slice(0, 2));\n const mm = Number(v.slice(2, 4));\n const yy = Number(v.slice(4, 6));\n\n // AMKA doesn't encode century explicitly;\n // validate the date for both 1900s and 2000s\n const valid1900 = isValidDate(1900 + yy, mm, dd);\n const valid2000 = isValidDate(2000 + yy, mm, dd);\n if (!valid1900 && !valid2000) {\n return err(\n \"INVALID_COMPONENT\",\n \"AMKA contains an invalid date\",\n );\n }\n\n if (!luhnValidate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"AMKA Luhn check digit does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Greek AMKA. */\nconst generate = (): string => {\n for (;;) {\n const dd = String(randomInt(1, 28)).padStart(2, \"0\");\n const mm = String(randomInt(1, 12)).padStart(2, \"0\");\n const yy = String(randomInt(50, 99)).padStart(2, \"0\");\n const serial = randomDigits(4);\n const payload = dd + mm + yy + serial;\n const cs = luhnChecksum(payload + \"0\");\n const c = payload + String((10 - cs) % 10);\n if (validate(c).valid) return c;\n }\n};\n\n/** Greek Social Security Number. */\nconst amka: CountryValidator<\"GR\"> = {\n name: \"Greek Social Security Number\",\n localName: \"Αριθμός Μητρώου Κοινωνικής Ασφάλισης\",\n abbreviation: \"ΑΜΚΑ\",\n aliases: [\n \"ΑΜΚΑ\",\n \"Αριθμός Μητρώου Κοινωνικής Ασφάλισης\",\n \"AMKA\",\n ] as const,\n candidatePattern: \"\\\\d{11}\",\n scope: \"country\",\n country: \"GR\",\n entityType: \"person\",\n sourceUrl: \"https://www.amka.gr/\",\n examples: [\"01013099997\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default amka;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;AAyBA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,gCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,+BACF;CAGF,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAI/B,MAAM,YAAY,YAAY,OAAO,IAAI,IAAI,EAAE;CAC/C,MAAM,YAAY,YAAY,MAAO,IAAI,IAAI,EAAE;CAC/C,IAAI,CAAC,aAAa,CAAC,WACjB,OAAO,IACL,qBACA,+BACF;CAGF,IAAI,CAAC,aAAa,CAAC,GACjB,OAAO,IACL,oBACA,sCACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,GAAG,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACnD,MAAM,KAAK,OAAO,UAAU,IAAI,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG;EACpD,MAAM,SAAS,aAAa,CAAC;EAC7B,MAAM,UAAU,KAAK,KAAK,KAAK;EAC/B,MAAM,KAAK,aAAa,UAAU,GAAG;EACrC,MAAM,IAAI,UAAU,QAAQ,KAAK,MAAM,EAAE;EACzC,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,OAA+B;CACnC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
package/dist/gr/mod.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import amka from "./amka.js";
3
2
  import vat from "./vat.js";
4
3
 
5
4
  //#region src/gr/mod.d.ts
6
-
5
+ declare namespace mod_d_exports {
6
+ export { amka, vat };
7
+ }
7
8
  //#endregion
8
9
  export { amka, mod_d_exports, vat };
9
10
  //# sourceMappingURL=mod.d.ts.map
package/dist/gr/vat.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/gr/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;
8
7
  /** Generate a random valid Greek VAT number. */
9
8
  declare const generate: () => string;
10
9
  /** Greek VAT Number. */
11
- declare const vat: Validator;
10
+ declare const vat: CountryValidator<"GR">;
12
11
  //#endregion
13
12
  export { compact, vat as default, format, generate, validate };
14
13
  //# sourceMappingURL=vat.d.ts.map
package/dist/gr/vat.js CHANGED
@@ -3,16 +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/gr/vat.ts
6
- /**
7
- * ΑΦΜ (Greek VAT number).
8
- *
9
- * 9 digits. 8-digit numbers are zero-padded.
10
- * Iterative checksum: cs = 0; for each d[0..7]:
11
- * cs = cs*2 + d; check = (cs*2) % 11 % 10 == d[8].
12
- *
13
- * @see https://www.vatify.eu/greece-vat-number.html
14
- * @see https://www.aade.gr/
15
- */
16
6
  const compact = (value) => {
17
7
  let v = clean(value, " -/.");
18
8
  if (v.startsWith("EL") || v.startsWith("el")) v = v.slice(2);
@@ -51,6 +41,7 @@ const vat = {
51
41
  "AFM"
52
42
  ],
53
43
  candidatePattern: "EL\\d{9}",
44
+ scope: "country",
54
45
  country: "GR",
55
46
  entityType: "any",
56
47
  sourceUrl: "https://www.aade.gr/",
@@ -1 +1 @@
1
- {"version":3,"file":"vat.js","names":[],"sources":["../../src/gr/vat.ts"],"sourcesContent":["/**\n * ΑΦΜ (Greek VAT number).\n *\n * 9 digits. 8-digit numbers are zero-padded.\n * Iterative checksum: cs = 0; for each d[0..7]:\n * cs = cs*2 + d; check = (cs*2) % 11 % 10 == d[8].\n *\n * @see https://www.vatify.eu/greece-vat-number.html\n * @see https://www.aade.gr/\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 let v = clean(value, \" -/.\");\n if (v.startsWith(\"EL\") || v.startsWith(\"el\")) {\n v = v.slice(2);\n }\n if (v.startsWith(\"GR\") || v.startsWith(\"gr\")) {\n v = v.slice(2);\n }\n // Zero-pad 8-digit numbers\n if (v.length === 8) {\n v = `0${v}`;\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Greek VAT number must be 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Greek VAT number must contain only digits\",\n );\n }\n let cs = 0;\n for (let i = 0; i < 8; i++) {\n cs = cs * 2 + Number(v[i]);\n }\n const check = ((cs * 2) % 11) % 10;\n if (check !== Number(v[8])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Greek VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `EL${compact(value)}`;\n\n/** Generate a random valid Greek VAT number. */\nconst generate = (): string => {\n const payload = randomDigits(8);\n let cs = 0;\n for (let i = 0; i < 8; i++)\n cs = cs * 2 + Number(payload[i]);\n return payload + String(((cs * 2) % 11) % 10);\n};\n\n/** Greek VAT Number. */\nconst vat: Validator = {\n name: \"Greek VAT Number\",\n localName: \"Αριθμός Φορολογικού Μητρώου\",\n abbreviation: \"ΑΦΜ\",\n aliases: [\n \"ΑΦΜ\",\n \"Αριθμός Φορολογικού Μητρώου\",\n \"AFM\",\n ] as const,\n candidatePattern: \"EL\\\\d{9}\",\n country: \"GR\",\n entityType: \"any\",\n sourceUrl: \"https://www.aade.gr/\",\n examples: [\"094259216\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,OAAO;AAC5B,KAAI,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,CAC1C,KAAI,EAAE,MAAM,EAAE;AAEhB,KAAI,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,CAC1C,KAAI,EAAE,MAAM,EAAE;AAGhB,KAAI,EAAE,WAAW,EACf,KAAI,IAAI;AAEV,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,oCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,4CACD;CAEH,IAAI,KAAK;AACT,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,MAAK,KAAK,IAAI,OAAO,EAAE,GAAG;AAG5B,KADgB,KAAK,IAAK,KAAM,OAClB,OAAO,EAAE,GAAG,CACxB,QAAO,IACL,oBACA,wCACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UACd,KAAK,QAAQ,MAAM;;AAGrB,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,EAAE;CAC/B,IAAI,KAAK;AACT,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,MAAK,KAAK,IAAI,OAAO,QAAQ,GAAG;AAClC,QAAO,UAAU,OAAS,KAAK,IAAK,KAAM,GAAG;;;AAI/C,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"vat.js","names":[],"sources":["../../src/gr/vat.ts"],"sourcesContent":["/**\n * ΑΦΜ (Greek VAT number).\n *\n * 9 digits. 8-digit numbers are zero-padded.\n * Iterative checksum: cs = 0; for each d[0..7]:\n * cs = cs*2 + d; check = (cs*2) % 11 % 10 == d[8].\n *\n * @see https://www.vatify.eu/greece-vat-number.html\n * @see https://www.aade.gr/\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 let v = clean(value, \" -/.\");\n if (v.startsWith(\"EL\") || v.startsWith(\"el\")) {\n v = v.slice(2);\n }\n if (v.startsWith(\"GR\") || v.startsWith(\"gr\")) {\n v = v.slice(2);\n }\n // Zero-pad 8-digit numbers\n if (v.length === 8) {\n v = `0${v}`;\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"Greek VAT number must be 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Greek VAT number must contain only digits\",\n );\n }\n let cs = 0;\n for (let i = 0; i < 8; i++) {\n cs = cs * 2 + Number(v[i]);\n }\n const check = ((cs * 2) % 11) % 10;\n if (check !== Number(v[8])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Greek VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `EL${compact(value)}`;\n\n/** Generate a random valid Greek VAT number. */\nconst generate = (): string => {\n const payload = randomDigits(8);\n let cs = 0;\n for (let i = 0; i < 8; i++)\n cs = cs * 2 + Number(payload[i]);\n return payload + String(((cs * 2) % 11) % 10);\n};\n\n/** Greek VAT Number. */\nconst vat: CountryValidator<\"GR\"> = {\n name: \"Greek VAT Number\",\n localName: \"Αριθμός Φορολογικού Μητρώου\",\n abbreviation: \"ΑΦΜ\",\n aliases: [\n \"ΑΦΜ\",\n \"Αριθμός Φορολογικού Μητρώου\",\n \"AFM\",\n ] as const,\n candidatePattern: \"EL\\\\d{9}\",\n scope: \"country\",\n country: \"GR\",\n entityType: \"any\",\n sourceUrl: \"https://www.aade.gr/\",\n examples: [\"094259216\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAqBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,MAAM;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,IAAI,EAAE,MAAM,CAAC;CAEf,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,IAAI,EAAE,MAAM,CAAC;CAGf,IAAI,EAAE,WAAW,GACf,IAAI,IAAI;CAEV,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,mCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,2CACF;CAEF,IAAI,KAAK;CACT,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,KAAK,KAAK,IAAI,OAAO,EAAE,EAAE;CAG3B,IADgB,KAAK,IAAK,KAAM,OAClB,OAAO,EAAE,EAAE,GACvB,OAAO,IACL,oBACA,uCACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,CAAC;CAC9B,IAAI,KAAK;CACT,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,KAAK,KAAK,IAAI,OAAO,QAAQ,EAAE;CACjC,OAAO,UAAU,OAAS,KAAK,IAAK,KAAM,EAAE;AAC9C;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
package/dist/gt/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import nit from "./nit.js";
3
2
 
4
3
  //#region src/gt/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { nit };
6
+ }
6
7
  //#endregion
7
8
  export { mod_d_exports, nit };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/gt/nit.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/gt/nit.d.ts
4
-
5
4
  /**
6
5
  * Compact: strip spaces, hyphens, leading zeros,
7
6
  * and uppercase.
@@ -15,7 +14,7 @@ declare const format: (value: string) => string;
15
14
  /** Generate a random valid NIT (7 body digits). */
16
15
  declare const generate: () => string;
17
16
  /** Guatemala tax identification number. */
18
- declare const nit: Validator;
17
+ declare const nit: CountryValidator<"GT">;
19
18
  //#endregion
20
19
  export { compact, nit as default, format, generate, validate };
21
20
  //# sourceMappingURL=nit.d.ts.map
package/dist/gt/nit.js CHANGED
@@ -4,18 +4,6 @@ import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/gt/nit.ts
6
6
  /**
7
- * NIT (Número de Identificación Tributaria,
8
- * Guatemala tax number).
9
- *
10
- * 2–12 characters: body digits followed by a check
11
- * character. The check character is computed via a
12
- * weighted sum mod 11; remainder 10 maps to 'K'.
13
- *
14
- * Ported from python-stdnum gt.nit module.
15
- *
16
- * @see https://portal.sat.gob.gt/portal/
17
- */
18
- /**
19
7
  * Compact: strip spaces, hyphens, leading zeros,
20
8
  * and uppercase.
21
9
  */
@@ -55,8 +43,11 @@ const format = (value) => {
55
43
  };
56
44
  /** Generate a random valid NIT (7 body digits). */
57
45
  const generate = () => {
58
- const body = randomDigits(7);
59
- return `${body}${calcCheckChar(body)}`;
46
+ for (;;) {
47
+ const body = randomDigits(7);
48
+ if (body.startsWith("0")) continue;
49
+ return `${body}${calcCheckChar(body)}`;
50
+ }
60
51
  };
61
52
  /** Guatemala tax identification number. */
62
53
  const nit = {
@@ -65,6 +56,7 @@ const nit = {
65
56
  abbreviation: "NIT",
66
57
  aliases: ["NIT"],
67
58
  candidatePattern: "\\d{7,8}-?\\d",
59
+ scope: "country",
68
60
  country: "GT",
69
61
  entityType: "any",
70
62
  description: "Tax identifier issued by Guatemala's SAT",
@@ -1 +1 @@
1
- {"version":3,"file":"nit.js","names":[],"sources":["../../src/gt/nit.ts"],"sourcesContent":["/**\n * NIT (Número de Identificación Tributaria,\n * Guatemala tax number).\n *\n * 2–12 characters: body digits followed by a check\n * character. The check character is computed via a\n * weighted sum mod 11; remainder 10 maps to 'K'.\n *\n * Ported from python-stdnum gt.nit module.\n *\n * @see https://portal.sat.gob.gt/portal/\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\n/**\n * Compact: strip spaces, hyphens, leading zeros,\n * and uppercase.\n */\nconst compact = (value: string): string => {\n const v = clean(value, \" -\").trim().toUpperCase();\n return v.replace(/^0+/, \"\");\n};\n\n/**\n * Calculate the check character for a body string.\n * Weighted sum mod 11; remainder 10 yields 'K'.\n */\nconst calcCheckChar = (body: string): string => {\n let sum = 0;\n const len = body.length;\n for (let i = 0; i < len; i++) {\n sum += (len - i + 1) * Number(body[i]);\n }\n const remainder = ((-sum % 11) + 11) % 11;\n return remainder === 10 ? \"K\" : String(remainder);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length < 2 || v.length > 12) {\n return err(\n \"INVALID_LENGTH\",\n \"Guatemala NIT must be 2–12 characters\",\n );\n }\n\n const body = v.slice(0, -1);\n const check = v.slice(-1);\n\n if (!isdigits(body)) {\n return err(\n \"INVALID_FORMAT\",\n \"Guatemala NIT body must contain only digits\",\n );\n }\n\n if (check !== \"K\" && !/^\\d$/.test(check)) {\n return err(\n \"INVALID_FORMAT\",\n \"Guatemala NIT check character must be a digit or K\",\n );\n }\n\n if (check !== calcCheckChar(body)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Guatemala NIT check character does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\n/**\n * Format: insert a hyphen before the check character.\n */\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, -1)}-${v.slice(-1)}`;\n};\n\n/** Generate a random valid NIT (7 body digits). */\nconst generate = (): string => {\n const body = randomDigits(7);\n const check = calcCheckChar(body);\n return `${body}${check}`;\n};\n\n/** Guatemala tax identification number. */\nconst nit: Validator = {\n name: \"Tax Identification Number\",\n localName: \"Número de Identificación Tributaria\",\n abbreviation: \"NIT\",\n aliases: [\"NIT\"] as const,\n candidatePattern: \"\\\\d{7,8}-?\\\\d\",\n country: \"GT\",\n entityType: \"any\",\n description: \"Tax identifier issued by Guatemala's SAT\",\n sourceUrl: \"https://portal.sat.gob.gt/portal/\",\n lengths: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] as const,\n examples: [\"576937K\", \"39525503\", \"71080\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nit;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,WAAW,UAA0B;AAEzC,QADU,MAAM,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa,CACxC,QAAQ,OAAO,GAAG;;;;;;AAO7B,MAAM,iBAAiB,SAAyB;CAC9C,IAAI,MAAM;CACV,MAAM,MAAM,KAAK;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IACvB,SAAQ,MAAM,IAAI,KAAK,OAAO,KAAK,GAAG;CAExC,MAAM,aAAc,CAAC,MAAM,KAAM,MAAM;AACvC,QAAO,cAAc,KAAK,MAAM,OAAO,UAAU;;AAGnD,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,SAAS,KAAK,EAAE,SAAS,GAC7B,QAAO,IACL,kBACA,wCACD;CAGH,MAAM,OAAO,EAAE,MAAM,GAAG,GAAG;CAC3B,MAAM,QAAQ,EAAE,MAAM,GAAG;AAEzB,KAAI,CAAC,SAAS,KAAK,CACjB,QAAO,IACL,kBACA,8CACD;AAGH,KAAI,UAAU,OAAO,CAAC,OAAO,KAAK,MAAM,CACtC,QAAO,IACL,kBACA,qDACD;AAGH,KAAI,UAAU,cAAc,KAAK,CAC/B,QAAO,IACL,oBACA,+CACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;;;;AAMpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,QAAO,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG;;;AAIzC,MAAM,iBAAyB;CAC7B,MAAM,OAAO,aAAa,EAAE;AAE5B,QAAO,GAAG,OADI,cAAc,KAAK;;;AAKnC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,MAAM;CAChB,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,aAAa;CACb,WAAW;CACX,SAAS;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAI;EAAI;EAAG;CAC7C,UAAU;EAAC;EAAW;EAAY;EAAQ;CAC1C;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"nit.js","names":[],"sources":["../../src/gt/nit.ts"],"sourcesContent":["/**\n * NIT (Número de Identificación Tributaria,\n * Guatemala tax number).\n *\n * 2–12 characters: body digits followed by a check\n * character. The check character is computed via a\n * weighted sum mod 11; remainder 10 maps to 'K'.\n *\n * Ported from python-stdnum gt.nit module.\n *\n * @see https://portal.sat.gob.gt/portal/\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\n/**\n * Compact: strip spaces, hyphens, leading zeros,\n * and uppercase.\n */\nconst compact = (value: string): string => {\n const v = clean(value, \" -\").trim().toUpperCase();\n return v.replace(/^0+/, \"\");\n};\n\n/**\n * Calculate the check character for a body string.\n * Weighted sum mod 11; remainder 10 yields 'K'.\n */\nconst calcCheckChar = (body: string): string => {\n let sum = 0;\n const len = body.length;\n for (let i = 0; i < len; i++) {\n sum += (len - i + 1) * Number(body[i]);\n }\n const remainder = ((-sum % 11) + 11) % 11;\n return remainder === 10 ? \"K\" : String(remainder);\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length < 2 || v.length > 12) {\n return err(\n \"INVALID_LENGTH\",\n \"Guatemala NIT must be 2–12 characters\",\n );\n }\n\n const body = v.slice(0, -1);\n const check = v.slice(-1);\n\n if (!isdigits(body)) {\n return err(\n \"INVALID_FORMAT\",\n \"Guatemala NIT body must contain only digits\",\n );\n }\n\n if (check !== \"K\" && !/^\\d$/.test(check)) {\n return err(\n \"INVALID_FORMAT\",\n \"Guatemala NIT check character must be a digit or K\",\n );\n }\n\n if (check !== calcCheckChar(body)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Guatemala NIT check character does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\n/**\n * Format: insert a hyphen before the check character.\n */\nconst format = (value: string): string => {\n const v = compact(value);\n return `${v.slice(0, -1)}-${v.slice(-1)}`;\n};\n\n/** Generate a random valid NIT (7 body digits). */\nconst generate = (): string => {\n for (;;) {\n const body = randomDigits(7);\n if (body.startsWith(\"0\")) continue;\n const check = calcCheckChar(body);\n return `${body}${check}`;\n }\n};\n\n/** Guatemala tax identification number. */\nconst nit: CountryValidator<\"GT\"> = {\n name: \"Tax Identification Number\",\n localName: \"Número de Identificación Tributaria\",\n abbreviation: \"NIT\",\n aliases: [\"NIT\"] as const,\n candidatePattern: \"\\\\d{7,8}-?\\\\d\",\n scope: \"country\",\n country: \"GT\",\n entityType: \"any\",\n description: \"Tax identifier issued by Guatemala's SAT\",\n sourceUrl: \"https://portal.sat.gob.gt/portal/\",\n lengths: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] as const,\n examples: [\"576937K\", \"39525503\", \"71080\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default nit;\nexport { compact, format, generate, validate };\n"],"mappings":";;;;;;;;;AA2BA,MAAM,WAAW,UAA0B;CAEzC,OADU,MAAM,OAAO,IAAI,EAAE,KAAK,EAAE,YAC7B,EAAE,QAAQ,OAAO,EAAE;AAC5B;;;;;AAMA,MAAM,iBAAiB,SAAyB;CAC9C,IAAI,MAAM;CACV,MAAM,MAAM,KAAK;CACjB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KACvB,QAAQ,MAAM,IAAI,KAAK,OAAO,KAAK,EAAE;CAEvC,MAAM,aAAc,CAAC,MAAM,KAAM,MAAM;CACvC,OAAO,cAAc,KAAK,MAAM,OAAO,SAAS;AAClD;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,SAAS,KAAK,EAAE,SAAS,IAC7B,OAAO,IACL,kBACA,uCACF;CAGF,MAAM,OAAO,EAAE,MAAM,GAAG,EAAE;CAC1B,MAAM,QAAQ,EAAE,MAAM,EAAE;CAExB,IAAI,CAAC,SAAS,IAAI,GAChB,OAAO,IACL,kBACA,6CACF;CAGF,IAAI,UAAU,OAAO,CAAC,OAAO,KAAK,KAAK,GACrC,OAAO,IACL,kBACA,oDACF;CAGF,IAAI,UAAU,cAAc,IAAI,GAC9B,OAAO,IACL,oBACA,8CACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;;;;AAKA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;AACxC;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,OAAO,aAAa,CAAC;EAC3B,IAAI,KAAK,WAAW,GAAG,GAAG;EAE1B,OAAO,GAAG,OADI,cAAc,IACP;CACvB;AACF;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,KAAK;CACf,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,aAAa;CACb,WAAW;CACX,SAAS;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAI;EAAI;CAAE;CAC5C,UAAU;EAAC;EAAW;EAAY;CAAO;CACzC;CACA;CACA;CACA;AACF"}
package/dist/hk/hkid.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/hk/hkid.d.ts
4
-
5
4
  /** Strip spaces, parentheses, and dashes. */
6
5
  declare const compact: (value: string) => string;
7
6
  declare const validate: (value: string) => ValidateResult;
@@ -9,7 +8,7 @@ declare const format: (value: string) => string;
9
8
  /** Generate a random valid HKID. */
10
9
  declare const generate: () => string;
11
10
  /** Hong Kong Identity Card number. */
12
- declare const hkid: Validator;
11
+ declare const hkid: CountryValidator<"HK">;
13
12
  //#endregion
14
13
  export { compact, hkid as default, format, generate, validate };
15
14
  //# sourceMappingURL=hkid.d.ts.map
package/dist/hk/hkid.js CHANGED
@@ -2,16 +2,6 @@ import { clean } from "../_util/clean.js";
2
2
  import { randomDigits, randomInt } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  //#region src/hk/hkid.ts
5
- /**
6
- * HKID (Hong Kong Identity Card number).
7
- *
8
- * 1-2 letters + 6 digits + check digit in parentheses.
9
- * The check digit is computed via a weighted sum mod 11,
10
- * where letters have values A=10, B=11, ..., Z=35.
11
- * A remainder of 10 yields check digit 'A'.
12
- *
13
- * @see https://en.wikipedia.org/wiki/Hong_Kong_identity_card
14
- */
15
5
  /** Strip spaces, parentheses, and dashes. */
16
6
  const compact = (value) => clean(value, " -()").toUpperCase();
17
7
  /**
@@ -27,6 +17,7 @@ const computeCheck = (body) => {
27
17
  let sum = 0;
28
18
  for (let i = 0; i < 8; i++) {
29
19
  const ch = padded[i];
20
+ if (ch === void 0) continue;
30
21
  let val;
31
22
  if (ch === " ") val = 36;
32
23
  else if (ch >= "A" && ch <= "Z") val = ch.charCodeAt(0) - 55;
@@ -75,6 +66,7 @@ const hkid = {
75
66
  abbreviation: "HKID",
76
67
  aliases: ["HKID", "香港身份證"],
77
68
  candidatePattern: "[A-Z]{1,2}\\d{6}[\\dA]",
69
+ scope: "country",
78
70
  country: "HK",
79
71
  entityType: "person",
80
72
  lengths: [8, 9],
@@ -1 +1 @@
1
- {"version":3,"file":"hkid.js","names":[],"sources":["../../src/hk/hkid.ts"],"sourcesContent":["/**\n * HKID (Hong Kong Identity Card number).\n *\n * 1-2 letters + 6 digits + check digit in parentheses.\n * The check digit is computed via a weighted sum mod 11,\n * where letters have values A=10, B=11, ..., Z=35.\n * A remainder of 10 yields check digit 'A'.\n *\n * @see https://en.wikipedia.org/wiki/Hong_Kong_identity_card\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\n/** Strip spaces, parentheses, and dashes. */\nconst compact = (value: string): string =>\n clean(value, \" -()\").toUpperCase();\n\n/**\n * Compute the weighted check character.\n *\n * For a two-letter prefix the weights are 9,8,7,6,5,4,3,2\n * over the 8 characters (2 letters + 6 digits). For a\n * single-letter prefix, a space (value 36) is prepended\n * so the weights stay the same.\n */\nconst computeCheck = (body: string): string => {\n const padded = body.length === 7 ? ` ${body}` : body;\n\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n const ch = padded[i]!;\n let val: number;\n if (ch === \" \") {\n val = 36;\n } else if (ch >= \"A\" && ch <= \"Z\") {\n val = ch.charCodeAt(0) - 55; // A=10\n } else {\n val = Number(ch);\n }\n sum += val * (9 - i);\n }\n\n const remainder = sum % 11;\n if (remainder === 0) return \"0\";\n if (remainder === 1) return \"A\";\n return String(11 - remainder);\n};\n\nconst HKID_RE = /^[A-Z]{1,2}\\d{6}[0-9A]$/;\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8 && v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"HKID must be 8 or 9 characters\",\n );\n }\n if (!HKID_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"HKID must be 1-2 letters, 6 digits, \" +\n \"and a check character\",\n );\n }\n\n const body = v.slice(0, -1);\n const check = v.slice(-1);\n if (computeCheck(body) !== check) {\n return err(\n \"INVALID_CHECKSUM\",\n \"HKID check digit mismatch\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n const prefix = v.slice(0, -7);\n const digits = v.slice(-7, -1);\n const check = v.slice(-1);\n return `${prefix}${digits}(${check})`;\n};\n\n/** Generate a random valid HKID. */\nconst generate = (): string => {\n for (;;) {\n const letter = String.fromCharCode(\n 65 + randomInt(0, 25),\n );\n const digits = randomDigits(6);\n for (let d = 0; d <= 9; d++) {\n const c = letter + digits + String(d);\n if (validate(c).valid) return compact(c);\n }\n const cA = letter + digits + \"A\";\n if (validate(cA).valid) return compact(cA);\n }\n};\n\n/** Hong Kong Identity Card number. */\nconst hkid: Validator = {\n name: \"Hong Kong Identity Card Number\",\n localName: \"Hong Kong Identity Card Number\",\n abbreviation: \"HKID\",\n aliases: [\"HKID\", \"香港身份證\"] as const,\n candidatePattern: \"[A-Z]{1,2}\\\\d{6}[\\\\dA]\",\n country: \"HK\",\n entityType: \"person\",\n lengths: [8, 9],\n examples: [\"G123456A\", \"AB9876543\"],\n description:\n \"Identity card number issued by the Hong Kong \" +\n \"Immigration Department\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/\" +\n \"Hong_Kong_identity_card\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default hkid;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,WAAW,UACf,MAAM,OAAO,OAAO,CAAC,aAAa;;;;;;;;;AAUpC,MAAM,gBAAgB,SAAyB;CAC7C,MAAM,SAAS,KAAK,WAAW,IAAI,IAAI,SAAS;CAEhD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,KAAK,OAAO;EAClB,IAAI;AACJ,MAAI,OAAO,IACT,OAAM;WACG,MAAM,OAAO,MAAM,IAC5B,OAAM,GAAG,WAAW,EAAE,GAAG;MAEzB,OAAM,OAAO,GAAG;AAElB,SAAO,OAAO,IAAI;;CAGpB,MAAM,YAAY,MAAM;AACxB,KAAI,cAAc,EAAG,QAAO;AAC5B,KAAI,cAAc,EAAG,QAAO;AAC5B,QAAO,OAAO,KAAK,UAAU;;AAG/B,MAAM,UAAU;AAEhB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,EACjC,QAAO,IACL,kBACA,iCACD;AAEH,KAAI,CAAC,QAAQ,KAAK,EAAE,CAClB,QAAO,IACL,kBACA,4DAED;CAGH,MAAM,OAAO,EAAE,MAAM,GAAG,GAAG;CAC3B,MAAM,QAAQ,EAAE,MAAM,GAAG;AACzB,KAAI,aAAa,KAAK,KAAK,MACzB,QAAO,IACL,oBACA,4BACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AAIxB,QAAO,GAHQ,EAAE,MAAM,GAAG,GAAG,GACd,EAAE,MAAM,IAAI,GAAG,CAEJ,GADZ,EAAE,MAAM,GAAG,CACU;;;AAIrC,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,SAAS,OAAO,aACpB,KAAK,UAAU,GAAG,GAAG,CACtB;EACD,MAAM,SAAS,aAAa,EAAE;AAC9B,OAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;GAC3B,MAAM,IAAI,SAAS,SAAS,OAAO,EAAE;AACrC,OAAI,SAAS,EAAE,CAAC,MAAO,QAAO,QAAQ,EAAE;;EAE1C,MAAM,KAAK,SAAS,SAAS;AAC7B,MAAI,SAAS,GAAG,CAAC,MAAO,QAAO,QAAQ,GAAG;;;;AAK9C,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,QAAQ;CAC1B,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG,EAAE;CACf,UAAU,CAAC,YAAY,YAAY;CACnC,aACE;CAEF,WACE;CAEF;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"hkid.js","names":[],"sources":["../../src/hk/hkid.ts"],"sourcesContent":["/**\n * HKID (Hong Kong Identity Card number).\n *\n * 1-2 letters + 6 digits + check digit in parentheses.\n * The check digit is computed via a weighted sum mod 11,\n * where letters have values A=10, B=11, ..., Z=35.\n * A remainder of 10 yields check digit 'A'.\n *\n * @see https://en.wikipedia.org/wiki/Hong_Kong_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\";\n\n/** Strip spaces, parentheses, and dashes. */\nconst compact = (value: string): string =>\n clean(value, \" -()\").toUpperCase();\n\n/**\n * Compute the weighted check character.\n *\n * For a two-letter prefix the weights are 9,8,7,6,5,4,3,2\n * over the 8 characters (2 letters + 6 digits). For a\n * single-letter prefix, a space (value 36) is prepended\n * so the weights stay the same.\n */\nconst computeCheck = (body: string): string => {\n const padded = body.length === 7 ? ` ${body}` : body;\n\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n const ch = padded[i];\n if (ch === undefined) continue;\n let val: number;\n if (ch === \" \") {\n val = 36;\n } else if (ch >= \"A\" && ch <= \"Z\") {\n val = ch.charCodeAt(0) - 55; // A=10\n } else {\n val = Number(ch);\n }\n sum += val * (9 - i);\n }\n\n const remainder = sum % 11;\n if (remainder === 0) return \"0\";\n if (remainder === 1) return \"A\";\n return String(11 - remainder);\n};\n\nconst HKID_RE = /^[A-Z]{1,2}\\d{6}[0-9A]$/;\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8 && v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"HKID must be 8 or 9 characters\",\n );\n }\n if (!HKID_RE.test(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"HKID must be 1-2 letters, 6 digits, \" +\n \"and a check character\",\n );\n }\n\n const body = v.slice(0, -1);\n const check = v.slice(-1);\n if (computeCheck(body) !== check) {\n return err(\n \"INVALID_CHECKSUM\",\n \"HKID check digit mismatch\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n const prefix = v.slice(0, -7);\n const digits = v.slice(-7, -1);\n const check = v.slice(-1);\n return `${prefix}${digits}(${check})`;\n};\n\n/** Generate a random valid HKID. */\nconst generate = (): string => {\n for (;;) {\n const letter = String.fromCharCode(\n 65 + randomInt(0, 25),\n );\n const digits = randomDigits(6);\n for (let d = 0; d <= 9; d++) {\n const c = letter + digits + String(d);\n if (validate(c).valid) return compact(c);\n }\n const cA = letter + digits + \"A\";\n if (validate(cA).valid) return compact(cA);\n }\n};\n\n/** Hong Kong Identity Card number. */\nconst hkid: CountryValidator<\"HK\"> = {\n name: \"Hong Kong Identity Card Number\",\n localName: \"Hong Kong Identity Card Number\",\n abbreviation: \"HKID\",\n aliases: [\"HKID\", \"香港身份證\"] as const,\n candidatePattern: \"[A-Z]{1,2}\\\\d{6}[\\\\dA]\",\n scope: \"country\",\n country: \"HK\",\n entityType: \"person\",\n lengths: [8, 9],\n examples: [\"G123456A\", \"AB9876543\"],\n description:\n \"Identity card number issued by the Hong Kong \" +\n \"Immigration Department\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/\" +\n \"Hong_Kong_identity_card\",\n compact,\n format,\n validate,\n generate,\n};\n\nexport default hkid;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAqBA,MAAM,WAAW,UACf,MAAM,OAAO,MAAM,EAAE,YAAY;;;;;;;;;AAUnC,MAAM,gBAAgB,SAAyB;CAC7C,MAAM,SAAS,KAAK,WAAW,IAAI,IAAI,SAAS;CAEhD,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,KAAK,OAAO;EAClB,IAAI,OAAO,KAAA,GAAW;EACtB,IAAI;EACJ,IAAI,OAAO,KACT,MAAM;OACD,IAAI,MAAM,OAAO,MAAM,KAC5B,MAAM,GAAG,WAAW,CAAC,IAAI;OAEzB,MAAM,OAAO,EAAE;EAEjB,OAAO,OAAO,IAAI;CACpB;CAEA,MAAM,YAAY,MAAM;CACxB,IAAI,cAAc,GAAG,OAAO;CAC5B,IAAI,cAAc,GAAG,OAAO;CAC5B,OAAO,OAAO,KAAK,SAAS;AAC9B;AAEA,MAAM,UAAU;AAEhB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,KAAK,EAAE,WAAW,GACjC,OAAO,IACL,kBACA,gCACF;CAEF,IAAI,CAAC,QAAQ,KAAK,CAAC,GACjB,OAAO,IACL,kBACA,2DAEF;CAGF,MAAM,OAAO,EAAE,MAAM,GAAG,EAAE;CAC1B,MAAM,QAAQ,EAAE,MAAM,EAAE;CACxB,IAAI,aAAa,IAAI,MAAM,OACzB,OAAO,IACL,oBACA,2BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CAIvB,OAAO,GAHQ,EAAE,MAAM,GAAG,EAGX,IAFA,EAAE,MAAM,IAAI,EAEH,EAAE,GADZ,EAAE,MAAM,EACW,EAAE;AACrC;;AAGA,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,SAAS,OAAO,aACpB,KAAK,UAAU,GAAG,EAAE,CACtB;EACA,MAAM,SAAS,aAAa,CAAC;EAC7B,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;GAC3B,MAAM,IAAI,SAAS,SAAS,OAAO,CAAC;GACpC,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO,QAAQ,CAAC;EACzC;EACA,MAAM,KAAK,SAAS,SAAS;EAC7B,IAAI,SAAS,EAAE,EAAE,OAAO,OAAO,QAAQ,EAAE;CAC3C;AACF;;AAGA,MAAM,OAA+B;CACnC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,QAAQ,OAAO;CACzB,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,GAAG,CAAC;CACd,UAAU,CAAC,YAAY,WAAW;CAClC,aACE;CAEF,WACE;CAEF;CACA;CACA;CACA;AACF"}
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,14 +1,13 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } 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;
8
7
  /** Generate a random valid Croatian OIB. */
9
8
  declare const generate: () => string;
10
9
  /** Croatian VAT Number. */
11
- declare const vat: Validator;
10
+ declare const vat: CountryValidator<"HR">;
12
11
  //#endregion
13
12
  export { compact, vat as default, format, generate, validate };
14
13
  //# sourceMappingURL=vat.d.ts.map
package/dist/hr/vat.js CHANGED
@@ -1,17 +1,9 @@
1
+ import { mod1110checkDigit, mod1110validate } from "../_checksums/mod1110.js";
1
2
  import { clean } from "../_util/clean.js";
2
3
  import { randomDigits } from "../_util/generate.js";
3
4
  import { err } from "../_util/result.js";
4
5
  import { isdigits } from "../_util/strings.js";
5
- import { mod1110checkDigit, mod1110validate } from "../_checksums/mod1110.js";
6
6
  //#region src/hr/vat.ts
7
- /**
8
- * OIB (Croatian VAT number).
9
- *
10
- * 11 digits. ISO 7064 Mod 11,10 checksum.
11
- *
12
- * @see https://www.vatify.eu/croatia-vat-number.html
13
- * @see https://www.porezna-uprava.hr/
14
- */
15
7
  const compact = (value) => {
16
8
  let v = clean(value, " -/.");
17
9
  if (v.startsWith("HR") || v.startsWith("hr")) v = v.slice(2);
@@ -40,6 +32,7 @@ const vat = {
40
32
  abbreviation: "OIB",
41
33
  aliases: ["OIB", "osobni identifikacijski broj"],
42
34
  candidatePattern: "HR\\d{11}",
35
+ scope: "country",
43
36
  country: "HR",
44
37
  entityType: "any",
45
38
  sourceUrl: "https://www.porezna-uprava.hr/",
@@ -1 +1 @@
1
- {"version":3,"file":"vat.js","names":[],"sources":["../../src/hr/vat.ts"],"sourcesContent":["/**\n * OIB (Croatian VAT number).\n *\n * 11 digits. ISO 7064 Mod 11,10 checksum.\n *\n * @see https://www.vatify.eu/croatia-vat-number.html\n * @see https://www.porezna-uprava.hr/\n */\n\nimport {\n mod1110validate,\n mod1110checkDigit,\n} from \"#checksums/mod1110\";\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 let v = clean(value, \" -/.\");\n if (v.startsWith(\"HR\") || v.startsWith(\"hr\")) {\n v = v.slice(2);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Croatian VAT number must be 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Croatian VAT number must contain only digits\",\n );\n }\n if (!mod1110validate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Croatian VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `HR${compact(value)}`;\n\n/** Generate a random valid Croatian OIB. */\nconst generate = (): string => {\n const payload = randomDigits(10);\n return payload + String(mod1110checkDigit(payload));\n};\n\n/** Croatian VAT Number. */\nconst vat: Validator = {\n name: \"Croatian VAT Number\",\n localName: \"Osobni identifikacijski broj\",\n abbreviation: \"OIB\",\n aliases: [\"OIB\", \"osobni identifikacijski broj\"] as const,\n candidatePattern: \"HR\\\\d{11}\",\n country: \"HR\",\n entityType: \"any\",\n sourceUrl: \"https://www.porezna-uprava.hr/\",\n examples: [\"33392005961\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;AAoBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,OAAO;AAC5B,KAAI,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,CAC1C,KAAI,EAAE,MAAM,EAAE;AAEhB,QAAO;;AAGT,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,wCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+CACD;AAEH,KAAI,CAAC,gBAAgB,EAAE,CACrB,QAAO,IACL,oBACA,2CACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UACd,KAAK,QAAQ,MAAM;;AAGrB,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,GAAG;AAChC,QAAO,UAAU,OAAO,kBAAkB,QAAQ,CAAC;;;AAIrD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,+BAA+B;CAChD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,cAAc;CACzB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"vat.js","names":[],"sources":["../../src/hr/vat.ts"],"sourcesContent":["/**\n * OIB (Croatian VAT number).\n *\n * 11 digits. ISO 7064 Mod 11,10 checksum.\n *\n * @see https://www.vatify.eu/croatia-vat-number.html\n * @see https://www.porezna-uprava.hr/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport {\n mod1110validate,\n mod1110checkDigit,\n} from \"#checksums/mod1110\";\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 let v = clean(value, \" -/.\");\n if (v.startsWith(\"HR\") || v.startsWith(\"hr\")) {\n v = v.slice(2);\n }\n return v;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 11) {\n return err(\n \"INVALID_LENGTH\",\n \"Croatian VAT number must be 11 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Croatian VAT number must contain only digits\",\n );\n }\n if (!mod1110validate(v)) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Croatian VAT number check digit mismatch\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `HR${compact(value)}`;\n\n/** Generate a random valid Croatian OIB. */\nconst generate = (): string => {\n const payload = randomDigits(10);\n return payload + String(mod1110checkDigit(payload));\n};\n\n/** Croatian VAT Number. */\nconst vat: CountryValidator<\"HR\"> = {\n name: \"Croatian VAT Number\",\n localName: \"Osobni identifikacijski broj\",\n abbreviation: \"OIB\",\n aliases: [\"OIB\", \"osobni identifikacijski broj\"] as const,\n candidatePattern: \"HR\\\\d{11}\",\n scope: \"country\",\n country: \"HR\",\n entityType: \"any\",\n sourceUrl: \"https://www.porezna-uprava.hr/\",\n examples: [\"33392005961\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;AAuBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,MAAM;CAC3B,IAAI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,GACzC,IAAI,EAAE,MAAM,CAAC;CAEf,OAAO;AACT;AAEA,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,IACf,OAAO,IACL,kBACA,uCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8CACF;CAEF,IAAI,CAAC,gBAAgB,CAAC,GACpB,OAAO,IACL,oBACA,0CACF;CAEF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UACd,KAAK,QAAQ,KAAK;;AAGpB,MAAM,iBAAyB;CAC7B,MAAM,UAAU,aAAa,EAAE;CAC/B,OAAO,UAAU,OAAO,kBAAkB,OAAO,CAAC;AACpD;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,OAAO,8BAA8B;CAC/C,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
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,14 +1,13 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } 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;
8
7
  /** Generate a random valid Hungarian VAT number. */
9
8
  declare const generate: () => string;
10
9
  /** Hungarian VAT Number. */
11
- declare const vat: Validator;
10
+ declare const vat: CountryValidator<"HU">;
12
11
  //#endregion
13
12
  export { compact, vat as default, format, generate, validate };
14
13
  //# sourceMappingURL=vat.d.ts.map