@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/fi/hetu.ts CHANGED
@@ -8,17 +8,18 @@
8
8
  * @see https://dvv.fi/en/personal-identity-code
9
9
  */
10
10
 
11
- import { clean } from "#util/clean";
12
- import { isValidDate } from "#util/date";
13
- import { err } from "#util/result";
14
- import { isdigits } from "#util/strings";
15
-
16
11
  import type {
17
12
  ParsedPersonId,
18
13
  ValidateResult,
19
- Validator,
14
+ CountryValidator,
20
15
  } from "../types";
21
16
 
17
+ import { clean } from "#util/clean";
18
+ import { isValidDate } from "#util/date";
19
+ import { randomInt } from "#util/generate";
20
+ import { err } from "#util/result";
21
+ import { isdigits } from "#util/strings";
22
+
22
23
  const CHECK_CHARS = "0123456789ABCDEFHJKLMNPRSTUVWXY";
23
24
 
24
25
  const SEPARATORS_1800 = new Set(["+"]);
@@ -158,8 +159,21 @@ const parse = (value: string): ParsedPersonId | null => {
158
159
  };
159
160
  };
160
161
 
162
+ /** Generate a random valid HETU. */
163
+ const generate = (): string => {
164
+ const year = randomInt(1900, 2024);
165
+ const month = String(randomInt(1, 12)).padStart(2, "0");
166
+ const day = String(randomInt(1, 28)).padStart(2, "0");
167
+ const yy = String(year % 100).padStart(2, "0");
168
+ const separator = year >= 2000 ? "A" : "-";
169
+ const serial = String(randomInt(2, 899)).padStart(3, "0");
170
+ const checkNum = Number(`${day}${month}${yy}${serial}`);
171
+ const checkChar = CHECK_CHARS.charAt(checkNum % 31);
172
+ return `${day}${month}${yy}${separator}${serial}${checkChar}`;
173
+ };
174
+
161
175
  /** Finnish Personal Identity Code. */
