@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/dk/cvr.ts CHANGED
@@ -13,14 +13,17 @@
13
13
  * for CVR.
14
14
  */
15
15
 
16
+ import type {
17
+ ValidateResult,
18
+ CountryValidator,
19
+ } from "../types";
20
+
16
21
  import { weightedSum } from "#checksums/weighted-sum";
17
22
  import { clean } from "#util/clean";
18
23
  import { randomDigits, randomInt } 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 WEIGHTS = [2, 7, 6, 5, 4, 3, 2, 1];
25
28
 
26
29
  const compact = (value: string): string =>
@@ -67,12 +70,13 @@ const generate = (): string => {
67
70
  };
68
71
 
69
72
  /** Danish Central Business Register Number. */
70
- const cvr: Validator = {
73
+ const cvr: CountryValidator<"DK"> = {
71
74
  name: "Danish Business Register Number",
72
75
  localName: "CVR-nummer",
73
76
  abbreviation: "CVR",
74
77
  aliases: ["CVR-nummer", "CVR"] as const,
75
78
  candidatePattern: "\\d{8}",
79
+ scope: "country",
76
80
  country: "DK",
77
81
  entityType: "company",
78
82
  sourceUrl: "https://erhvervsstyrelsen.dk/",
package/src/dk/vat.ts CHANGED
@@ -11,14 +11,17 @@
11
11
  * for CVR.
12
12
  */
13
13
 
14
+ import type {
15
+ ValidateResult,
16
+ CountryValidator,
17
+ } from "../types";
18
+
14
19
  import { weightedSum } from "#checksums/weighted-sum";
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 WEIGHTS = [2, 7, 6, 5, 4, 3, 2, 1];
23
26
 
24
27
  const compact = (value: string): string => {
@@ -71,15 +74,17 @@ const generate = (): string => {
71
74
  };
72
75
 
73
76
  /** Danish VAT Number. */
74
- const vat: Validator = {
77
+ const vat: CountryValidator<"DK"> = {
75
78
  name: "Danish VAT Number",
76
79
  localName: "Momsregistreringsnummer",
77
80
  abbreviation: "CVR",
78
81
  aliases: ["momsnummer", "SE-nummer"] as const,
79
82
  candidatePattern: "DK\\d{8}",
83
+ scope: "country",
80
84
  country: "DK",
81
85
  entityType: "company",
82
86
  sourceUrl: "https://erhvervsstyrelsen.dk/",
87
+ lengths: [8] as const,
83
88
  examples: ["13585628"] as const,
84
89
  compact,
85
90
  format,
package/src/do/rnc.ts CHANGED
@@ -14,14 +14,17 @@
14
14
  * @see https://dgii.gov.do/
15
15
  */
16
16
 
17
+ import type {
18
+ ValidateResult,
19
+ CountryValidator,
20
+ } from "../types";
21
+
17
22
  import { luhnValidate } from "#checksums/luhn";
18
23
  import { clean } from "#util/clean";
19
24
  import { randomDigits } 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
  /**
26
29
  * Weights for the 9-digit RNC check digit.
27
30
  * Applied to positions 0-7; check digit is at
@@ -38,8 +41,8 @@ const compact = (value: string): string =>
38
41
  */
39
42
  const calcRncCheckDigit = (value: string): string => {
40
43
  let sum = 0;
41
- for (let i = 0; i < 8; i++) {
42
- sum += Number(value[i]) * RNC_WEIGHTS[i]!;
44
+ for (const [i, weight] of RNC_WEIGHTS.entries()) {
45
+ sum += Number(value[i]) * weight;
43
46
  }
44
47
  const remainder = sum % 11;
45
48
  return String(((10 - remainder) % 9) + 1);
@@ -102,7 +105,7 @@ const generate = (): string => {
102
105
  *
103
106
  * Examples sourced from python-stdnum test suite.
104
107
  */
105
- const rnc: Validator = {
108
+ const rnc: CountryValidator<"DO"> = {
106
109
  name: "Dominican Republic Tax ID",
107
110
  localName: "Registro Nacional del Contribuyente",
108
111
  abbreviation: "RNC",
@@ -111,6 +114,7 @@ const rnc: Validator = {
111
114
  "Registro Nacional del Contribuyente",
112
115
  ] as const,
113
116
  candidatePattern: "\\d{9}",
117
+ scope: "country",
114
118
  country: "DO",
115
119
  entityType: "any",
116
120
  lengths: [9, 11] as const,
package/src/ec/ruc.ts CHANGED
@@ -17,13 +17,16 @@
17
17
  * @see https://www.sri.gob.ec/
18
18
  */
19
19
 
20
+ import type {
21
+ ValidateResult,
22
+ CountryValidator,
23
+ } from "../types";
24
+
20
25
  import { clean } from "#util/clean";
21
26
  import { randomDigits, randomInt } from "#util/generate";
22
27
  import { err } from "#util/result";
23
28
  import { isdigits } from "#util/strings";
24
29
 
25
- import type { ValidateResult, Validator } from "../types";
26
-
27
30
  const compact = (value: string): string =>
28
31
  clean(value, " -");
29
32
 
@@ -46,8 +49,8 @@ const mod11Checksum = (
46
49
  weights: readonly number[],
47
50
  ): number => {
48
51
  let sum = 0;
49
- for (let i = 0; i < weights.length; i++) {
50
- sum += Number(digits[i]) * weights[i]!;
52
+ for (const [i, weight] of weights.entries()) {
53
+ sum += Number(digits[i]) * weight;
51
54
  }
52
55
  return sum % 11;
53
56
  };
@@ -169,7 +172,7 @@ const generate = (): string => {
169
172
  };
170
173
 
171
174
  /** Ecuadorian tax identification number. */
172
- const ruc: Validator = {
175
+ const ruc: CountryValidator<"EC"> = {
173
176
  name: "Registro Único de Contribuyentes",
174
177
  localName: "Registro Único de Contribuyentes",
175
178
  abbreviation: "RUC",
@@ -178,6 +181,7 @@ const ruc: Validator = {
178
181
  "Registro Único de Contribuyentes",
179
182
  ] as const,
180
183
  candidatePattern: "\\d{13}",
184
+ scope: "country",
181
185
  country: "EC",
182
186
  entityType: "any",
183
187
  description:
package/src/ee/ik.ts CHANGED
@@ -5,9 +5,24 @@
5
5
  * gender/century digit, YYMMDD, 3-digit serial, and
6
6
  * a check digit computed with two-pass weighted sums.
7
7
  *
8
+ * Canonical sources:
9
+ * - Estonian legislation for the personal code format
10
+ * - OECD Estonia TIN sheet summarising the same
11
+ * first-digit ranges for cross-border tax use
12
+ *
13
+ * These sources are why we restrict the first digit
14
+ * to 1-6 rather than accepting speculative 7/8 forms.
15
+ *
8
16
  * @see https://www.riigiteataja.ee/en/eli/512012015003/consolide
17
+ * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Estonia-TIN.pdf
9
18
  */
10
19
 
20
+ import type {
21
+ ParsedPersonId,
22
+ ValidateResult,
23
+ CountryValidator,
24
+ } from "../types";
25
+
11
26
  import { weightedSum } from "#checksums/weighted-sum";
12
27
  import { clean } from "#util/clean";
13
28
  import { isValidDate } from "#util/date";
@@ -15,12 +30,6 @@ import { randomInt } from "#util/generate";
15
30
  import { err } from "#util/result";
16
31
  import { isdigits } from "#util/strings";
17
32
 
18
- import type {
19
- ParsedPersonId,
20
- ValidateResult,
21
- Validator,
22
- } from "../types";
23
-
24
33
  const WEIGHTS_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1] as const;
25
34
  const WEIGHTS_2 = [3, 4, 5, 6, 7, 8, 9, 1, 2, 3] as const;
26
35
 
@@ -31,8 +40,6 @@ const centuryMap: Record<number, number> = {
31
40
  4: 1900,
32
41
  5: 2000,
33
42
  6: 2000,
34
- 7: 2100,
35
- 8: 2100,
36
43
  };
37
44
 
38
45
  const compact = (value: string): string =>
@@ -65,7 +72,9 @@ const validate = (value: string): ValidateResult => {
65
72
  }
66
73
 
67
74
  const g = Number(v[0]);
68
- if (g < 1 || g > 8) {
75
+ // Official Estonian structure uses 1-6:
76
+ // 1-2 = 1800s, 3-4 = 1900s, 5-6 = 2000s.
77
+ if (g < 1 || g > 6) {
69
78
  return err(
70
79
  "INVALID_COMPONENT",
71
80
  "Isikukood gender/century digit is invalid",
@@ -135,12 +144,13 @@ const generate = (): string => {
135
144
  };
136
145
 
137
146
  /** Estonian Personal Identification Code. */
138
- const ik: Validator = {
147
+ const ik: CountryValidator<"EE", ParsedPersonId> = {
139
148
  name: "Estonian Personal ID",
140
149
  localName: "Isikukood",
141
150
  abbreviation: "IK",
142
151
  aliases: ["isikukood", "IK"] as const,
143
152
  candidatePattern: "[1-6]\\d{10}",
153
+ scope: "country",
144
154
  country: "EE",
145
155
  entityType: "person",
146
156
  sourceUrl:
@@ -148,6 +158,7 @@ const ik: Validator = {
148
158
  examples: ["36805280109"] as const,
149
159
  compact,
150
160
  format,
161
+ parse,
151
162
  validate,
152
163
  generate,
153
164
  };
@@ -7,14 +7,17 @@
7
7
  * @see https://www.rik.ee/
8
8
  */
9
9
 
10
+ import type {
11
+ ValidateResult,
12
+ CountryValidator,
13
+ } from "../types";
14
+ import { twoPassCheck } from "./ik";
15
+
10
16
  import { clean } from "#util/clean";
11
- import { randomDigits, randomInt } from "#util/generate";
17
+ import { randomDigits, randomPick } from "#util/generate";
12
18
  import { err } from "#util/result";
13
19
  import { isdigits } from "#util/strings";
14
20
 
15
- import type { ValidateResult, Validator } from "../types";
16
- import { twoPassCheck } from "./ik";
17
-
18
21
  const VALID_FIRST = new Set(["1", "7", "8", "9"]);
19
22
 
20
23
  const compact = (value: string): string =>
@@ -52,21 +55,23 @@ const validate = (value: string): ValidateResult => {
52
55
 
53
56
  const format = (value: string): string => compact(value);
54
57
 
58
+ const REGISTRIKOOD_FIRSTS = [1, 7, 8, 9] as const;
59
+
55
60
  /** Generate a random valid Estonian Registrikood. */
56
61
  const generate = (): string => {
57
- const firsts = [1, 7, 8, 9];
58
- const first = String(firsts[randomInt(0, 3)]!);
62
+ const first = String(randomPick(REGISTRIKOOD_FIRSTS));
59
63
  const payload = first + randomDigits(6);
60
64
  return payload + String(twoPassCheck(payload));
61
65
  };
62
66
 
63
67
  /** Estonian Company Registration Code. */
64
- const registrikood: Validator = {
68
+ const registrikood: CountryValidator<"EE"> = {
65
69
  name: "Estonian Company Registration Code",
66
70
  localName: "Registrikood",
67
71
  abbreviation: "Registrikood",
68
72
  aliases: ["registrikood"] as const,
69
73
  candidatePattern: "\\d{8}",
74
+ scope: "country",
70
75
  country: "EE",
71
76
  entityType: "company",
72
77
  sourceUrl: "https://www.rik.ee/",
package/src/ee/vat.ts CHANGED
@@ -8,14 +8,17 @@
8
8
  * @see https://www.emta.ee/en
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 = [3, 7, 1, 3, 7, 1, 3, 7, 1];
20
23
 
21
24
  const compact = (value: string): string => {
@@ -62,7 +65,7 @@ const generate = (): string => {
62
65
  };
63
66
 
64
67
  /** Estonian VAT Number. */
65
- const vat: Validator = {
68
+ const vat: CountryValidator<"EE"> = {
66
69
  name: "Estonian VAT Number",
67
70
  localName: "Käibemaksukohustuslase number",
68
71
  abbreviation: "KMKR",
@@ -71,6 +74,7 @@ const vat: Validator = {
71
74
  "KMKR",
72
75
  ] as const,
73
76
  candidatePattern: "EE\\d{9}",
77
+ scope: "country",
74
78
  country: "EE",
75
79
  entityType: "company",
76
80
  sourceUrl: "https://www.emta.ee/en",
package/src/eg/tn.ts CHANGED
@@ -11,13 +11,16 @@ const generate = (): string => randomDigits(9);
11
11
  * @see https://www.eta.gov.eg/
12
12
  */
13
13
 
14
+ import type {
15
+ ValidateResult,
16
+ CountryValidator,
17
+ } from "../types";
18
+
14
19
  import { clean } from "#util/clean";
15
20
  import { randomDigits } 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
  /**
22
25
  * Arabic-Indic and Extended Arabic-Indic digit map.
23
26
  * Converts Arabic numeral characters to ASCII digits.
@@ -81,12 +84,13 @@ const format = (value: string): string => {
81
84
  };
82
85
 
83
86
  /** Egyptian Tax Registration Number. */
84
- const tn: Validator = {
87
+ const tn: CountryValidator<"EG"> = {
85
88
  name: "Egyptian Tax Registration Number",
86
89
  localName: "الرقم الضريبي",
87
90
  abbreviation: "TN",
88
91
  aliases: ["الرقم الضريبي", "tax number"] as const,
89
92
  candidatePattern: "\\d{9}",
93
+ scope: "country",
90
94
  country: "EG",
91
95
  entityType: "any",
92
96
  compact,
package/src/es/cif.ts CHANGED
@@ -9,14 +9,17 @@
9
9
  * @see https://www.agenciatributaria.es/
10
10
  */
11
11
 
12
+ import type {
13
+ ValidateResult,
14
+ CountryValidator,
15
+ } from "../types";
16
+ import { cifChecksum } from "./vat";
17
+
12
18
  import { clean } from "#util/clean";
13
- import { randomDigits, randomInt } from "#util/generate";
19
+ import { randomChar, randomDigits } from "#util/generate";
14
20
  import { err } from "#util/result";
15
21
  import { isdigits } from "#util/strings";
16
22
 
17
- import type { ValidateResult, Validator } from "../types";
18
- import { cifChecksum } from "./vat";
19
-
20
23
  const CIF_PREFIXES = "ABCDEFGHJNPQRSUVW";
21
24
  const CIF_LETTERS = "JABCDEFGHI";
22
25
 
@@ -72,8 +75,7 @@ const format = (value: string): string => compact(value);
72
75
 
73
76
  /** Generate a random valid Spanish CIF. */
74
77
  const generate = (): string => {
75
- const letter =
76
- CIF_PREFIXES[randomInt(0, CIF_PREFIXES.length - 1)]!;
78
+ const letter = randomChar(CIF_PREFIXES);
77
79
  const payload = randomDigits(7);
78
80
  const check = cifChecksum(payload);
79
81
  if ("KPQS".includes(letter))
@@ -82,7 +84,7 @@ const generate = (): string => {
82
84
  };
83
85
 
84
86
  /** Spanish Company Tax ID (CIF). */
85
- const cif: Validator = {
87
+ const cif: CountryValidator<"ES"> = {
86
88
  name: "Spanish Company Tax ID",
87
89
  localName: "Código de Identificación Fiscal",
88
90
  abbreviation: "CIF",
@@ -91,6 +93,7 @@ const cif: Validator = {
91
93
  "código de identificación fiscal",
92
94
  ] as const,
93
95
  candidatePattern: "[A-HJNP-SUVW]\\d{7}[\\dA-J]",
96
+ scope: "country",
94
97
  country: "ES",
95
98
  entityType: "company",
96
99
  sourceUrl: "https://www.agenciatributaria.es/",
package/src/es/dni.ts CHANGED
@@ -8,13 +8,16 @@
8
8
  * @see https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/dni/
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 CHECK_LETTERS = "TRWAGMYFPDXBNJZSQVHLCKE";
19
22
 
20
23
  const compact = (value: string): string =>
@@ -59,7 +62,7 @@ const generate = (): string => {
59
62
  };
60
63
 
61
64
  /** Spanish National Identity Document. */
62
- const dni: Validator = {
65
+ const dni: CountryValidator<"ES"> = {
63
66
  name: "Spanish National ID",
64
67
  localName: "Documento Nacional de Identidad",
65
68
  abbreviation: "DNI",
@@ -69,6 +72,7 @@ const dni: Validator = {
69
72
  "documento nacional de identidad",
70
73
  ] as const,
71
74
  candidatePattern: "\\d{1,2}\\.?\\d{3}\\.?\\d{3}-?[A-Z]",
75
+ scope: "country",
72
76
  country: "ES",
73
77
  entityType: "person",
74
78
  sourceUrl:
package/src/es/nie.ts CHANGED
@@ -8,14 +8,17 @@
8
8
  * @see https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/nie/
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+ import { CHECK_LETTERS } from "./dni";
16
+
11
17
  import { clean } from "#util/clean";
12
- import { randomDigits, randomInt } from "#util/generate";
18
+ import { randomDigits, randomPick } from "#util/generate";
13
19
  import { err } from "#util/result";
14
20
  import { isdigits } from "#util/strings";
15
21
 
16
- import type { ValidateResult, Validator } from "../types";
17
- import { CHECK_LETTERS } from "./dni";
18
-
19
22
  const PREFIX_MAP: Record<string, string> = {
20
23
  X: "0",
21
24
  Y: "1",
@@ -66,18 +69,23 @@ const validate = (value: string): ValidateResult => {
66
69
 
67
70
  const format = (value: string): string => compact(value);
68
71
 
72
+ const NIE_PREFIXES = ["X", "Y", "Z"] as const;
73
+ const NIE_PREFIX_VALUES: Record<
74
+ (typeof NIE_PREFIXES)[number],
75
+ number
76
+ > = { X: 0, Y: 1, Z: 2 };
77
+
69
78
  /** Generate a random valid Spanish NIE. */
70
79
  const generate = (): string => {
71
- const prefixes = ["X", "Y", "Z"] as const;
72
- const vals: Record<string, number> = { X: 0, Y: 1, Z: 2 };
73
- const prefix = prefixes[randomInt(0, 2)]!;
80
+ const prefix = randomPick(NIE_PREFIXES);
74
81
  const digits = randomDigits(7);
75
- const num = vals[prefix]! * 10000000 + Number(digits);
82
+ const num =
83
+ NIE_PREFIX_VALUES[prefix] * 10000000 + Number(digits);
76
84
  return prefix + digits + CHECK_LETTERS.charAt(num % 23);
77
85
  };
78
86
 
79
87
  /** Spanish Foreigner Identification Number. */
80
- const nie: Validator = {
88
+ const nie: CountryValidator<"ES"> = {
81
89
  name: "Spanish Foreigner ID",
82
90
  localName: "Número de Identidad de Extranjero",
83
91
  abbreviation: "NIE",
@@ -87,6 +95,7 @@ const nie: Validator = {
87
95
  "número de identidad de extranjero",
88
96
  ] as const,
89
97
  candidatePattern: "[XYZ]-?\\d{7}-?[A-Z]",
98
+ scope: "country",
90
99
  country: "ES",
91
100
  entityType: "person",
92
101
  sourceUrl:
package/src/es/nss.ts CHANGED
@@ -15,13 +15,16 @@
15
15
  * @see https://intervia.com/doc/validar-numeros-de-la-seguridad-social/
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 } 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, " -/.");
27
30
 
@@ -85,12 +88,13 @@ const generate = (): string => {
85
88
  };
86
89
 
87
90
  /** Spanish Social Security Number. */
88
- const nss: Validator = {
91
+ const nss: CountryValidator<"ES"> = {
89
92
  name: "Spanish Social Security Number",
90
93
  localName: "Número de la Seguridad Social",
91
94
  abbreviation: "NSS",
92
95
  aliases: ["NSS", "número de seguridad social"] as const,
93
96
  candidatePattern: "\\d{12}",
97
+ scope: "country",
94
98
  country: "ES",
95
99
  entityType: "person",
96
100
  description:
package/src/es/vat.ts CHANGED
@@ -8,13 +8,16 @@
8
8
  * @see https://www.agenciatributaria.es/
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 DNI_LETTERS = "TRWAGMYFPDXBNJZSQVHLCKE";
19
22
  const CIF_LETTERS = "JABCDEFGHI";
20
23
 
@@ -70,8 +73,12 @@ const validate = (value: string): ValidateResult => {
70
73
 
71
74
  // NIE: X/Y/Z + 7 digits + letter
72
75
  if (first === "X" || first === "Y" || first === "Z") {
73
- const prefix =
74
- first === "X" ? "0" : first === "Y" ? "1" : "2";
76
+ let prefix = "2";
77
+ if (first === "X") {
78
+ prefix = "0";
79
+ } else if (first === "Y") {
80
+ prefix = "1";
81
+ }
75
82
  const digits = prefix + v.slice(1, 8);
76
83
  if (!isdigits(digits) || !isdigits(v.slice(1, 8))) {
77
84
  return err(
@@ -154,7 +161,7 @@ const generate = (): string => {
154
161
  };
155
162
 
156
163
  /** Spanish VAT Number. */
157
- const vat: Validator = {
164
+ const vat: CountryValidator<"ES"> = {
158
165
  name: "Spanish VAT Number",
159
166
  localName: "Número de Identificación Fiscal",
160
167
  abbreviation: "NIF",
@@ -164,6 +171,7 @@ const vat: Validator = {
164
171
  "número de identificación fiscal",
165
172
  ] as const,
166
173
  candidatePattern: "ES[A-Z]\\d{7}[A-Z\\d]",
174
+ scope: "country",
167
175
  country: "ES",
168
176
  entityType: "any",
169
177
  sourceUrl: "https://www.agenciatributaria.es/",
package/src/eu/vat.ts CHANGED
@@ -12,9 +12,6 @@
12
12
  * @see https://ec.europa.eu/taxation_customs/vies/
13
13
  */
14
14
 
15
- import { clean } from "#util/clean";
16
- import { err } from "#util/result";
17
-
18
15
  import atUid from "../at/uid";
19
16
  import beVat from "../be/vat";
20
17
  import bgVat from "../bg/vat";
@@ -43,7 +40,14 @@ import roVat from "../ro/vat";
43
40
  import seVat from "../se/vat";
44
41
  import siVat from "../si/vat";
45
42
  import skDic from "../sk/dic";
46
- import type { Validator, ValidateResult } from "../types";
43
+ import type {
44
+ GlobalValidator,
45
+ ValidateResult,
46
+ } from "../types";
47
+
48
+ import { clean } from "#util/clean";
49
+ import { randomInt } from "#util/generate";
50
+ import { err } from "#util/result";
47
51
 
48
52
  type CountryValidator = {
49
53
  compact: (value: string) => string;
@@ -152,8 +156,52 @@ const format = (value: string): string => {
152
156
  return `${parts.cc}${validator.compact(parts.rest)}`;
153
157
  };
154
158
 
159
+ const GENERATORS = [
160
+ ["AT", atUid],
161
+ ["BE", beVat],
162
+ ["BG", bgVat],
163
+ ["CY", cyVat],
164
+ ["CZ", czDic],
165
+ ["DE", deVat],
166
+ ["DK", dkVat],
167
+ ["EE", eeVat],
168
+ ["ES", esVat],
169
+ ["FI", fiVat],
170
+ ["FR", frTva],
171
+ ["GR", grVat],
172
+ ["HR", hrVat],
173
+ ["HU", huVat],
174
+ ["IE", ieVat],
175
+ ["IT", itIva],
176
+ ["LT", ltVat],
177
+ ["LU", luVat],
178
+ ["LV", lvVat],
179
+ ["MT", mtVat],
180
+ ["NL", nlVat],
181
+ ["PL", plNip],
182
+ ["PT", ptVat],
183
+ ["RO", roVat],
184
+ ["SE", seVat],
185
+ ["SI", siVat],
186
+ ["SK", skDic],
187
+ ] as const;
188
+
189
+ /** Generate a random EU VAT number from a member validator. */
190
+ const generate = (): string => {
191
+ for (;;) {
192
+ const candidate =
193
+ GENERATORS[randomInt(0, GENERATORS.length - 1)];
194
+ if (!candidate) continue;
195
+
196
+ const [prefix, validator] = candidate;
197
+ if (validator.generate === undefined) continue;
198
+ return `${prefix}${validator.generate()}`;
199
+ }
200
+ };
201
+
155
202
  /** European Union VAT Number. */
156
- const euVat: Validator = {
203
+ const euVat: GlobalValidator = {
204
+ scope: "global",
157
205
  name: "EU VAT Number",
158
206
  localName: "EU VAT Number",
159
207
  abbreviation: "EU VAT",
@@ -165,7 +213,8 @@ const euVat: Validator = {
165
213
  compact,
166
214
  format,
167
215
  validate,
216
+ generate,
168
217
  };
169
218
 
170
219
  export default euVat;
171
- export { compact, format, validate };
220
+ export { compact, format, generate, validate };