@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
package/src/is/vsk.ts CHANGED
@@ -12,13 +12,16 @@ const generate = (): string => {
12
12
  * @see https://www.rsk.is/
13
13
  */
14
14
 
15
+ import type {
16
+ ValidateResult,
17
+ CountryValidator,
18
+ } from "../types";
19
+
15
20
  import { clean } from "#util/clean";
16
21
  import { randomDigits, randomInt } from "#util/generate";
17
22
  import { err } from "#util/result";
18
23
  import { isdigits } from "#util/strings";
19
24
 
20
- import type { ValidateResult, Validator } from "../types";
21
-
22
25
  const compact = (value: string): string =>
23
26
  clean(value, " -");
24
27
 
@@ -43,12 +46,13 @@ const validate = (value: string): ValidateResult => {
43
46
  const format = (value: string): string => compact(value);
44
47
 
45
48
  /** Icelandic VAT Number. */
46
- const vsk: Validator = {
49
+ const vsk: CountryValidator<"IS"> = {
47
50
  name: "Icelandic VAT Number",
48
51
  localName: "Virðisaukaskattur",
49
52
  abbreviation: "VSK",
50
53
  aliases: ["VSK-númer", "virðisaukaskattur"] as const,
51
54
  candidatePattern: "IS\\d{5,6}",
55
+ scope: "country",
52
56
  country: "IS",
53
57
  entityType: "company",
54
58
  sourceUrl: "https://www.rsk.is/",
package/src/isin.ts CHANGED
@@ -10,14 +10,17 @@
10
10
  * @see https://www.isin.org/
11
11
  */
12
12
 
13
+ import type {
14
+ ValidateResult,
15
+ GlobalValidator,
16
+ } from "./types";
17
+
13
18
  import { luhnChecksum } from "#checksums/luhn";
14
19
  import { clean } from "#util/clean";
15
- import { randomInt } from "#util/generate";
20
+ import { randomInt, randomPick } from "#util/generate";
16
21
  import { err } from "#util/result";
17
22
  import { charValue, isalnum } from "#util/strings";
18
23
 
19
- import type { ValidateResult, Validator } from "./types";
20
-
21
24
  const ISIN_RE = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;
22
25
 
23
26
  const compact = (value: string): string =>
@@ -73,12 +76,18 @@ const format = (value: string): string => {
73
76
  return `${v.slice(0, 2)} ${v.slice(2, 6)} ${v.slice(6, 10)} ${v.slice(10)}`;
74
77
  };
75
78
 
79
+ const ISIN_COUNTRIES = [
80
+ "US",
81
+ "GB",
82
+ "DE",
83
+ "FR",
84
+ "JP",
85
+ ] as const;
86
+
76
87
  /** Generate a random valid ISIN. */
77
88
  const generate = (): string => {
78
- const countries = ["US", "GB", "DE", "FR", "JP"];
79
89
  for (;;) {
80
- const cc =
81
- countries[randomInt(0, countries.length - 1)]!;
90
+ const cc = randomPick(ISIN_COUNTRIES);
82
91
  let nsin = "";
83
92
  for (let i = 0; i < 9; i++)
84
93
  nsin += String(randomInt(0, 9));
@@ -91,7 +100,8 @@ const generate = (): string => {
91
100
  };
92
101
 
93
102
  /** International Securities Identification Number. */
94
- const isin: Validator = {
103
+ const isin: GlobalValidator = {
104
+ scope: "global",
95
105
  name: "International Securities Identification Number",
96
106
  localName:
97
107
  "International Securities Identification Number",
@@ -20,17 +20,18 @@
20
20
  * @see https://it.wikipedia.org/wiki/Codice_fiscale#Omocodia
21
21
  */
22
22
 
23
- import { clean } from "#util/clean";
24
- import { err } from "#util/result";
25
- import { isdigits } from "#util/strings";
26
-
27
23
  import type {
28
24
  ParsedPersonId,
29
25
  ValidateResult,
30
- Validator,
26
+ CountryValidator,
31
27
  } from "../types";
32
28
  import { validate as validateIva } from "./iva";
33
29
 
30
+ import { clean } from "#util/clean";
31
+ import { randomInt } from "#util/generate";
32
+ import { err } from "#util/result";
33
+ import { isdigits } from "#util/strings";
34
+
34
35
  // Values for odd-positioned characters (0-based
35
36
  // index 0, 2, 4, ...)
36
37
  const ODD: Record<string, number> = {
@@ -260,8 +261,46 @@ const parse = (value: string): ParsedPersonId | null => {
260
261
  };
261
262
  };
262
263
 
264
+ const LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
265
+ const MONTH_CODES = Object.keys(MONTH_LETTERS);
266
+
267
+ const randomLetter = (): string =>
268
+ LETTERS.charAt(randomInt(0, LETTERS.length - 1));
269
+
270
+ /** Generate a random valid 16-character Codice Fiscale. */
271
+ const generate = (): string => {
272
+ let body = "";
273
+
274
+ for (let i = 0; i < 6; i++) {
275
+ body += randomLetter();
276
+ }
277
+
278
+ body += String(randomInt(0, 99)).padStart(2, "0");
279
+ body +=
280
+ MONTH_CODES[randomInt(0, MONTH_CODES.length - 1)] ??
281
+ "A";
282
+
283
+ const day =
284
+ randomInt(1, 28) + (randomInt(0, 1) === 0 ? 0 : 40);
285
+ body += String(day).padStart(2, "0");
286
+ body += randomLetter();
287
+ body += String(randomInt(0, 999)).padStart(3, "0");
288
+
289
+ let sum = 0;
290
+ for (let i = 0; i < body.length; i++) {
291
+ const ch = body[i];
292
+ if (ch === undefined) continue;
293
+ sum += i % 2 === 0 ? (ODD[ch] ?? 0) : (EVEN[ch] ?? 0);
294
+ }
295
+
296
+ return `${body}${CHECK_LETTERS.charAt(sum % 26)}`;
297
+ };
298
+
263
299
  /** Italian Tax Code. */
264
- const codiceFiscale: Validator = {
300
+ const codiceFiscale: CountryValidator<
301
+ "IT",
302
+ ParsedPersonId
303
+ > = {
265
304
  name: "Italian Tax Code",
266
305
  localName: "Codice Fiscale",
267
306
  abbreviation: "CF",
@@ -274,6 +313,7 @@ const codiceFiscale: Validator = {
274
313
  ] as const,
275
314
  candidatePattern:
276
315
  "[A-Z]{6}\\d{2}[A-Z]\\d{2}[A-Z]\\d{3}[A-Z]",
316
+ scope: "country",
277
317
  country: "IT",
278
318
  entityType: "person",
279
319
  description:
@@ -283,8 +323,10 @@ const codiceFiscale: Validator = {
283
323
  examples: ["RCCMNL83S18D969H"] as const,
284
324
  compact,
285
325
  format,
326
+ parse,
286
327
  validate,
328
+ generate,
287
329
  };
288
330
 
289
331
  export default codiceFiscale;
290
- export { compact, format, parse, validate };
332
+ export { compact, format, generate, parse, validate };
package/src/it/iva.ts CHANGED
@@ -7,6 +7,11 @@
7
7
  * @see https://www.agenziaentrate.gov.it/
8
8
  */
9
9
 
10
+ import type {
11
+ ValidateResult,
12
+ CountryValidator,
13
+ } from "../types";
14
+
10
15
  import {
11
16
  luhnValidate,
12
17
  luhnChecksum,
@@ -16,8 +21,6 @@ import { randomDigits, randomInt } from "#util/generate";
16
21
  import { err } from "#util/result";
17
22
  import { isdigits } from "#util/strings";
18
23
 
19
- import type { ValidateResult, Validator } from "../types";
20
-
21
24
  const VALID_PROVINCES = new Set([
22
25
  ...Array.from({ length: 100 }, (_, i) =>
23
26
  String(i + 1).padStart(3, "0"),
@@ -90,7 +93,7 @@ const generate = (): string => {
90
93
  };
91
94
 
92
95
  /** Italian VAT Number. */
93
- const iva: Validator = {
96
+ const iva: CountryValidator<"IT"> = {
94
97
  name: "Italian VAT Number",
95
98
  localName: "Partita IVA",
96
99
  abbreviation: "P.IVA",
@@ -101,6 +104,7 @@ const iva: Validator = {
101
104
  "VAT IT",
102
105
  ] as const,
103
106
  candidatePattern: "IT\\d{11}",
107
+ scope: "country",
104
108
  country: "IT",
105
109
  entityType: "company",
106
110
  sourceUrl: "https://www.agenziaentrate.gov.it/",
package/src/jp/cn.ts CHANGED
@@ -8,13 +8,16 @@
8
8
  * @see https://en.wikipedia.org/wiki/Corporate_Number_(Japan)
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+
11
16
  import { clean } from "#util/clean";
12
17
  import { randomDigits } from "#util/generate";
13
18
  import { err } from "#util/result";
14
19
  import { isdigits } from "#util/strings";
15
20
 
16
- import type { ValidateResult, Validator } from "../types";
17
-
18
21
  const compact = (value: string): string =>
19
22
  clean(value, " -");
20
23
 
@@ -67,12 +70,13 @@ const generate = (): string => {
67
70
  };
68
71
 
69
72
  /** Japanese Corporate Number. */
70
- const cn: Validator = {
73
+ const cn: CountryValidator<"JP"> = {
71
74
  name: "Japanese Corporate Number",
72
75
  localName: "法人番号",
73
76
  abbreviation: "CN",
74
77
  aliases: ["法人番号", "Corporate Number"] as const,
75
78
  candidatePattern: "\\d{13}",
79
+ scope: "country",
76
80
  country: "JP",
77
81
  entityType: "company",
78
82
  description:
@@ -9,13 +9,16 @@
9
9
  * @see https://en.wikipedia.org/wiki/Individual_Number
10
10
  */
11
11
 
12
+ import type {
13
+ ValidateResult,
14
+ CountryValidator,
15
+ } from "../types";
16
+
12
17
  import { clean } from "#util/clean";
13
18
  import { randomDigits } from "#util/generate";
14
19
  import { err } from "#util/result";
15
20
  import { isdigits } from "#util/strings";
16
21
 
17
- import type { ValidateResult, Validator } from "../types";
18
-
19
22
  const compact = (value: string): string =>
20
23
  clean(value, " -");
21
24
 
@@ -74,7 +77,7 @@ const generate = (): string => {
74
77
  };
75
78
 
76
79
  /** Japanese Individual Number (My Number). */
77
- const mynumber: Validator = {
80
+ const mynumber: CountryValidator<"JP"> = {
78
81
  name: "Japanese Individual Number",
79
82
  localName: "マイナンバー",
80
83
  abbreviation: "My Number",
@@ -84,6 +87,7 @@ const mynumber: Validator = {
84
87
  "個人番号",
85
88
  ] as const,
86
89
  candidatePattern: "\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}",
90
+ scope: "country",
87
91
  country: "JP",
88
92
  entityType: "person",
89
93
  description:
package/src/kr/brn.ts CHANGED
@@ -23,13 +23,16 @@ const generate = (): string => {
23
23
  * @see https://en.wikipedia.org/wiki/Business_registration_number_(South_Korea)
24
24
  */
25
25
 
26
+ import type {
27
+ ValidateResult,
28
+ CountryValidator,
29
+ } from "../types";
30
+
26
31
  import { clean } from "#util/clean";
27
32
  import { randomDigits, randomInt } from "#util/generate";
28
33
  import { err } from "#util/result";
29
34
  import { isdigits } from "#util/strings";
30
35
 
31
- import type { ValidateResult, Validator } from "../types";
32
-
33
36
  const compact = (value: string): string =>
34
37
  clean(value, " -");
35
38
 
@@ -77,12 +80,13 @@ const format = (value: string): string => {
77
80
  };
78
81
 
79
82
  /** Korean Business Registration Number. */
80
- const brn: Validator = {
83
+ const brn: CountryValidator<"KR"> = {
81
84
  name: "Korean Business Registration Number",
82
85
  localName: "사업자등록번호",
83
86
  abbreviation: "BRN",
84
87
  aliases: ["사업자등록번호", "BRN"] as const,
85
88
  candidatePattern: "\\d{3}-?\\d{2}-?\\d{5}",
89
+ scope: "country",
86
90
  country: "KR",
87
91
  entityType: "company",
88
92
  description:
package/src/kr/rrn.ts CHANGED
@@ -9,17 +9,18 @@
9
9
  * @see https://en.wikipedia.org/wiki/Resident_registration_number
10
10
  */
11
11
 
12
- import { clean } from "#util/clean";
13
- import { isValidDate } from "#util/date";
14
- import { err } from "#util/result";
15
- import { isdigits } from "#util/strings";
16
-
17
12
  import type {
18
13
  ParsedPersonId,
19
14
  ValidateResult,
20
- Validator,
15
+ CountryValidator,
21
16
  } from "../types";
22
17
 
18
+ import { clean } from "#util/clean";
19
+ import { isValidDate } from "#util/date";
20
+ import { randomDigits, randomInt } from "#util/generate";
21
+ import { err } from "#util/result";
22
+ import { isdigits } from "#util/strings";
23
+
23
24
  const compact = (value: string): string =>
24
25
  clean(value, " -/");
25
26
 
@@ -140,8 +141,23 @@ const parse = (value: string): ParsedPersonId | null => {
140
141
  };
141
142
  };
142
143
 
144
+ /** Generate a random valid Korean RRN. */
145
+ const generate = (): string => {
146
+ const year = randomInt(1900, 2024);
147
+ const month = String(randomInt(1, 12)).padStart(2, "0");
148
+ const day = String(randomInt(1, 28)).padStart(2, "0");
149
+ const yy = String(year % 100).padStart(2, "0");
150
+ const genderDigit =
151
+ year >= 2000
152
+ ? String(randomInt(3, 4))
153
+ : String(randomInt(1, 2));
154
+ const place = String(randomInt(0, 96)).padStart(2, "0");
155
+ const body = `${yy}${month}${day}${genderDigit}${place}${randomDigits(3)}`;
156
+ return `${body}${String(checkDigit(body))}`;
157
+ };
158
+
143
159
  /** Korean Resident Registration Number. */
144
- const rrn: Validator = {
160
+ const rrn: CountryValidator<"KR", ParsedPersonId> = {
145
161
  name: "Korean Resident Registration Number",
146
162
  localName: "주민등록번호",
147
163
  abbreviation: "RRN",
@@ -151,6 +167,7 @@ const rrn: Validator = {
151
167
  "Resident Registration Number",
152
168
  ] as const,
153
169
  candidatePattern: "\\d{6}[\\s-]?\\d{7}",
170
+ scope: "country",
154
171
  country: "KR",
155
172
  entityType: "person",
156
173
  description:
@@ -163,8 +180,10 @@ const rrn: Validator = {
163
180
  examples: ["9710139019902", "9501011000109"] as const,
164
181
  compact,
165
182
  format,
183
+ parse,
166
184
  validate,
185
+ generate,
167
186
  };
168
187
 
169
188
  export default rrn;
170
- export { compact, format, parse, validate };
189
+ export { compact, format, generate, parse, validate };
package/src/kw/civil.ts CHANGED
@@ -12,17 +12,18 @@
12
12
  * @see https://kuwaitsexpat.com/kuwait-civil-id-format/
13
13
  */
14
14
 
15
+ import type {
16
+ ParsedBirthDate,
17
+ ValidateResult,
18
+ CountryValidator,
19
+ } from "../types";
20
+
15
21
  import { clean } from "#util/clean";
16
22
  import { isValidDate } from "#util/date";
23
+ import { randomDigits, randomInt } from "#util/generate";
17
24
  import { err } from "#util/result";
18
25
  import { isdigits } from "#util/strings";
19
26
 
20
- import type {
21
- ParsedPersonId,
22
- ValidateResult,
23
- Validator,
24
- } from "../types";
25
-
26
27
  const WEIGHTS = [2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] as const;
27
28
 
28
29
  const centuryMap: Record<number, number> = {
@@ -35,9 +36,8 @@ const compact = (value: string): string =>
35
36
 
36
37
  const calcCheckDigit = (digits: string): number => {
37
38
  let sum = 0;
38
- for (let i = 0; i < 11; i++) {
39
- // SAFETY: loop bound guarantees valid index
40
- sum += Number(digits[i]) * WEIGHTS[i]!;
39
+ for (const [i, weight] of WEIGHTS.entries()) {
40
+ sum += Number(digits[i]) * weight;
41
41
  }
42
42
  return (11 - (sum % 11)) % 11;
43
43
  };
@@ -101,9 +101,7 @@ const format = (value: string): string => {
101
101
  * Gender is not encoded in the number.
102
102
  * Returns null if the value is not valid.
103
103
  */
104
- const parse = (
105
- value: string,
106
- ): Omit<ParsedPersonId, "gender"> | null => {
104
+ const parse = (value: string): ParsedBirthDate | null => {
107
105
  const result = validate(value);
108
106
  if (!result.valid) return null;
109
107
 
@@ -120,13 +118,30 @@ const parse = (
120
118
  };
121
119
  };
122
120
 
121
+ /** Generate a random valid Kuwait civil number. */
122
+ const generate = (): string => {
123
+ for (;;) {
124
+ const year = randomInt(1950, 2024);
125
+ const month = String(randomInt(1, 12)).padStart(2, "0");
126
+ const day = String(randomInt(1, 28)).padStart(2, "0");
127
+ const body =
128
+ `${year >= 2000 ? "3" : "2"}` +
129
+ `${String(year % 100).padStart(2, "0")}` +
130
+ `${month}${day}${randomDigits(4)}`;
131
+ const check = calcCheckDigit(body);
132
+ if (check > 9) continue;
133
+ return `${body}${String(check)}`;
134
+ }
135
+ };
136
+
123
137
  /** Kuwait Civil Number (الرقم المدني). */
124
- const civil: Validator = {
138
+ const civil: CountryValidator<"KW", ParsedBirthDate> = {
125
139
  name: "Civil Number",
126
140
  localName: "الرقم المدني",
127
141
  abbreviation: "Civil ID",
128
142
  aliases: ["Civil ID", "الرقم المدني"] as const,
129
143
  candidatePattern: "\\d{12}",
144
+ scope: "country",
130
145
  country: "KW",
131
146
  entityType: "person",
132
147
  lengths: [12] as const,
@@ -137,8 +152,10 @@ const civil: Validator = {
137
152
  "https://kuwaitsexpat.com/kuwait-civil-id-format/",
138
153
  compact,
139
154
  format,
155
+ parse,
140
156
  validate,
157
+ generate,
141
158
  };
142
159
 
143
160
  export default civil;
144
- export { compact, format, parse, validate };
161
+ export { compact, format, generate, parse, validate };
package/src/kz/iin.ts CHANGED
@@ -14,6 +14,12 @@
14
14
  * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Kazakhstan-TIN.pdf
15
15
  */
16
16
 
17
+ import type {
18
+ ParsedPersonId,
19
+ ValidateResult,
20
+ CountryValidator,
21
+ } from "../types";
22
+
17
23
  import { weightedSum } from "#checksums/weighted-sum";
18
24
  import { clean } from "#util/clean";
19
25
  import { isValidDate } from "#util/date";
@@ -21,12 +27,6 @@ import { randomDigits, randomInt } from "#util/generate";
21
27
  import { err } from "#util/result";
22
28
  import { isdigits } from "#util/strings";
23
29
 
24
- import type {
25
- ParsedPersonId,
26
- ValidateResult,
27
- Validator,
28
- } from "../types";
29
-
30
30
  const WEIGHTS_1 = [
31
31
  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
32
32
  ] as const;
@@ -144,7 +144,6 @@ const generate = (): string => {
144
144
  const serial = randomDigits(4);
145
145
  const payload = yy + mm + dd + gender + serial;
146
146
  const check = calcCheckDigit(payload);
147
- if (check === null) continue;
148
147
  const c = payload + String(check);
149
148
  if (validate(c).valid) return c;
150
149
  }
@@ -155,7 +154,7 @@ const generate = (): string => {
155
154
  *
156
155
  * Examples sourced from identique/idnumbers test suite.
157
156
  */
158
- const iin: Validator = {
157
+ const iin: CountryValidator<"KZ", ParsedPersonId> = {
159
158
  name: "Kazakhstan Individual ID",
160
159
  localName: "Жеке сәйкестендіру нөмірі",
161
160
  abbreviation: "IIN",
@@ -165,12 +164,14 @@ const iin: Validator = {
165
164
  "индивидуальный идентификационный номер",
166
165
  ] as const,
167
166
  candidatePattern: "\\d{12}",
167
+ scope: "country",
168
168
  country: "KZ",
169
169
  entityType: "person",
170
170
  lengths: [12] as const,
171
171
  examples: ["880515300120", "950101400012"] as const,
172
172
  compact,
173
173
  format,
174
+ parse,
174
175
  validate,
175
176
  sourceUrl:
176
177
  "https://www.oecd.org/tax/automatic-exchange/" +
package/src/lei.ts CHANGED
@@ -9,14 +9,17 @@
9
9
  * @see https://www.gleif.org/
10
10
  */
11
11
 
12
+ import type {
13
+ ValidateResult,
14
+ GlobalValidator,
15
+ } from "./types";
16
+
12
17
  import { mod97 } from "#checksums/mod97";
13
18
  import { clean } from "#util/clean";
14
19
  import { randomInt } from "#util/generate";
15
20
  import { err } from "#util/result";
16
21
  import { charValue, isalnum } from "#util/strings";
17
22
 
18
- import type { ValidateResult, Validator } from "./types";
19
-
20
23
  const compact = (value: string): string =>
21
24
  clean(value, " -").toUpperCase();
22
25
 
@@ -79,7 +82,8 @@ const generate = (): string => {
79
82
  };
80
83
 
81
84
  /** Legal Entity Identifier. */
82
- const lei: Validator = {
85
+ const lei: GlobalValidator = {
86
+ scope: "global",
83
87
  name: "Legal Entity Identifier",
84
88
  localName: "Legal Entity Identifier",
85
89
  abbreviation: "LEI",
package/src/li/peid.ts CHANGED
@@ -15,13 +15,16 @@ const generate = (): string => {
15
15
  * @see https://www.oera.li/
16
16
  */
17
17
 
18
+ import type {
19
+ ValidateResult,
20
+ CountryValidator,
21
+ } from "../types";
22
+
18
23
  import { clean } from "#util/clean";
19
24
  import { randomDigits, randomInt } from "#util/generate";
20
25
  import { err } from "#util/result";
21
26
  import { isdigits } from "#util/strings";
22
27
 
23
- import type { ValidateResult, Validator } from "../types";
24
-
25
28
  const compact = (value: string): string =>
26
29
  clean(value, " .").replace(/^0+/, "");
27
30
 
@@ -45,12 +48,13 @@ const validate = (value: string): ValidateResult => {
45
48
  const format = (value: string): string => compact(value);
46
49
 
47
50
  /** Liechtenstein Person Identification Number. */
48
- const peid: Validator = {
51
+ const peid: CountryValidator<"LI"> = {
49
52
  name: "Liechtenstein Person Identification Number",
50
53
  localName: "Personenidentifikationsnummer",
51
54
  abbreviation: "PEID",
52
55
  aliases: ["PEID", "Personenidentifikation"] as const,
53
56
  candidatePattern: "\\d{6}",
57
+ scope: "country",
54
58
  country: "LI",
55
59
  entityType: "any",
56
60
  lengths: [4, 5, 6, 7, 8, 9, 10, 11, 12] as const,
package/src/lk/nic.ts CHANGED
@@ -12,17 +12,18 @@
12
12
  * @see https://drp.gov.lk/Templates/Artical%20-%20English%20new%20number.html
13
13
  */
14
14
 
15
- import { clean } from "#util/clean";
16
- import { isValidDate } from "#util/date";
17
- import { err } from "#util/result";
18
- import { isdigits } from "#util/strings";
19
-
20
15
  import type {
21
16
  ParsedPersonId,
22
17
  ValidateResult,
23
- Validator,
18
+ CountryValidator,
24
19
  } from "../types";
25
20
 
21
+ import { clean } from "#util/clean";
22
+ import { isValidDate } from "#util/date";
23
+ import { randomDigits, randomInt } from "#util/generate";
24
+ import { err } from "#util/result";
25
+ import { isdigits } from "#util/strings";
26
+
26
27
  /** Old format: 9 digits + V or X (case-insensitive). */
27
28
  const OLD_RE = /^\d{9}[VvXx]$/;
28
29
 
@@ -184,13 +185,33 @@ const parse = (value: string): ParsedPersonId | null => {
184
185
  };
185
186
  };
186
187
 
188
+ /** Generate a random valid Sri Lankan NIC. */
189
+ const generate = (): string => {
190
+ const year = randomInt(1950, 2024);
191
+ const start = new Date(year, 0, 1);
192
+ const end = new Date(year, 11, 31);
193
+ const maxDay =
194
+ Math.round(
195
+ (end.getTime() - start.getTime()) / 86_400_000,
196
+ ) + 1;
197
+ const dayOfYear = randomInt(1, maxDay);
198
+ const genderOffset = Math.random() < 0.5 ? 0 : 500;
199
+ const ddd = String(dayOfYear + genderOffset).padStart(
200
+ 3,
201
+ "0",
202
+ );
203
+ const body = `${year}${ddd}0${randomDigits(3)}`;
204
+ return `${body}${String(checkDigit(body))}`;
205
+ };
206
+
187
207
  /** Sri Lankan National Identity Card. */
188
- const nic: Validator = {
208
+ const nic: CountryValidator<"LK", ParsedPersonId> = {
189
209
  name: "National Identity Card",
190
210
  localName: "ජාතික හැඳුනුම්පත",
191
211
  abbreviation: "NIC",
192
212
  aliases: ["NIC", "ජාතික හැඳුනුම්පත"] as const,
193
213
  candidatePattern: "\\d{9}[VXvx]|\\d{12}",
214
+ scope: "country",
194
215
  country: "LK",
195
216
  entityType: "person",
196
217
  description:
@@ -203,8 +224,10 @@ const nic: Validator = {
203
224
  examples: ["197819202757", "862348753V"] as const,
204
225
  compact,
205
226
  format,
227
+ parse,
206
228
  validate,
229
+ generate,
207
230
  };
208
231
 
209
232
  export default nic;
210
- export { compact, format, parse, validate };
233
+ export { compact, format, generate, parse, validate };