162
- const hetu: Validator = {
176
+ const hetu: CountryValidator<"FI", ParsedPersonId> = {
163
177
  name: "Finnish Personal ID",
164
178
  localName: "Henkilötunnus",
165
179
  abbreviation: "HETU",
@@ -169,14 +183,18 @@ const hetu: Validator = {
169
183
  "sosiaaliturvatunnus",
170
184
  ] as const,
171
185
  candidatePattern: "\\d{6}[-+A]\\d{3}[\\dA-Z]",
186
+ scope: "country",
172
187
  country: "FI",
173
188
  entityType: "person",
174
189
  sourceUrl: "https://dvv.fi/en/personal-identity-code",
190
+ lengths: [11] as const,
175
191
  examples: ["131052-308T"] as const,
176
192
  compact,
177
193
  format,
194
+ parse,
178
195
  validate,
196
+ generate,
179
197
  };
180
198
 
181
199
  export default hetu;
182
- export { compact, format, parse, validate };
200
+ export { compact, format, generate, parse, validate };
package/src/fi/vat.ts CHANGED
@@ -8,14 +8,17 @@
8
8
  * @see https://www.ytj.fi/en/index/businessid.html
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+
11
16
  import { weightedSum } from "#checksums/weighted-sum";
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 WEIGHTS = [7, 9, 10, 5, 8, 4, 2, 1];
20
23
 
21
24
  const compact = (value: string): string => {
@@ -62,15 +65,17 @@ const generate = (): string => {
62
65
  };
63
66
 
64
67
  /** Finnish VAT Number. */
65
- const vat: Validator = {
68
+ const vat: CountryValidator<"FI"> = {
66
69
  name: "Finnish VAT Number",
67
70
  localName: "Arvonlisäveronumero",
68
71
  abbreviation: "ALV nro",
69
72
  aliases: ["ALV-numero", "Y-tunnus"] as const,
70
73
  candidatePattern: "FI\\d{8}",
74
+ scope: "country",
71
75
  country: "FI",
72
76
  entityType: "company",
73
77
  sourceUrl: "https://www.ytj.fi/en/index/businessid.html",
78
+ lengths: [8] as const,
74
79
  examples: ["20774740"] as const,
75
80
  compact,
76
81
  format,
package/src/fi/ytunnus.ts CHANGED
@@ -8,14 +8,17 @@
8
8
  * @see https://www.ytj.fi/en/index/businessid.html
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+
11
16
  import { weightedSum } from "#checksums/weighted-sum";
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 WEIGHTS = [7, 9, 10, 5, 8, 4, 2, 1];
20
23
 
21
24
  const compact = (value: string): string =>
@@ -59,7 +62,7 @@ const generate = (): string => {
59
62
  };
60
63
 
61
64
  /** Finnish Business ID. */
62
- const ytunnus: Validator = {
65
+ const ytunnus: CountryValidator<"FI"> = {
63
66
  name: "Finnish Business ID",
64
67
  localName: "Y-tunnus",
65
68
  abbreviation: "Y-tunnus",
@@ -69,6 +72,7 @@ const ytunnus: Validator = {
69
72
  "FO-nummer",
70
73
  ] as const,
71
74
  candidatePattern: "\\d{7}-\\d",
75
+ scope: "country",
72
76
  country: "FI",
73
77
  entityType: "company",
74
78
  sourceUrl: "https://www.ytj.fi/en/index/businessid.html",
package/src/fr/nif.ts CHANGED
@@ -8,13 +8,16 @@
8
8
  * @see https://www.impots.gouv.fr/
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, randomInt } 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
 
@@ -69,7 +72,7 @@ const generate = (): string => {
69
72
  };
70
73
 
71
74
  /** French Tax Identification Number. */
72
- const nif: Validator = {
75
+ const nif: CountryValidator<"FR"> = {
73
76
  name: "French Tax ID",
74
77
  localName: "Numéro d'Identification Fiscale",
75
78
  abbreviation: "NIF",
@@ -79,6 +82,7 @@ const nif: Validator = {
79
82
  "numéro d'identification fiscale",
80
83
  ] as const,
81
84
  candidatePattern: "\\d{13}",
85
+ scope: "country",
82
86
  country: "FR",
83
87
  entityType: "person",
84
88
  sourceUrl: "https://www.impots.gouv.fr/",
package/src/fr/nir.ts CHANGED
@@ -12,17 +12,17 @@
12
12
  * @see https://en.wikipedia.org/wiki/INSEE_code
13
13
  */
14
14
 
15
- import { clean } from "#util/clean";
16
- import { resolveTwoDigitYear } from "#util/date";
17
- import { randomInt } from "#util/generate";
18
- import { err } from "#util/result";
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 { resolveTwoDigitYear } from "#util/date";
23
+ import { randomInt } from "#util/generate";
24
+ import { err } from "#util/result";
25
+
26
26
  const compact = (value: string): string =>
27
27
  clean(value, " -.");
28
28
 
@@ -165,7 +165,7 @@ const generate = (): string => {
165
165
  };
166
166
 
167
167
  /** French Social Security Number. */
168
- const nir: Validator = {
168
+ const nir: CountryValidator<"FR", ParsedPersonId> = {
169
169
  name: "French Social Security Number",
170
170
  localName: "Numero d'Inscription au Repertoire",
171
171
  abbreviation: "NIR",
@@ -177,6 +177,7 @@ const nir: Validator = {
177
177
  ] as const,
178
178
  candidatePattern:
179
179
  "[12]\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}\\s?\\d{3}\\s?\\d{3}\\s?\\d{2}",
180
+ scope: "country",
180
181
  country: "FR",
181
182
  entityType: "person",
182
183
  description:
@@ -187,6 +188,7 @@ const nir: Validator = {
187
188
  examples: ["295117823456784"] as const,
188
189
  compact,
189
190
  format,
191
+ parse,
190
192
  validate,
191
193
  generate,
192
194
  };
package/src/fr/siren.ts CHANGED
@@ -8,6 +8,11 @@
8
8
  * @see https://www.insee.fr/fr/information/2549588
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+
11
16
  import {
12
17
  luhnValidate,
13
18
  luhnChecksum,
@@ -17,8 +22,6 @@ import { randomDigits } 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
 
@@ -58,13 +61,14 @@ const generate = (): string => {
58
61
  };
59
62
 
60
63
  /** French Company Identification Number. */
61
- const siren: Validator = {
64
+ const siren: CountryValidator<"FR"> = {
62
65
  name: "French Company ID",
63
66
  localName:
64
67
  "Système d'Identification du Répertoire des Entreprises",
65
68
  abbreviation: "SIREN",
66
69
  aliases: ["SIREN", "numéro SIREN"] as const,
67
70
  candidatePattern: "\\d{3}\\s?\\d{3}\\s?\\d{3}",
71
+ scope: "country",
68
72
  country: "FR",
69
73
  entityType: "company",
70
74
  sourceUrl: "https://www.insee.fr/fr/information/2549588",
package/src/fr/siret.ts CHANGED
@@ -9,6 +9,11 @@
9
9
  * @see https://www.insee.fr/fr/information/2549588
10
10
  */
11
11
 
12
+ import type {
13
+ ValidateResult,
14
+ CountryValidator,
15
+ } from "../types";
16
+
12
17
  import {
13
18
  luhnValidate,
14
19
  luhnChecksum,
@@ -18,8 +23,6 @@ import { randomDigits } from "#util/generate";
18
23
  import { err } from "#util/result";
19
24
  import { isdigits } from "#util/strings";
20
25
 
21
- import type { ValidateResult, Validator } from "../types";
22
-
23
26
  const compact = (value: string): string =>
24
27
  clean(value, " -.");
25
28
 
@@ -101,13 +104,14 @@ const generate = (): string => {
101
104
  };
102
105
 
103
106
  /** French Establishment Identification Number. */
104
- const siret: Validator = {
107
+ const siret: CountryValidator<"FR"> = {
105
108
  name: "French Establishment ID",
106
109
  localName:
107
110
  "Système d'Identification du Répertoire des Établissements",
108
111
  abbreviation: "SIRET",
109
112
  aliases: ["SIRET", "numéro SIRET"] as const,
110
113
  candidatePattern: "\\d{3}\\s?\\d{3}\\s?\\d{3}\\s?\\d{5}",
114
+ scope: "country",
111
115
  country: "FR",
112
116
  entityType: "company",
113
117
  sourceUrl: "https://www.insee.fr/fr/information/2549588",
package/src/fr/tva.ts CHANGED
@@ -10,6 +10,11 @@
10
10
  * @see https://www.economie.gouv.fr/
11
11
  */
12
12
 
13
+ import type {
14
+ ValidateResult,
15
+ CountryValidator,
16
+ } from "../types";
17
+
13
18
  import {
14
19
  luhnValidate,
15
20
  luhnChecksum,
@@ -19,8 +24,6 @@ import { randomDigits } from "#util/generate";
19
24
  import { err } from "#util/result";
20
25
  import { isdigits } from "#util/strings";
21
26
 
22
- import type { ValidateResult, Validator } from "../types";
23
-
24
27
  const ALPHABET = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
25
28
 
26
29
  const compact = (value: string): string => {
@@ -122,7 +125,7 @@ const generate = (): string => {
122
125
  };
123
126
 
124
127
  /** French VAT Number. */
125
- const tva: Validator = {
128
+ const tva: CountryValidator<"FR"> = {
126
129
  name: "French VAT Number",
127
130
  localName: "Numéro de TVA intracommunautaire",
128
131
  abbreviation: "TVA",
@@ -132,6 +135,7 @@ const tva: Validator = {
132
135
  "FR VAT",
133
136
  ] as const,
134
137
  candidatePattern: "FR[A-Z0-9]{2}\\d{9}",
138
+ scope: "country",
135
139
  country: "FR",
136
140
  entityType: "company",
137
141
  sourceUrl: "https://www.economie.gouv.fr/",
package/src/gb/nino.ts CHANGED
@@ -1,21 +1,19 @@
1
+ const NINO_VALID_FIRST = "ABCEGHJKLMNOPRSTWXYZ";
2
+ const NINO_VALID_SECOND = "ABCEGHJKLMNPRSTWXYZ";
3
+ const NINO_SUFFIXES = "ABCD";
4
+
1
5
  /** Generate a random valid UK NINO. */
2
6
  const generate = (): string => {
3
- const validFirst = "ABCEGHJKLMNOPRSTWXYZ";
4
- const validSecond = "ABCEGHJKLMNPRSTWXYZ";
5
- const suffixes = "ABCD";
6
7
  let first: string;
7
8
  let second: string;
8
9
  let prefix: string;
9
10
  do {
10
- first =
11
- validFirst[randomInt(0, validFirst.length - 1)]!;
12
- second =
13
- validSecond[randomInt(0, validSecond.length - 1)]!;
11
+ first = randomChar(NINO_VALID_FIRST);
12
+ second = randomChar(NINO_VALID_SECOND);
14
13
  prefix = first + second;
15
14
  } while (INVALID_PREFIX.has(prefix));
16
15
  const digits = randomDigits(6);
17
- const suffix =
18
- suffixes[randomInt(0, suffixes.length - 1)]!;
16
+ const suffix = randomChar(NINO_SUFFIXES);
19
17
  return `${prefix}${digits}${suffix}`;
20
18
  };
21
19
 
@@ -30,12 +28,15 @@ const generate = (): string => {
30
28
  * @see https://www.gov.uk/hmrc-internal-manuals/national-insurance-manual/nim39110
31
29
  */
32
30
 
31
+ import type {
32
+ ValidateResult,
33
+ CountryValidator,
34
+ } from "../types";
35
+
33
36
  import { clean } from "#util/clean";
34
- import { randomDigits, randomInt } from "#util/generate";
37
+ import { randomChar, randomDigits } from "#util/generate";
35
38
  import { err } from "#util/result";
36
39
 
37
- import type { ValidateResult, Validator } from "../types";
38
-
39
40
  const INVALID_FIRST = new Set([
40
41
  "D",
41
42
  "F",
@@ -85,7 +86,10 @@ const validate = (value: string): ValidateResult => {
85
86
  );
86
87
  }
87
88
 
89
+ // SAFETY: regex above guarantees v.length === 9.
90
+ // eslint-disable-next-line no-non-null-assertion
88
91
  const first = v[0]!;
92
+ // eslint-disable-next-line no-non-null-assertion
89
93
  const second = v[1]!;
90
94
  const prefix = v.slice(0, 2);
91
95
 
@@ -123,7 +127,7 @@ const format = (value: string): string => {
123
127
  };
124
128
 
125
129
  /** UK National Insurance Number. */
126
- const nino: Validator = {
130
+ const nino: CountryValidator<"GB"> = {
127
131
  name: "UK National Insurance Number",
128
132
  localName: "National Insurance Number",
129
133
  abbreviation: "NINO",
@@ -133,6 +137,7 @@ const nino: Validator = {
133
137
  "NI number",
134
138
  ] as const,
135
139
  candidatePattern: "[A-Z]{2}\\d{6}[A-Z]",
140
+ scope: "country",
136
141
  country: "GB",
137
142
  entityType: "person",
138
143
  description:
package/src/gb/sedol.ts CHANGED
@@ -10,13 +10,16 @@
10
10
  * @see https://en.wikipedia.org/wiki/SEDOL
11
11
  */
12
12
 
13
+ import type {
14
+ ValidateResult,
15
+ CountryValidator,
16
+ } from "../types";
17
+
13
18
  import { clean } from "#util/clean";
14
- import { randomInt } from "#util/generate";
19
+ import { randomChar } from "#util/generate";
15
20
  import { err } from "#util/result";
16
21
  import { isdigits } from "#util/strings";
17
22
 
18
- import type { ValidateResult, Validator } from "../types";
19
-
20
23
  /**
21
24
  * Allowed characters in a SEDOL: digits and
22
25
  * consonants only (vowels are never used).
@@ -36,14 +39,14 @@ const calcCheckDigit = (number: string): string => {
36
39
  );
37
40
  }
38
41
  let sum = 0;
39
- for (let i = 0; i < 6; i++) {
40
- const ch = number[i]!;
42
+ for (const [i, weight] of WEIGHTS.entries()) {
43
+ const ch = number[i];
44
+ if (ch === undefined) continue;
41
45
  const val = ALPHABET.indexOf(ch);
42
46
  if (val < 0) {
43
47
  throw new Error(`Invalid SEDOL character: ${ch}`);
44
48
  }
45
- // SAFETY: weights length matches loop bound
46
- sum += WEIGHTS[i]! * val;
49
+ sum += weight * val;
47
50
  }
48
51
  return String((10 - (sum % 10)) % 10);
49
52
  };
@@ -74,6 +77,8 @@ const validate = (value: string): ValidateResult => {
74
77
  // Old-style SEDOLs are fully numeric; new-style
75
78
  // SEDOLs start with a letter. A number that starts
76
79
  // with a digit but contains letters is invalid.
80
+ // SAFETY: v.length === 7 here.
81
+ // eslint-disable-next-line no-non-null-assertion
77
82
  if (isdigits(v[0]!) && !isdigits(v)) {
78
83
  return err(
79
84
  "INVALID_FORMAT",
@@ -94,20 +99,20 @@ const validate = (value: string): ValidateResult => {
94
99
 
95
100
  const format = (value: string): string => compact(value);
96
101
 
102
+ const SEDOL_CONSONANTS = "BCDFGHJKLMNPQRSTVWXYZ";
103
+ const SEDOL_CHARS = "0123456789BCDFGHJKLMNPQRSTVWXYZ";
104
+
97
105
  /** Generate a random valid SEDOL. */
98
106
  const generate = (): string => {
99
- const consonants = "BCDFGHJKLMNPQRSTVWXYZ";
100
- const chars = "0123456789BCDFGHJKLMNPQRSTVWXYZ";
101
- const first =
102
- consonants[randomInt(0, consonants.length - 1)]!;
103
- let payload = first;
104
- for (let i = 1; i < 6; i++)
105
- payload += chars[randomInt(0, chars.length - 1)]!;
107
+ let payload = randomChar(SEDOL_CONSONANTS);
108
+ for (let i = 1; i < 6; i++) {
109
+ payload += randomChar(SEDOL_CHARS);
110
+ }
106
111
  return payload + calcCheckDigit(payload);
107
112
  };
108
113
 
109
114
  /** Stock Exchange Daily Official List number. */
110
- const sedol: Validator = {
115
+ const sedol: CountryValidator<"GB"> = {
111
116
  name: "Stock Exchange Daily Official List number",
112
117
  localName: "Stock Exchange Daily Official List number",
113
118
  abbreviation: "SEDOL",
@@ -116,6 +121,7 @@ const sedol: Validator = {
116
121
  "Stock Exchange Daily Official List",
117
122
  ] as const,
118
123
  candidatePattern: "[B-DF-HJ-NP-TV-Z0-9]{6}\\d",
124
+ scope: "country",
119
125
  country: "GB",
120
126
  entityType: "any",
121
127
  sourceUrl: "https://en.wikipedia.org/wiki/SEDOL",
package/src/gb/utr.ts CHANGED
@@ -8,14 +8,17 @@
8
8
  * @see https://www.gov.uk/find-utr-number
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+
11
16
  import { weightedSum } from "#checksums/weighted-sum";
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 WEIGHTS = [6, 7, 8, 9, 10, 5, 4, 3, 2] as const;
20
23
  const CHECK_LOOKUP = "21987654321";
21
24
 
@@ -61,12 +64,13 @@ const generate = (): string => {
61
64
  };
62
65
 
63
66
  /** UK Unique Taxpayer Reference. */
64
- const utr: Validator = {
67
+ const utr: CountryValidator<"GB"> = {
65
68
  name: "UK Unique Taxpayer Reference",
66
69
  localName: "Unique Taxpayer Reference",
67
70
  abbreviation: "UTR",
68
71
  aliases: ["Unique Taxpayer Reference", "UTR"] as const,
69
72
  candidatePattern: "\\d{10}",
73
+ scope: "country",
70
74
  country: "GB",
71
75
  entityType: "any",
72
76
  sourceUrl: "https://www.gov.uk/find-utr-number",
package/src/gb/vat.ts CHANGED
@@ -9,14 +9,17 @@
9
9
  * @see https://www.gov.uk/vat-registration
10
10
  */
11
11
 
12
+ import type {
13
+ ValidateResult,
14
+ CountryValidator,
15
+ } from "../types";
16
+
12
17
  import { weightedSum } from "#checksums/weighted-sum";
13
18
  import { clean } from "#util/clean";
14
19
  import { randomDigits } from "#util/generate";
15
20
  import { err } from "#util/result";
16
21
  import { isdigits } from "#util/strings";
17
22
 
18
- import type { ValidateResult, Validator } from "../types";
19
-
20
23
  const WEIGHTS = [8, 7, 6, 5, 4, 3, 2] as const;
21
24
 
22
25
  const compact = (value: string): string => {
@@ -135,7 +138,7 @@ const generate = (): string => {
135
138
  };
136
139
 
137
140
  /** UK VAT Registration Number. */
138
- const vat: Validator = {
141
+ const vat: CountryValidator<"GB"> = {
139
142
  name: "UK VAT Number",
140
143
  localName: "VAT Registration Number",
141
144
  abbreviation: "VAT",
@@ -144,6 +147,7 @@ const vat: Validator = {
144
147
  "VAT number",
145
148
  ] as const,
146
149
  candidatePattern: "GB\\d{9,12}",
150
+ scope: "country",
147
151
  country: "GB",
148
152
  entityType: "company",
149
153
  sourceUrl: "https://www.gov.uk/vat-registration",
package/src/ge/pin.ts CHANGED
@@ -14,13 +14,16 @@ const generate = (): string => randomDigits(11);
14
14
  * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Georgia-TIN.pdf
15
15
  */
16
16
 
17
+ import type {
18
+ ValidateResult,
19
+ CountryValidator,
20
+ } from "../types";
21
+
17
22
  import { clean } from "#util/clean";
18
23
  import { randomDigits } from "#util/generate";
19
24
  import { err } from "#util/result";
20
25
  import { isdigits } from "#util/strings";
21
26
 
22
- import type { ValidateResult, Validator } from "../types";
23
-
24
27
  const compact = (value: string): string =>
25
28
  clean(value, " -").trim();
26
29
 
@@ -47,12 +50,13 @@ const validate = (value: string): ValidateResult => {
47
50
  const format = (value: string): string => compact(value);
48
51
 
49
52
  /** Georgian Personal Identification Number. */
50
- const pin: Validator = {
53
+ const pin: CountryValidator<"GE"> = {
51
54
  name: "Georgian Personal ID",
52
55
  localName: "პირადი ნომერი",
53
56
  abbreviation: "PIN",
54
57
  aliases: ["პირადი ნომერი", "PIN"] as const,
55
58
  candidatePattern: "\\d{11}",
59
+ scope: "country",
56
60
  country: "GE",
57
61
  entityType: "any",
58
62
  lengths: [9, 11] as const,
package/src/gh/tin.ts CHANGED
@@ -14,12 +14,15 @@
14
14
  * @see https://gra.gov.gh/
15
15
  */
16
16
 
17
+ import type {
18
+ ValidateResult,
19
+ CountryValidator,
20
+ } from "../types";
21
+
17
22
  import { clean } from "#util/clean";
18
- import { randomDigits, randomInt } from "#util/generate";
23
+ import { randomDigits, randomPick } from "#util/generate";
19
24
  import { err } from "#util/result";
20
25
 
21
- import type { ValidateResult, Validator } from "../types";
22
-
23
26
  const FORMAT_RE = /^[PCGQV]00[0-9]{7}[0-9X]$/;
24
27
 
25
28
  const compact = (value: string): string =>
@@ -65,11 +68,12 @@ const validate = (value: string): ValidateResult => {
65
68
 
66
69
  const format = (value: string): string => compact(value);
67
70
 
71
+ const TIN_PREFIXES = ["P", "C", "G", "Q", "V"] as const;
72
+
68
73
  /** Generate a random valid Ghana TIN. */
69
74
  const generate = (): string => {
70
- const prefixes = ["P", "C", "G", "Q", "V"] as const;
71
75
  for (;;) {
72
- const p = prefixes[randomInt(0, 4)]!;
76
+ const p = randomPick(TIN_PREFIXES);
73
77
  const d = randomDigits(9);
74
78
  const partial = p + d;
75
79
  const c = partial + calcCheckDigit(partial);
@@ -78,12 +82,13 @@ const generate = (): string => {
78
82
  };
79
83
 
80
84
  /** Ghanaian Tax Identification Number. */
81
- const tin: Validator = {
85
+ const tin: CountryValidator<"GH"> = {
82
86
  name: "Ghanaian Tax Identification Number",
83
87
  localName: "Tax Identification Number",
84
88
  abbreviation: "TIN",
85
89
  aliases: ["TIN", "Tax Identification Number"] as const,
86
90
  candidatePattern: "[A-Z]\\d{9,10}",
91
+ scope: "country",
87
92
  country: "GH",
88
93
  entityType: "any",
89
94
  compact,