@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/ua/edrpou.ts CHANGED
@@ -10,13 +10,16 @@
10
10
  * @see https://usr.minjust.gov.ua/
11
11
  */
12
12
 
13
+ import type {
14
+ ValidateResult,
15
+ CountryValidator,
16
+ } from "../types";
17
+
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_A = [1, 2, 3, 4, 5, 6, 7] as const;
21
24
  const WEIGHTS_B = [7, 1, 2, 3, 4, 5, 6] as const;
22
25
  const WEIGHTS_A2 = [3, 4, 5, 6, 7, 8, 9] as const;
@@ -27,8 +30,9 @@ const calcCheck = (
27
30
  weights: readonly number[],
28
31
  ): number => {
29
32
  let sum = 0;
30
- for (let i = 0; i < 7; i++) {
31
- sum += Number(value[i]) * weights[i]!;
33
+ for (const [i, weight] of weights.entries()) {
34
+ if (i >= 7) break;
35
+ sum += Number(value[i]) * weight;
32
36
  }
33
37
  return sum % 11;
34
38
  };
@@ -82,12 +86,13 @@ const generate = (): string => {
82
86
  };
83
87
 
84
88
  /** Ukrainian Company Register Number. */
85
- const edrpou: Validator = {
89
+ const edrpou: CountryValidator<"UA"> = {
86
90
  name: "Ukrainian Company Register Number",
87
91
  localName: "ЄДРПОУ",
88
92
  abbreviation: "ЄДРПОУ",
89
93
  aliases: ["ЄДРПОУ", "EDRPOU"] as const,
90
94
  candidatePattern: "\\d{8}",
95
+ scope: "country",
91
96
  country: "UA",
92
97
  entityType: "company",
93
98
  lengths: [8] as const,
package/src/us/ein.ts CHANGED
@@ -1,92 +1,92 @@
1
+ const EIN_PREFIXES = [
2
+ "01",
3
+ "02",
4
+ "03",
5
+ "04",
6
+ "05",
7
+ "06",
8
+ "10",
9
+ "11",
10
+ "12",
11
+ "13",
12
+ "14",
13
+ "15",
14
+ "16",
15
+ "20",
16
+ "21",
17
+ "22",
18
+ "23",
19
+ "24",
20
+ "25",
21
+ "26",
22
+ "27",
23
+ "30",
24
+ "31",
25
+ "32",
26
+ "33",
27
+ "34",
28
+ "35",
29
+ "36",
30
+ "37",
31
+ "38",
32
+ "39",
33
+ "40",
34
+ "41",
35
+ "42",
36
+ "43",
37
+ "44",
38
+ "45",
39
+ "46",
40
+ "47",
41
+ "48",
42
+ "50",
43
+ "51",
44
+ "52",
45
+ "53",
46
+ "54",
47
+ "55",
48
+ "56",
49
+ "57",
50
+ "58",
51
+ "59",
52
+ "60",
53
+ "61",
54
+ "62",
55
+ "63",
56
+ "64",
57
+ "65",
58
+ "66",
59
+ "67",
60
+ "68",
61
+ "71",
62
+ "72",
63
+ "73",
64
+ "74",
65
+ "75",
66
+ "76",
67
+ "77",
68
+ "80",
69
+ "81",
70
+ "82",
71
+ "83",
72
+ "84",
73
+ "85",
74
+ "86",
75
+ "87",
76
+ "88",
77
+ "90",
78
+ "91",
79
+ "92",
80
+ "93",
81
+ "94",
82
+ "95",
83
+ "98",
84
+ "99",
85
+ ] as const;
86
+
1
87
  /** Generate a random valid U.S. EIN. */
2
88
  const generate = (): string => {
3
- const prefixes = [
4
- "01",
5
- "02",
6
- "03",
7
- "04",
8
- "05",
9
- "06",
10
- "10",
11
- "11",
12
- "12",
13
- "13",
14
- "14",
15
- "15",
16
- "16",
17
- "20",
18
- "21",
19
- "22",
20
- "23",
21
- "24",
22
- "25",
23
- "26",
24
- "27",
25
- "30",
26
- "31",
27
- "32",
28
- "33",
29
- "34",
30
- "35",
31
- "36",
32
- "37",
33
- "38",
34
- "39",
35
- "40",
36
- "41",
37
- "42",
38
- "43",
39
- "44",
40
- "45",
41
- "46",
42
- "47",
43
- "48",
44
- "50",
45
- "51",
46
- "52",
47
- "53",
48
- "54",
49
- "55",
50
- "56",
51
- "57",
52
- "58",
53
- "59",
54
- "60",
55
- "61",
56
- "62",
57
- "63",
58
- "64",
59
- "65",
60
- "66",
61
- "67",
62
- "68",
63
- "71",
64
- "72",
65
- "73",
66
- "74",
67
- "75",
68
- "76",
69
- "77",
70
- "80",
71
- "81",
72
- "82",
73
- "83",
74
- "84",
75
- "85",
76
- "86",
77
- "87",
78
- "88",
79
- "90",
80
- "91",
81
- "92",
82
- "93",
83
- "94",
84
- "95",
85
- "98",
86
- "99",
87
- ];
88
- const prefix =
89
- prefixes[randomInt(0, prefixes.length - 1)]!;
89
+ const prefix = randomPick(EIN_PREFIXES);
90
90
  return prefix + randomDigits(7);
91
91
  };
92
92
 
@@ -101,13 +101,16 @@ const generate = (): string => {
101
101
  * @see https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes
102
102
  */
103
103
 
104
+ import type {
105
+ ValidateResult,
106
+ CountryValidator,
107
+ } from "../types";
108
+
104
109
  import { clean } from "#util/clean";
105
- import { randomDigits, randomInt } from "#util/generate";
110
+ import { randomDigits, randomPick } from "#util/generate";
106
111
  import { err } from "#util/result";
107
112
  import { isdigits } from "#util/strings";
108
113
 
109
- import type { ValidateResult, Validator } from "../types";
110
-
111
114
  /**
112
115
  * Valid EIN campus prefixes. Sourced from IRS
113
116
  * documentation and python-stdnum's numdb.
@@ -232,7 +235,7 @@ const format = (value: string): string => {
232
235
  };
233
236
 
234
237
  /** U.S. Employer Identification Number. */
235
- const ein: Validator = {
238
+ const ein: CountryValidator<"US"> = {
236
239
  name: "Employer Identification Number",
237
240
  localName: "Employer Identification Number",
238
241
  abbreviation: "EIN",
@@ -242,6 +245,7 @@ const ein: Validator = {
242
245
  "Federal Tax ID",
243
246
  ] as const,
244
247
  candidatePattern: "\\d{2}-?\\d{7}",
248
+ scope: "country",
245
249
  country: "US",
246
250
  entityType: "company",
247
251
  sourceUrl:
package/src/us/itin.ts CHANGED
@@ -1,13 +1,12 @@
1
+ const ITIN_ALLOWED_GROUPS = Array.from(
2
+ { length: 30 },
3
+ (_, i) => i + 70,
4
+ ).filter((g) => g !== 89 && g !== 93);
5
+
1
6
  /** Generate a random valid U.S. ITIN. */
2
7
  const generate = (): string => {
3
8
  const area = "9" + randomDigits(2);
4
- const allowed = Array.from(
5
- { length: 30 },
6
- (_, i) => i + 70,
7
- ).filter((g) => g !== 89 && g !== 93);
8
- const group = String(
9
- allowed[randomInt(0, allowed.length - 1)]!,
10
- );
9
+ const group = String(randomPick(ITIN_ALLOWED_GROUPS));
11
10
  const serial = randomDigits(4);
12
11
  return `${area}${group}${serial}`;
13
12
  };
@@ -24,13 +23,16 @@ const generate = (): string => {
24
23
  * @see https://www.irs.gov/individuals/individual-taxpayer-identification-number
25
24
  */
26
25
 
26
+ import type {
27
+ ValidateResult,
28
+ CountryValidator,
29
+ } from "../types";
30
+
27
31
  import { clean } from "#util/clean";
28
- import { randomDigits, randomInt } from "#util/generate";
32
+ import { randomDigits, randomPick } from "#util/generate";
29
33
  import { err } from "#util/result";
30
34
  import { isdigits } from "#util/strings";
31
35
 
32
- import type { ValidateResult, Validator } from "../types";
33
-
34
36
  const ITIN_RE = /^(?<area>\d{3})-?(?<group>\d{2})-?\d{4}$/;
35
37
 
36
38
  /** Groups 70-99 excluding 89 and 93. */
@@ -100,7 +102,7 @@ const format = (value: string): string => {
100
102
  /**
101
103
  * U.S. Individual Taxpayer Identification Number.
102
104
  */
103
- const itin: Validator = {
105
+ const itin: CountryValidator<"US"> = {
104
106
  name: "Individual Taxpayer Identification Number",
105
107
  localName: "Individual Taxpayer Identification Number",
106
108
  abbreviation: "ITIN",
@@ -109,6 +111,7 @@ const itin: Validator = {
109
111
  "Individual Taxpayer Identification Number",
110
112
  ] as const,
111
113
  candidatePattern: "9\\d{2}[\\s-]?\\d{2}[\\s-]?\\d{4}",
114
+ scope: "country",
112
115
  country: "US",
113
116
  entityType: "person",
114
117
  sourceUrl:
package/src/us/rtn.ts CHANGED
@@ -7,22 +7,29 @@
7
7
  * [3, 7, 1] repeated three times.
8
8
  *
9
9
  * The first two digits identify the Federal Reserve
10
- * district (01-12) or special ranges (21-32 for
11
- * thrifts, 61-72 for electronic, 80 for traveler's
12
- * cheques).
10
+ * district (01-12) or special ranges (00 for U.S.
11
+ * Government, 21-32 for thrifts, 61-72 for electronic,
12
+ * 80 for traveler's cheques).
13
13
  *
14
14
  * @see https://en.wikipedia.org/wiki/ABA_routing_transit_number
15
15
  * @see https://www.frbservices.org/
16
16
  */
17
17
 
18
+ import type {
19
+ ValidateResult,
20
+ CountryValidator,
21
+ } from "../types";
22
+
18
23
  import { clean } from "#util/clean";
19
- import { randomDigits, randomInt } from "#util/generate";
24
+ import {
25
+ randomDigits,
26
+ randomInt,
27
+ randomPick,
28
+ } from "#util/generate";
20
29
  import { err } from "#util/result";
21
30
  import { isdigits } from "#util/strings";
22
31
 
23
- import type { ValidateResult, Validator } from "../types";
24
-
25
- const WEIGHTS = [3, 7, 1, 3, 7, 1, 3, 7, 1];
32
+ const WEIGHTS = [3, 7, 1, 3, 7, 1, 3, 7, 1] as const;
26
33
 
27
34
  const compact = (value: string): string =>
28
35
  clean(value, " -").trim();
@@ -44,7 +51,11 @@ const validate = (value: string): ValidateResult => {
44
51
  // Validate Federal Reserve prefix (first 2 digits)
45
52
  const prefix = Number(v.slice(0, 2));
46
53
  const validPrefixRanges =
47
- (prefix >= 1 && prefix <= 12) ||
54
+ // 00 is reserved for U.S. Government and federal
55
+ // agencies per the ABA Routing Number Policy;
56
+ // 01-12 are the 12 Federal Reserve districts.
57
+ // @see https://en.wikipedia.org/wiki/ABA_routing_transit_number
58
+ (prefix >= 0 && prefix <= 12) ||
48
59
  (prefix >= 21 && prefix <= 32) ||
49
60
  (prefix >= 61 && prefix <= 72) ||
50
61
  prefix === 80;
@@ -57,8 +68,8 @@ const validate = (value: string): ValidateResult => {
57
68
 
58
69
  // Weighted checksum must be divisible by 10
59
70
  let sum = 0;
60
- for (let i = 0; i < 9; i++) {
61
- sum += Number(v[i]) * WEIGHTS[i]!;
71
+ for (const [i, weight] of WEIGHTS.entries()) {
72
+ sum += Number(v[i]) * weight;
62
73
  }
63
74
  if (sum % 10 !== 0) {
64
75
  return err(
@@ -74,7 +85,7 @@ const format = (value: string): string => compact(value);
74
85
 
75
86
  /** All valid Federal Reserve prefix ranges. */
76
87
  const PREFIX_RANGES: readonly [number, number][] = [
77
- [1, 12],
88
+ [0, 12],
78
89
  [21, 32],
79
90
  [61, 72],
80
91
  [80, 80],
@@ -82,23 +93,24 @@ const PREFIX_RANGES: readonly [number, number][] = [
82
93
 
83
94
  /** Generate a random valid U.S. RTN. */
84
95
  const generate = (): string => {
85
- const range =
86
- PREFIX_RANGES[randomInt(0, PREFIX_RANGES.length - 1)]!;
87
- const prefix = String(
88
- randomInt(range[0], range[1]),
89
- ).padStart(2, "0");
96
+ const [low, high] = randomPick(PREFIX_RANGES);
97
+ const prefix = String(randomInt(low, high)).padStart(
98
+ 2,
99
+ "0",
100
+ );
90
101
  const mid = randomDigits(6);
91
102
  const body = prefix + mid;
92
103
  let sum = 0;
93
- for (let i = 0; i < 8; i++) {
94
- sum += Number(body[i]) * WEIGHTS[i]!;
104
+ for (const [i, weight] of WEIGHTS.entries()) {
105
+ if (i >= 8) break;
106
+ sum += Number(body[i]) * weight;
95
107
  }
96
108
  const check = (10 - (sum % 10)) % 10;
97
109
  return body + String(check);
98
110
  };
99
111
 
100
112
  /** U.S. Routing Transit Number. */
101
- const rtn: Validator = {
113
+ const rtn: CountryValidator<"US"> = {
102
114
  name: "Routing Transit Number",
103
115
  localName: "Routing Transit Number",
104
116
  abbreviation: "RTN",
@@ -110,6 +122,7 @@ const rtn: Validator = {
110
122
  "Routing Transit Number",
111
123
  ] as const,
112
124
  candidatePattern: "\\d{9}",
125
+ scope: "country",
113
126
  country: "US",
114
127
  entityType: "company",
115
128
  sourceUrl:
package/src/us/ssn.ts CHANGED
@@ -27,13 +27,16 @@ const generate = (): string => {
27
27
  * @see https://www.ssa.gov/employer/verifySSN.htm
28
28
  */
29
29
 
30
+ import type {
31
+ ValidateResult,
32
+ CountryValidator,
33
+ } from "../types";
34
+
30
35
  import { clean } from "#util/clean";
31
36
  import { randomInt } from "#util/generate";
32
37
  import { err } from "#util/result";
33
38
  import { isdigits } from "#util/strings";
34
39
 
35
- import type { ValidateResult, Validator } from "../types";
36
-
37
40
  /** Known-invalid SSNs used in advertisements. */
38
41
  const BLACKLIST = new Set([
39
42
  "078051120",
@@ -97,12 +100,13 @@ const format = (value: string): string => {
97
100
  };
98
101
 
99
102
  /** U.S. Social Security Number. */
100
- const ssn: Validator = {
103
+ const ssn: CountryValidator<"US"> = {
101
104
  name: "Social Security Number",
102
105
  localName: "Social Security Number",
103
106
  abbreviation: "SSN",
104
107
  aliases: ["SSN", "Social Security Number"] as const,
105
108
  candidatePattern: "\\d{3}-?\\d{2}-?\\d{4}",
109
+ scope: "country",
106
110
  country: "US",
107
111
  entityType: "person",
108
112
  sourceUrl: "https://www.ssa.gov/employer/verifySSN.htm",
package/src/uy/rut.ts CHANGED
@@ -13,13 +13,16 @@
13
13
  * @see https://www.agesic.gub.uy/
14
14
  */
15
15
 
16
+ import type {
17
+ ValidateResult,
18
+ CountryValidator,
19
+ } from "../types";
20
+
16
21
  import { clean } from "#util/clean";
17
22
  import { randomDigits, randomInt } 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 WEIGHTS = [4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;
24
27
 
25
28
  const compact = (value: string): string => {
@@ -39,8 +42,8 @@ const pymod = (a: number, b: number): number =>
39
42
 
40
43
  const calcCheckDigit = (value: string): string | null => {
41
44
  let sum = 0;
42
- for (let i = 0; i < 11; i++) {
43
- sum += Number(value[i]) * WEIGHTS[i]!;
45
+ for (const [i, weight] of WEIGHTS.entries()) {
46
+ sum += Number(value[i]) * weight;
44
47
  }
45
48
  const result = pymod(-sum, 11);
46
49
  // A result of 10 means no valid single-digit check
@@ -125,12 +128,13 @@ const generate = (): string => {
125
128
  *
126
129
  * Examples sourced from python-stdnum test suite.
127
130
  */
128
- const rut: Validator = {
131
+ const rut: CountryValidator<"UY"> = {
129
132
  name: "Uruguayan Tax ID",
130
133
  localName: "Registro Único Tributario",
131
134
  abbreviation: "RUT",
132
135
  aliases: ["RUT", "Registro Único Tributario"] as const,
133
136
  candidatePattern: "\\d{12}",
137
+ scope: "country",
134
138
  country: "UY",
135
139
  entityType: "any",
136
140
  lengths: [12] as const,
package/src/ve/rif.ts CHANGED
@@ -13,13 +13,16 @@
13
13
  * @see https://en.wikipedia.org/wiki/Tax_Identification_Number#Venezuela
14
14
  */
15
15
 
16
+ import type {
17
+ ValidateResult,
18
+ CountryValidator,
19
+ } from "../types";
20
+
16
21
  import { clean } from "#util/clean";
17
- import { randomDigits, randomInt } from "#util/generate";
22
+ import { randomDigits, randomPick } 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
  /**
24
27
  * Map prefix letter to its numeric offset used
25
28
  * in the check digit computation.
@@ -48,12 +51,14 @@ const calcCheckDigit = (
48
51
  prefix: string,
49
52
  body: string,
50
53
  ): string => {
51
- const pv = PREFIX_VALUES[prefix]!;
54
+ const pv = PREFIX_VALUES[prefix] ?? 0;
52
55
  let sum = 0;
53
- for (let i = 0; i < 8; i++) {
54
- sum += Number(body[i]) * WEIGHTS[i]!;
56
+ for (const [i, weight] of WEIGHTS.entries()) {
57
+ sum += Number(body[i]) * weight;
55
58
  }
56
59
  const digit = (pv + (sum % 11)) % 11;
60
+ // SAFETY: digit ∈ [0, 10] and CHECK_LOOKUP has 11 chars.
61
+ // eslint-disable-next-line no-non-null-assertion
57
62
  return CHECK_LOOKUP[digit]!;
58
63
  };
59
64
 
@@ -67,6 +72,8 @@ const validate = (value: string): ValidateResult => {
67
72
  );
68
73
  }
69
74
 
75
+ // SAFETY: length check above guarantees v[0] exists.
76
+ // eslint-disable-next-line no-non-null-assertion
70
77
  const prefix = v[0]!;
71
78
  if (!(prefix in PREFIX_VALUES)) {
72
79
  return err(
@@ -100,14 +107,13 @@ const format = (value: string): string => {
100
107
  return `${v[0]}-${v.slice(1, 9)}-${v.slice(9)}`;
101
108
  };
102
109
 
110
+ const GENERATE_TYPES = ["V", "E", "J", "P", "G"] as const;
111
+
103
112
  /** Generate a random valid Venezuelan RIF. */
104
113
  const generate = (): string => {
105
- const types = ["V", "E", "J", "P", "G"] as const;
106
- const prefix = types[randomInt(0, types.length - 1)]!;
114
+ const prefix = randomPick(GENERATE_TYPES);
107
115
  const body = randomDigits(8);
108
- return (
109
- prefix + body + String(calcCheckDigit(prefix, body))
110
- );
116
+ return prefix + body + calcCheckDigit(prefix, body);
111
117
  };
112
118
 
113
119
  /**
@@ -115,7 +121,7 @@ const generate = (): string => {
115
121
  *
116
122
  * Examples sourced from python-stdnum test suite.
117
123
  */
118
- const rif: Validator = {
124
+ const rif: CountryValidator<"VE"> = {
119
125
  name: "Venezuelan Tax ID",
120
126
  localName: "Registro de Información Fiscal",
121
127
  abbreviation: "RIF",
@@ -124,6 +130,7 @@ const rif: Validator = {
124
130
  "Registro de Información Fiscal",
125
131
  ] as const,
126
132
  candidatePattern: "[VEJPG]-?\\d{8}-?\\d",
133
+ scope: "country",
127
134
  country: "VE",
128
135
  entityType: "any",
129
136
  lengths: [10] as const,
package/src/vn/mst.ts CHANGED
@@ -11,13 +11,16 @@
11
11
  * @see https://easyinvoice.vn/ma-so-thue/
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, randomInt } from "#util/generate";
16
21
  import { err } from "#util/result";
17
22
  import { isdigits } from "#util/strings";
18
23
 
19
- import type { ValidateResult, Validator } from "../types";
20
-
21
24
  const WEIGHTS = [31, 29, 23, 19, 17, 13, 7, 5, 3] as const;
22
25
 
23
26
  const calcCheckDigit = (number: string): string => {
@@ -104,12 +107,13 @@ const generate = (): string => {
104
107
  };
105
108
 
106
109
  /** Vietnamese Tax Number. */
107
- const mst: Validator = {
110
+ const mst: CountryValidator<"VN"> = {
108
111
  name: "Vietnamese Tax Number",
109
112
  localName: "Mã số thuế",
110
113
  abbreviation: "MST",
111
114
  aliases: ["MST", "mã số thuế"] as const,
112
115
  candidatePattern: "\\d{10}(-\\d{3})?",
116
+ scope: "country",
113
117
  country: "VN",
114
118
  entityType: "company",
115
119
  description:
package/src/za/idnr.ts CHANGED
@@ -13,6 +13,12 @@
13
13
  * @see https://en.wikipedia.org/wiki/South_African_identity_document
14
14
  */
15
15
 
16
+ import type {
17
+ ParsedPersonId,
18
+ ValidateResult,
19
+ CountryValidator,
20
+ } from "../types";
21
+
16
22
  import {
17
23
  luhnValidate,
18
24
  luhnChecksum,
@@ -23,12 +29,6 @@ import { randomDigits, randomInt } from "#util/generate";
23
29
  import { err } from "#util/result";
24
30
  import { isdigits } from "#util/strings";
25
31
 
26
- import type {
27
- ParsedPersonId,
28
- ValidateResult,
29
- Validator,
30
- } from "../types";
31
-
32
32
  const compact = (value: string): string =>
33
33
  clean(value, " ");
34
34
 
@@ -132,16 +132,18 @@ const generate = (): string => {
132
132
  };
133
133
 
134
134
  /** South African Identity Number. */
135
- const idnr: Validator = {
135
+ const idnr: CountryValidator<"ZA", ParsedPersonId> = {
136
136
  name: "South African Identity Number",
137
137
  localName: "South African Identity Number",
138
138
  abbreviation: "SA ID",
139
139
  aliases: ["ID number", "RSA ID"] as const,
140
140
  candidatePattern: "\\d{13}",
141
+ scope: "country",
141
142
  country: "ZA",
142
143
  entityType: "person",
143
144
  compact,
144
145
  format,
146
+ parse,
145
147
  validate,
146
148
  description:
147
149
  "South African personal identification number",