@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/dist/ua/edrpou.js CHANGED
@@ -3,17 +3,6 @@ import { randomDigits } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/ua/edrpou.ts
6
- /**
7
- * EDRPOU (ЄДРПОУ, Unified State Register of
8
- * Enterprises and Organizations of Ukraine).
9
- *
10
- * 8-digit company identification number with a
11
- * weighted checksum. Two sets of weights are used
12
- * depending on whether the first digit is 0-2/6-9 or 3-5.
13
- *
14
- * @see https://en.wikipedia.org/wiki/EDRPOU
15
- * @see https://usr.minjust.gov.ua/
16
- */
17
6
  const WEIGHTS_A = [
18
7
  1,
19
8
  2,
@@ -52,7 +41,10 @@ const WEIGHTS_B2 = [
52
41
  ];
53
42
  const calcCheck = (value, weights) => {
54
43
  let sum = 0;
55
- for (let i = 0; i < 7; i++) sum += Number(value[i]) * weights[i];
44
+ for (const [i, weight] of weights.entries()) {
45
+ if (i >= 7) break;
46
+ sum += Number(value[i]) * weight;
47
+ }
56
48
  return sum % 11;
57
49
  };
58
50
  const compact = (value) => clean(value, " -");
@@ -87,6 +79,7 @@ const edrpou = {
87
79
  abbreviation: "ЄДРПОУ",
88
80
  aliases: ["ЄДРПОУ", "EDRPOU"],
89
81
  candidatePattern: "\\d{8}",
82
+ scope: "country",
90
83
  country: "UA",
91
84
  entityType: "company",
92
85
  lengths: [8],
@@ -1 +1 @@
1
- {"version":3,"file":"edrpou.js","names":[],"sources":["../../src/ua/edrpou.ts"],"sourcesContent":["/**\n * EDRPOU (ЄДРПОУ, Unified State Register of\n * Enterprises and Organizations of Ukraine).\n *\n * 8-digit company identification number with a\n * weighted checksum. Two sets of weights are used\n * depending on whether the first digit is 0-2/6-9 or 3-5.\n *\n * @see https://en.wikipedia.org/wiki/EDRPOU\n * @see https://usr.minjust.gov.ua/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst WEIGHTS_A = [1, 2, 3, 4, 5, 6, 7] as const;\nconst WEIGHTS_B = [7, 1, 2, 3, 4, 5, 6] as const;\nconst WEIGHTS_A2 = [3, 4, 5, 6, 7, 8, 9] as const;\nconst WEIGHTS_B2 = [9, 3, 4, 5, 6, 7, 8] as const;\n\nconst calcCheck = (\n value: string,\n weights: readonly number[],\n): number => {\n let sum = 0;\n for (let i = 0; i < 7; i++) {\n sum += Number(value[i]) * weights[i]!;\n }\n return sum % 11;\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"EDRPOU must be exactly 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"EDRPOU must contain only digits\",\n );\n }\n\n const firstDigit = Number(v[0]);\n const useA = firstDigit < 3 || firstDigit >= 6;\n const weightsFirst = useA ? WEIGHTS_A : WEIGHTS_B;\n const weightsSecond = useA ? WEIGHTS_A2 : WEIGHTS_B2;\n\n let check = calcCheck(v, weightsFirst);\n if (check >= 10) {\n check = calcCheck(v, weightsSecond) % 10;\n }\n\n if (check !== Number(v[7])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"EDRPOU check digit mismatch\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Ukrainian EDRPOU. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(8);\n if (validate(c).valid) return c;\n }\n};\n\n/** Ukrainian Company Register Number. */\nconst edrpou: Validator = {\n name: \"Ukrainian Company Register Number\",\n localName: \"ЄДРПОУ\",\n abbreviation: \"ЄДРПОУ\",\n aliases: [\"ЄДРПОУ\", \"EDRPOU\"] as const,\n candidatePattern: \"\\\\d{8}\",\n country: \"UA\",\n entityType: \"company\",\n lengths: [8] as const,\n sourceUrl: \"https://usr.minjust.gov.ua/\",\n examples: [\"14360570\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default edrpou;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,MAAM,YAAY;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;AACvC,MAAM,YAAY;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;AACvC,MAAM,aAAa;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;AACxC,MAAM,aAAa;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;AAExC,MAAM,aACJ,OACA,YACW;CACX,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,QAAO,OAAO,MAAM,GAAG,GAAG,QAAQ;AAEpC,QAAO,MAAM;;AAGf,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,kCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,kCACD;CAGH,MAAM,aAAa,OAAO,EAAE,GAAG;CAC/B,MAAM,OAAO,aAAa,KAAK,cAAc;CAC7C,MAAM,eAAe,OAAO,YAAY;CACxC,MAAM,gBAAgB,OAAO,aAAa;CAE1C,IAAI,QAAQ,UAAU,GAAG,aAAa;AACtC,KAAI,SAAS,GACX,SAAQ,UAAU,GAAG,cAAc,GAAG;AAGxC,KAAI,UAAU,OAAO,EAAE,GAAG,CACxB,QAAO,IACL,oBACA,8BACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,IAAI,aAAa,EAAE;AACzB,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,SAAoB;CACxB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,UAAU,SAAS;CAC7B,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,EAAE;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"edrpou.js","names":[],"sources":["../../src/ua/edrpou.ts"],"sourcesContent":["/**\n * EDRPOU (ЄДРПОУ, Unified State Register of\n * Enterprises and Organizations of Ukraine).\n *\n * 8-digit company identification number with a\n * weighted checksum. Two sets of weights are used\n * depending on whether the first digit is 0-2/6-9 or 3-5.\n *\n * @see https://en.wikipedia.org/wiki/EDRPOU\n * @see https://usr.minjust.gov.ua/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS_A = [1, 2, 3, 4, 5, 6, 7] as const;\nconst WEIGHTS_B = [7, 1, 2, 3, 4, 5, 6] as const;\nconst WEIGHTS_A2 = [3, 4, 5, 6, 7, 8, 9] as const;\nconst WEIGHTS_B2 = [9, 3, 4, 5, 6, 7, 8] as const;\n\nconst calcCheck = (\n value: string,\n weights: readonly number[],\n): number => {\n let sum = 0;\n for (const [i, weight] of weights.entries()) {\n if (i >= 7) break;\n sum += Number(value[i]) * weight;\n }\n return sum % 11;\n};\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"EDRPOU must be exactly 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"EDRPOU must contain only digits\",\n );\n }\n\n const firstDigit = Number(v[0]);\n const useA = firstDigit < 3 || firstDigit >= 6;\n const weightsFirst = useA ? WEIGHTS_A : WEIGHTS_B;\n const weightsSecond = useA ? WEIGHTS_A2 : WEIGHTS_B2;\n\n let check = calcCheck(v, weightsFirst);\n if (check >= 10) {\n check = calcCheck(v, weightsSecond) % 10;\n }\n\n if (check !== Number(v[7])) {\n return err(\n \"INVALID_CHECKSUM\",\n \"EDRPOU check digit mismatch\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Ukrainian EDRPOU. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(8);\n if (validate(c).valid) return c;\n }\n};\n\n/** Ukrainian Company Register Number. */\nconst edrpou: CountryValidator<\"UA\"> = {\n name: \"Ukrainian Company Register Number\",\n localName: \"ЄДРПОУ\",\n abbreviation: \"ЄДРПОУ\",\n aliases: [\"ЄДРПОУ\", \"EDRPOU\"] as const,\n candidatePattern: \"\\\\d{8}\",\n scope: \"country\",\n country: \"UA\",\n entityType: \"company\",\n lengths: [8] as const,\n sourceUrl: \"https://usr.minjust.gov.ua/\",\n examples: [\"14360570\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default edrpou;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAsBA,MAAM,YAAY;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AACtC,MAAM,YAAY;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AACtC,MAAM,aAAa;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AACvC,MAAM,aAAa;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEvC,MAAM,aACJ,OACA,YACW;CACX,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GAAG;EAC3C,IAAI,KAAK,GAAG;EACZ,OAAO,OAAO,MAAM,EAAE,IAAI;CAC5B;CACA,OAAO,MAAM;AACf;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,IACL,kBACA,iCACF;CAEF,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,iCACF;CAGF,MAAM,aAAa,OAAO,EAAE,EAAE;CAC9B,MAAM,OAAO,aAAa,KAAK,cAAc;CAC7C,MAAM,eAAe,OAAO,YAAY;CACxC,MAAM,gBAAgB,OAAO,aAAa;CAE1C,IAAI,QAAQ,UAAU,GAAG,YAAY;CACrC,IAAI,SAAS,IACX,QAAQ,UAAU,GAAG,aAAa,IAAI;CAGxC,IAAI,UAAU,OAAO,EAAE,EAAE,GACvB,OAAO,IACL,oBACA,6BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,iBAAyB;CAC7B,SAAS;EACP,MAAM,IAAI,aAAa,CAAC;EACxB,IAAI,SAAS,CAAC,EAAE,OAAO,OAAO;CAChC;AACF;;AAGA,MAAM,SAAiC;CACrC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,UAAU,QAAQ;CAC5B,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,SAAS,CAAC,CAAC;CACX,WAAW;CACX,UAAU,CAAC,UAAU;CACrB;CACA;CACA;CACA;AACF"}
package/dist/ua/mod.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import edrpou from "./edrpou.js";
3
2
 
4
3
  //#region src/ua/mod.d.ts
5
-
4
+ declare namespace mod_d_exports {
5
+ export { edrpou };
6
+ }
6
7
  //#endregion
7
8
  export { edrpou, mod_d_exports };
8
9
  //# sourceMappingURL=mod.d.ts.map
package/dist/us/ein.d.ts CHANGED
@@ -1,13 +1,23 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } from "../types.js";
2
2
 
3
3
  //#region src/us/ein.d.ts
4
4
  /** Generate a random valid U.S. EIN. */
5
5
  declare const generate: () => string;
6
+ /**
7
+ * EIN (U.S. Employer Identification Number).
8
+ *
9
+ * 9-digit identifier: 2-digit campus prefix +
10
+ * 7-digit group. No checksum. The first 2 digits
11
+ * must be a valid IRS campus code.
12
+ *
13
+ * @see https://en.wikipedia.org/wiki/Employer_Identification_Number
14
+ * @see https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes
15
+ */
6
16
  declare const compact: (value: string) => string;
7
17
  declare const validate: (value: string) => ValidateResult;
8
18
  declare const format: (value: string) => string;
9
19
  /** U.S. Employer Identification Number. */
10
- declare const ein: Validator;
20
+ declare const ein: CountryValidator<"US">;
11
21
  //#endregion
12
22
  export { compact, ein as default, format, generate, validate };
13
23
  //# sourceMappingURL=ein.d.ts.map
package/dist/us/ein.js CHANGED
@@ -1,106 +1,96 @@
1
1
  import { clean } from "../_util/clean.js";
2
- import { randomDigits, randomInt } from "../_util/generate.js";
2
+ import { randomDigits, randomPick } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/us/ein.ts
6
- /**
7
- * EIN (U.S. Employer Identification Number).
8
- *
9
- * 9-digit identifier: 2-digit campus prefix +
10
- * 7-digit group. No checksum. The first 2 digits
11
- * must be a valid IRS campus code.
12
- *
13
- * @see https://en.wikipedia.org/wiki/Employer_Identification_Number
14
- * @see https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes
15
- */
6
+ const EIN_PREFIXES = [
7
+ "01",
8
+ "02",
9
+ "03",
10
+ "04",
11
+ "05",
12
+ "06",
13
+ "10",
14
+ "11",
15
+ "12",
16
+ "13",
17
+ "14",
18
+ "15",
19
+ "16",
20
+ "20",
21
+ "21",
22
+ "22",
23
+ "23",
24
+ "24",
25
+ "25",
26
+ "26",
27
+ "27",
28
+ "30",
29
+ "31",
30
+ "32",
31
+ "33",
32
+ "34",
33
+ "35",
34
+ "36",
35
+ "37",
36
+ "38",
37
+ "39",
38
+ "40",
39
+ "41",
40
+ "42",
41
+ "43",
42
+ "44",
43
+ "45",
44
+ "46",
45
+ "47",
46
+ "48",
47
+ "50",
48
+ "51",
49
+ "52",
50
+ "53",
51
+ "54",
52
+ "55",
53
+ "56",
54
+ "57",
55
+ "58",
56
+ "59",
57
+ "60",
58
+ "61",
59
+ "62",
60
+ "63",
61
+ "64",
62
+ "65",
63
+ "66",
64
+ "67",
65
+ "68",
66
+ "71",
67
+ "72",
68
+ "73",
69
+ "74",
70
+ "75",
71
+ "76",
72
+ "77",
73
+ "80",
74
+ "81",
75
+ "82",
76
+ "83",
77
+ "84",
78
+ "85",
79
+ "86",
80
+ "87",
81
+ "88",
82
+ "90",
83
+ "91",
84
+ "92",
85
+ "93",
86
+ "94",
87
+ "95",
88
+ "98",
89
+ "99"
90
+ ];
16
91
  /** Generate a random valid U.S. EIN. */
17
92
  const generate = () => {
18
- const prefixes = [
19
- "01",
20
- "02",
21
- "03",
22
- "04",
23
- "05",
24
- "06",
25
- "10",
26
- "11",
27
- "12",
28
- "13",
29
- "14",
30
- "15",
31
- "16",
32
- "20",
33
- "21",
34
- "22",
35
- "23",
36
- "24",
37
- "25",
38
- "26",
39
- "27",
40
- "30",
41
- "31",
42
- "32",
43
- "33",
44
- "34",
45
- "35",
46
- "36",
47
- "37",
48
- "38",
49
- "39",
50
- "40",
51
- "41",
52
- "42",
53
- "43",
54
- "44",
55
- "45",
56
- "46",
57
- "47",
58
- "48",
59
- "50",
60
- "51",
61
- "52",
62
- "53",
63
- "54",
64
- "55",
65
- "56",
66
- "57",
67
- "58",
68
- "59",
69
- "60",
70
- "61",
71
- "62",
72
- "63",
73
- "64",
74
- "65",
75
- "66",
76
- "67",
77
- "68",
78
- "71",
79
- "72",
80
- "73",
81
- "74",
82
- "75",
83
- "76",
84
- "77",
85
- "80",
86
- "81",
87
- "82",
88
- "83",
89
- "84",
90
- "85",
91
- "86",
92
- "87",
93
- "88",
94
- "90",
95
- "91",
96
- "92",
97
- "93",
98
- "94",
99
- "95",
100
- "98",
101
- "99"
102
- ];
103
- return prefixes[randomInt(0, prefixes.length - 1)] + randomDigits(7);
93
+ return randomPick(EIN_PREFIXES) + randomDigits(7);
104
94
  };
105
95
  /**
106
96
  * Valid EIN campus prefixes. Sourced from IRS
@@ -219,6 +209,7 @@ const ein = {
219
209
  "Federal Tax ID"
220
210
  ],
221
211
  candidatePattern: "\\d{2}-?\\d{7}",
212
+ scope: "country",
222
213
  country: "US",
223
214
  entityType: "company",
224
215
  sourceUrl: "https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes",
@@ -1 +1 @@
1
- {"version":3,"file":"ein.js","names":[],"sources":["../../src/us/ein.ts"],"sourcesContent":["/** Generate a random valid U.S. EIN. */\nconst generate = (): string => {\n const prefixes = [\n \"01\",\n \"02\",\n \"03\",\n \"04\",\n \"05\",\n \"06\",\n \"10\",\n \"11\",\n \"12\",\n \"13\",\n \"14\",\n \"15\",\n \"16\",\n \"20\",\n \"21\",\n \"22\",\n \"23\",\n \"24\",\n \"25\",\n \"26\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"35\",\n \"36\",\n \"37\",\n \"38\",\n \"39\",\n \"40\",\n \"41\",\n \"42\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"50\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"59\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"67\",\n \"68\",\n \"71\",\n \"72\",\n \"73\",\n \"74\",\n \"75\",\n \"76\",\n \"77\",\n \"80\",\n \"81\",\n \"82\",\n \"83\",\n \"84\",\n \"85\",\n \"86\",\n \"87\",\n \"88\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n \"99\",\n ];\n const prefix =\n prefixes[randomInt(0, prefixes.length - 1)]!;\n return prefix + randomDigits(7);\n};\n\n/**\n * EIN (U.S. Employer Identification Number).\n *\n * 9-digit identifier: 2-digit campus prefix +\n * 7-digit group. No checksum. The first 2 digits\n * must be a valid IRS campus code.\n *\n * @see https://en.wikipedia.org/wiki/Employer_Identification_Number\n * @see https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/**\n * Valid EIN campus prefixes. Sourced from IRS\n * documentation and python-stdnum's numdb.\n */\nconst VALID_PREFIXES = new Set([\n \"01\",\n \"02\",\n \"03\",\n \"04\",\n \"05\",\n \"06\",\n \"10\",\n \"11\",\n \"12\",\n \"13\",\n \"14\",\n \"15\",\n \"16\",\n \"20\",\n \"21\",\n \"22\",\n \"23\",\n \"24\",\n \"25\",\n \"26\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"35\",\n \"36\",\n \"37\",\n \"38\",\n \"39\",\n \"40\",\n \"41\",\n \"42\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"50\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"59\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"67\",\n \"68\",\n \"71\",\n \"72\",\n \"73\",\n \"74\",\n \"75\",\n \"76\",\n \"77\",\n \"80\",\n \"81\",\n \"82\",\n \"83\",\n \"84\",\n \"85\",\n \"86\",\n \"87\",\n \"88\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n \"99\",\n]);\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"EIN must contain only digits\",\n );\n }\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"EIN must be 9 digits\");\n }\n const prefix = v.slice(0, 2);\n if (!VALID_PREFIXES.has(prefix)) {\n return err(\n \"INVALID_COMPONENT\",\n \"EIN campus prefix is invalid\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 9) {\n return `${v.slice(0, 2)}-${v.slice(2)}`;\n }\n return v;\n};\n\n/** U.S. Employer Identification Number. */\nconst ein: Validator = {\n name: \"Employer Identification Number\",\n localName: \"Employer Identification Number\",\n abbreviation: \"EIN\",\n aliases: [\n \"EIN\",\n \"Employer Identification Number\",\n \"Federal Tax ID\",\n ] as const,\n candidatePattern: \"\\\\d{2}-?\\\\d{7}\",\n country: \"US\",\n entityType: \"company\",\n sourceUrl:\n \"https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes\",\n examples: [\"042103594\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ein;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;AACA,MAAM,iBAAyB;CAC7B,MAAM,WAAW;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;AAGD,QADE,SAAS,UAAU,GAAG,SAAS,SAAS,EAAE,IAC5B,aAAa,EAAE;;;;;;AAyBjC,MAAM,iBAAiB,IAAI,IAAI;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;AAEH,KAAI,EAAE,WAAW,EACf,QAAO,IAAI,kBAAkB,uBAAuB;CAEtD,MAAM,SAAS,EAAE,MAAM,GAAG,EAAE;AAC5B,KAAI,CAAC,eAAe,IAAI,OAAO,CAC7B,QAAO,IACL,qBACA,+BACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE;AAEvC,QAAO;;;AAIT,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"ein.js","names":[],"sources":["../../src/us/ein.ts"],"sourcesContent":["const EIN_PREFIXES = [\n \"01\",\n \"02\",\n \"03\",\n \"04\",\n \"05\",\n \"06\",\n \"10\",\n \"11\",\n \"12\",\n \"13\",\n \"14\",\n \"15\",\n \"16\",\n \"20\",\n \"21\",\n \"22\",\n \"23\",\n \"24\",\n \"25\",\n \"26\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"35\",\n \"36\",\n \"37\",\n \"38\",\n \"39\",\n \"40\",\n \"41\",\n \"42\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"50\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"59\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"67\",\n \"68\",\n \"71\",\n \"72\",\n \"73\",\n \"74\",\n \"75\",\n \"76\",\n \"77\",\n \"80\",\n \"81\",\n \"82\",\n \"83\",\n \"84\",\n \"85\",\n \"86\",\n \"87\",\n \"88\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n \"99\",\n] as const;\n\n/** Generate a random valid U.S. EIN. */\nconst generate = (): string => {\n const prefix = randomPick(EIN_PREFIXES);\n return prefix + randomDigits(7);\n};\n\n/**\n * EIN (U.S. Employer Identification Number).\n *\n * 9-digit identifier: 2-digit campus prefix +\n * 7-digit group. No checksum. The first 2 digits\n * must be a valid IRS campus code.\n *\n * @see https://en.wikipedia.org/wiki/Employer_Identification_Number\n * @see https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\n/**\n * Valid EIN campus prefixes. Sourced from IRS\n * documentation and python-stdnum's numdb.\n */\nconst VALID_PREFIXES = new Set([\n \"01\",\n \"02\",\n \"03\",\n \"04\",\n \"05\",\n \"06\",\n \"10\",\n \"11\",\n \"12\",\n \"13\",\n \"14\",\n \"15\",\n \"16\",\n \"20\",\n \"21\",\n \"22\",\n \"23\",\n \"24\",\n \"25\",\n \"26\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"35\",\n \"36\",\n \"37\",\n \"38\",\n \"39\",\n \"40\",\n \"41\",\n \"42\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"50\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"59\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"67\",\n \"68\",\n \"71\",\n \"72\",\n \"73\",\n \"74\",\n \"75\",\n \"76\",\n \"77\",\n \"80\",\n \"81\",\n \"82\",\n \"83\",\n \"84\",\n \"85\",\n \"86\",\n \"87\",\n \"88\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n \"99\",\n]);\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"EIN must contain only digits\",\n );\n }\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"EIN must be 9 digits\");\n }\n const prefix = v.slice(0, 2);\n if (!VALID_PREFIXES.has(prefix)) {\n return err(\n \"INVALID_COMPONENT\",\n \"EIN campus prefix is invalid\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 9) {\n return `${v.slice(0, 2)}-${v.slice(2)}`;\n }\n return v;\n};\n\n/** U.S. Employer Identification Number. */\nconst ein: CountryValidator<\"US\"> = {\n name: \"Employer Identification Number\",\n localName: \"Employer Identification Number\",\n abbreviation: \"EIN\",\n aliases: [\n \"EIN\",\n \"Employer Identification Number\",\n \"Federal Tax ID\",\n ] as const,\n candidatePattern: \"\\\\d{2}-?\\\\d{7}\",\n scope: \"country\",\n country: \"US\",\n entityType: \"company\",\n sourceUrl:\n \"https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes\",\n examples: [\"042103594\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ein;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAAA,MAAM,eAAe;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAM,iBAAyB;CAE7B,OADe,WAAW,YACd,IAAI,aAAa,CAAC;AAChC;;;;;AA2BA,MAAM,iBAAiB,IAAI,IAAI;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAEF,IAAI,EAAE,WAAW,GACf,OAAO,IAAI,kBAAkB,sBAAsB;CAErD,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC;CAC3B,IAAI,CAAC,eAAe,IAAI,MAAM,GAC5B,OAAO,IACL,qBACA,8BACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OAAO,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;CAEtC,OAAO;AACT;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;AACF"}
package/dist/us/itin.d.ts CHANGED
@@ -1,15 +1,26 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } from "../types.js";
2
2
 
3
3
  //#region src/us/itin.d.ts
4
4
  /** Generate a random valid U.S. ITIN. */
5
5
  declare const generate: () => string;
6
+ /**
7
+ * ITIN (U.S. Individual Taxpayer Identification
8
+ * Number).
9
+ *
10
+ * 9-digit number issued by the IRS to individuals
11
+ * who need a taxpayer ID but are not eligible for
12
+ * an SSN. Starts with 9; digits 4-5 (the "group")
13
+ * must be in the range 70-99 excluding 89 and 93.
14
+ *
15
+ * @see https://www.irs.gov/individuals/individual-taxpayer-identification-number
16
+ */
6
17
  declare const compact: (value: string) => string;
7
18
  declare const validate: (value: string) => ValidateResult;
8
19
  declare const format: (value: string) => string;
9
20
  /**
10
21
  * U.S. Individual Taxpayer Identification Number.
11
22
  */
12
- declare const itin: Validator;
23
+ declare const itin: CountryValidator<"US">;
13
24
  //#endregion
14
25
  export { compact, itin as default, format, generate, validate };
15
26
  //# sourceMappingURL=itin.d.ts.map
package/dist/us/itin.js CHANGED
@@ -1,24 +1,12 @@
1
1
  import { clean } from "../_util/clean.js";
2
- import { randomDigits, randomInt } from "../_util/generate.js";
2
+ import { randomDigits, randomPick } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/us/itin.ts
6
- /**
7
- * ITIN (U.S. Individual Taxpayer Identification
8
- * Number).
9
- *
10
- * 9-digit number issued by the IRS to individuals
11
- * who need a taxpayer ID but are not eligible for
12
- * an SSN. Starts with 9; digits 4-5 (the "group")
13
- * must be in the range 70-99 excluding 89 and 93.
14
- *
15
- * @see https://www.irs.gov/individuals/individual-taxpayer-identification-number
16
- */
6
+ const ITIN_ALLOWED_GROUPS = Array.from({ length: 30 }, (_, i) => i + 70).filter((g) => g !== 89 && g !== 93);
17
7
  /** Generate a random valid U.S. ITIN. */
18
8
  const generate = () => {
19
- const area = "9" + randomDigits(2);
20
- const allowed = Array.from({ length: 30 }, (_, i) => i + 70).filter((g) => g !== 89 && g !== 93);
21
- return `${area}${String(allowed[randomInt(0, allowed.length - 1)])}${randomDigits(4)}`;
9
+ return `${"9" + randomDigits(2)}${String(randomPick(ITIN_ALLOWED_GROUPS))}${randomDigits(4)}`;
22
10
  };
23
11
  const ITIN_RE = /^(?<area>\d{3})-?(?<group>\d{2})-?\d{4}$/;
24
12
  /** Groups 70-99 excluding 89 and 93. */
@@ -53,6 +41,7 @@ const itin = {
53
41
  abbreviation: "ITIN",
54
42
  aliases: ["ITIN", "Individual Taxpayer Identification Number"],
55
43
  candidatePattern: "9\\d{2}[\\s-]?\\d{2}[\\s-]?\\d{4}",
44
+ scope: "country",
56
45
  country: "US",
57
46
  entityType: "person",
58
47
  sourceUrl: "https://www.irs.gov/individuals/individual-taxpayer-identification-number",
@@ -1 +1 @@
1
- {"version":3,"file":"itin.js","names":[],"sources":["../../src/us/itin.ts"],"sourcesContent":["/** Generate a random valid U.S. ITIN. */\nconst generate = (): string => {\n const area = \"9\" + randomDigits(2);\n const allowed = Array.from(\n { length: 30 },\n (_, i) => i + 70,\n ).filter((g) => g !== 89 && g !== 93);\n const group = String(\n allowed[randomInt(0, allowed.length - 1)]!,\n );\n const serial = randomDigits(4);\n return `${area}${group}${serial}`;\n};\n\n/**\n * ITIN (U.S. Individual Taxpayer Identification\n * Number).\n *\n * 9-digit number issued by the IRS to individuals\n * who need a taxpayer ID but are not eligible for\n * an SSN. Starts with 9; digits 4-5 (the \"group\")\n * must be in the range 70-99 excluding 89 and 93.\n *\n * @see https://www.irs.gov/individuals/individual-taxpayer-identification-number\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst ITIN_RE = /^(?<area>\\d{3})-?(?<group>\\d{2})-?\\d{4}$/;\n\n/** Groups 70-99 excluding 89 and 93. */\nconst ALLOWED_GROUPS = new Set(\n Array.from({ length: 30 }, (_, i) => i + 70)\n .filter((g) => g !== 89 && g !== 93)\n .map(String),\n);\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"ITIN must contain only digits\",\n );\n }\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"ITIN must be 9 digits\");\n }\n\n const match = ITIN_RE.exec(v);\n if (!match?.groups) {\n return err(\n \"INVALID_FORMAT\",\n \"ITIN must be 9 digits, optionally \" +\n \"formatted as NNN-NN-NNNN\",\n );\n }\n\n const { area, group } = match.groups;\n if (!area || !group) {\n return err(\"INVALID_FORMAT\", \"ITIN must be 9 digits\");\n }\n\n if (area[0] !== \"9\") {\n return err(\n \"INVALID_COMPONENT\",\n \"ITIN area must start with 9\",\n );\n }\n\n if (!ALLOWED_GROUPS.has(group)) {\n return err(\n \"INVALID_COMPONENT\",\n \"ITIN group digits are not in the \" +\n \"allowed range (70-99 excl. 89, 93)\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 9) {\n return (\n `${v.slice(0, 3)}-${v.slice(3, 5)}` + `-${v.slice(5)}`\n );\n }\n return v;\n};\n\n/**\n * U.S. Individual Taxpayer Identification Number.\n */\nconst itin: Validator = {\n name: \"Individual Taxpayer Identification Number\",\n localName: \"Individual Taxpayer Identification Number\",\n abbreviation: \"ITIN\",\n aliases: [\n \"ITIN\",\n \"Individual Taxpayer Identification Number\",\n ] as const,\n candidatePattern: \"9\\\\d{2}[\\\\s-]?\\\\d{2}[\\\\s-]?\\\\d{4}\",\n country: \"US\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.irs.gov/individuals/\" +\n \"individual-taxpayer-identification-number\",\n lengths: [9] as const,\n examples: [\"912-90-3456\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default itin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;AACA,MAAM,iBAAyB;CAC7B,MAAM,OAAO,MAAM,aAAa,EAAE;CAClC,MAAM,UAAU,MAAM,KACpB,EAAE,QAAQ,IAAI,GACb,GAAG,MAAM,IAAI,GACf,CAAC,QAAQ,MAAM,MAAM,MAAM,MAAM,GAAG;AAKrC,QAAO,GAAG,OAJI,OACZ,QAAQ,UAAU,GAAG,QAAQ,SAAS,EAAE,EACzC,GACc,aAAa,EAAE;;AAuBhC,MAAM,UAAU;;AAGhB,MAAM,iBAAiB,IAAI,IACzB,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,GAAG,MAAM,IAAI,GAAG,CACzC,QAAQ,MAAM,MAAM,MAAM,MAAM,GAAG,CACnC,IAAI,OAAO,CACf;AAED,MAAM,WAAW,UACf,MAAM,OAAO,KAAK;AAEpB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,gCACD;AAEH,KAAI,EAAE,WAAW,EACf,QAAO,IAAI,kBAAkB,wBAAwB;CAGvD,MAAM,QAAQ,QAAQ,KAAK,EAAE;AAC7B,KAAI,CAAC,OAAO,OACV,QAAO,IACL,kBACA,6DAED;CAGH,MAAM,EAAE,MAAM,UAAU,MAAM;AAC9B,KAAI,CAAC,QAAQ,CAAC,MACZ,QAAO,IAAI,kBAAkB,wBAAwB;AAGvD,KAAI,KAAK,OAAO,IACd,QAAO,IACL,qBACA,8BACD;AAGH,KAAI,CAAC,eAAe,IAAI,MAAM,CAC5B,QAAO,IACL,qBACA,sEAED;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QACE,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAA,GAAS,EAAE,MAAM,EAAE;AAGxD,QAAO;;;;;AAMT,MAAM,OAAkB;CACtB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,QACA,4CACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CAEF,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,cAAc;CACzB;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"itin.js","names":[],"sources":["../../src/us/itin.ts"],"sourcesContent":["const ITIN_ALLOWED_GROUPS = Array.from(\n { length: 30 },\n (_, i) => i + 70,\n).filter((g) => g !== 89 && g !== 93);\n\n/** Generate a random valid U.S. ITIN. */\nconst generate = (): string => {\n const area = \"9\" + randomDigits(2);\n const group = String(randomPick(ITIN_ALLOWED_GROUPS));\n const serial = randomDigits(4);\n return `${area}${group}${serial}`;\n};\n\n/**\n * ITIN (U.S. Individual Taxpayer Identification\n * Number).\n *\n * 9-digit number issued by the IRS to individuals\n * who need a taxpayer ID but are not eligible for\n * an SSN. Starts with 9; digits 4-5 (the \"group\")\n * must be in the range 70-99 excluding 89 and 93.\n *\n * @see https://www.irs.gov/individuals/individual-taxpayer-identification-number\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomPick } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst ITIN_RE = /^(?<area>\\d{3})-?(?<group>\\d{2})-?\\d{4}$/;\n\n/** Groups 70-99 excluding 89 and 93. */\nconst ALLOWED_GROUPS = new Set(\n Array.from({ length: 30 }, (_, i) => i + 70)\n .filter((g) => g !== 89 && g !== 93)\n .map(String),\n);\n\nconst compact = (value: string): string =>\n clean(value, \" -\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"ITIN must contain only digits\",\n );\n }\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"ITIN must be 9 digits\");\n }\n\n const match = ITIN_RE.exec(v);\n if (!match?.groups) {\n return err(\n \"INVALID_FORMAT\",\n \"ITIN must be 9 digits, optionally \" +\n \"formatted as NNN-NN-NNNN\",\n );\n }\n\n const { area, group } = match.groups;\n if (!area || !group) {\n return err(\"INVALID_FORMAT\", \"ITIN must be 9 digits\");\n }\n\n if (area[0] !== \"9\") {\n return err(\n \"INVALID_COMPONENT\",\n \"ITIN area must start with 9\",\n );\n }\n\n if (!ALLOWED_GROUPS.has(group)) {\n return err(\n \"INVALID_COMPONENT\",\n \"ITIN group digits are not in the \" +\n \"allowed range (70-99 excl. 89, 93)\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => {\n const v = compact(value);\n if (v.length === 9) {\n return (\n `${v.slice(0, 3)}-${v.slice(3, 5)}` + `-${v.slice(5)}`\n );\n }\n return v;\n};\n\n/**\n * U.S. Individual Taxpayer Identification Number.\n */\nconst itin: CountryValidator<\"US\"> = {\n name: \"Individual Taxpayer Identification Number\",\n localName: \"Individual Taxpayer Identification Number\",\n abbreviation: \"ITIN\",\n aliases: [\n \"ITIN\",\n \"Individual Taxpayer Identification Number\",\n ] as const,\n candidatePattern: \"9\\\\d{2}[\\\\s-]?\\\\d{2}[\\\\s-]?\\\\d{4}\",\n scope: \"country\",\n country: \"US\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.irs.gov/individuals/\" +\n \"individual-taxpayer-identification-number\",\n lengths: [9] as const,\n examples: [\"912-90-3456\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default itin;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AAAA,MAAM,sBAAsB,MAAM,KAChC,EAAE,QAAQ,GAAG,IACZ,GAAG,MAAM,IAAI,EAChB,EAAE,QAAQ,MAAM,MAAM,MAAM,MAAM,EAAE;;AAGpC,MAAM,iBAAyB;CAI7B,OAAO,GAHM,MAAM,aAAa,CAAC,IACnB,OAAO,WAAW,mBAAmB,CAE9B,IADN,aAAa,CACE;AAChC;AAwBA,MAAM,UAAU;;AAGhB,MAAM,iBAAiB,IAAI,IACzB,MAAM,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,IAAI,EAAE,EACxC,QAAQ,MAAM,MAAM,MAAM,MAAM,EAAE,EAClC,IAAI,MAAM,CACf;AAEA,MAAM,WAAW,UACf,MAAM,OAAO,IAAI;AAEnB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,+BACF;CAEF,IAAI,EAAE,WAAW,GACf,OAAO,IAAI,kBAAkB,uBAAuB;CAGtD,MAAM,QAAQ,QAAQ,KAAK,CAAC;CAC5B,IAAI,CAAC,OAAO,QACV,OAAO,IACL,kBACA,4DAEF;CAGF,MAAM,EAAE,MAAM,UAAU,MAAM;CAC9B,IAAI,CAAC,QAAQ,CAAC,OACZ,OAAO,IAAI,kBAAkB,uBAAuB;CAGtD,IAAI,KAAK,OAAO,KACd,OAAO,IACL,qBACA,6BACF;CAGF,IAAI,CAAC,eAAe,IAAI,KAAK,GAC3B,OAAO,IACL,qBACA,qEAEF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,KAAK;CACvB,IAAI,EAAE,WAAW,GACf,OACE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAA,GAAU,EAAE,MAAM,CAAC;CAGvD,OAAO;AACT;;;;AAKA,MAAM,OAA+B;CACnC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CACP,QACA,2CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CAEF,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,aAAa;CACxB;CACA;CACA;CACA;AACF"}
package/dist/us/mod.d.ts CHANGED
@@ -1,11 +1,12 @@
1
- import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
1
  import ein from "./ein.js";
3
2
  import itin from "./itin.js";
4
3
  import rtn from "./rtn.js";
5
4
  import ssn from "./ssn.js";
6
5
 
7
6
  //#region src/us/mod.d.ts
8
-
7
+ declare namespace mod_d_exports {
8
+ export { ein, itin, rtn, ssn };
9
+ }
9
10
  //#endregion
10
11
  export { ein, itin, mod_d_exports, rtn, ssn };
11
12
  //# sourceMappingURL=mod.d.ts.map
package/dist/us/rtn.d.ts CHANGED
@@ -1,14 +1,13 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } from "../types.js";
2
2
 
3
3
  //#region src/us/rtn.d.ts
4
-
5
4
  declare const compact: (value: string) => string;
6
5
  declare const validate: (value: string) => ValidateResult;
7
6
  declare const format: (value: string) => string;
8
7
  /** Generate a random valid U.S. RTN. */
9
8
  declare const generate: () => string;
10
9
  /** U.S. Routing Transit Number. */
11
- declare const rtn: Validator;
10
+ declare const rtn: CountryValidator<"US">;
12
11
  //#endregion
13
12
  export { compact, rtn as default, format, generate, validate };
14
13
  //# sourceMappingURL=rtn.d.ts.map
package/dist/us/rtn.js CHANGED
@@ -1,24 +1,8 @@
1
1
  import { clean } from "../_util/clean.js";
2
- import { randomDigits, randomInt } from "../_util/generate.js";
2
+ import { randomDigits, randomInt, randomPick } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/us/rtn.ts
6
- /**
7
- * RTN (Routing Transit Number / ABA Number).
8
- *
9
- * 9-digit number used by U.S. financial institutions
10
- * for routing wire transfers, ACH, and check
11
- * processing. Uses a weighted checksum with weights
12
- * [3, 7, 1] repeated three times.
13
- *
14
- * The first two digits identify the Federal Reserve
15
- * district (01-12) or special ranges (21-32 for
16
- * thrifts, 61-72 for electronic, 80 for traveler's
17
- * cheques).
18
- *
19
- * @see https://en.wikipedia.org/wiki/ABA_routing_transit_number
20
- * @see https://www.frbservices.org/
21
- */
22
6
  const WEIGHTS = [
23
7
  3,
24
8
  7,
@@ -36,9 +20,9 @@ const validate = (value) => {
36
20
  if (v.length !== 9) return err("INVALID_LENGTH", "RTN must be 9 digits");
37
21
  if (!isdigits(v)) return err("INVALID_FORMAT", "RTN must contain only digits");
38
22
  const prefix = Number(v.slice(0, 2));
39
- if (!(prefix >= 1 && prefix <= 12 || prefix >= 21 && prefix <= 32 || prefix >= 61 && prefix <= 72 || prefix === 80)) return err("INVALID_COMPONENT", "RTN has an invalid Federal Reserve district");
23
+ if (!(prefix >= 0 && prefix <= 12 || prefix >= 21 && prefix <= 32 || prefix >= 61 && prefix <= 72 || prefix === 80)) return err("INVALID_COMPONENT", "RTN has an invalid Federal Reserve district");
40
24
  let sum = 0;
41
- for (let i = 0; i < 9; i++) sum += Number(v[i]) * WEIGHTS[i];
25
+ for (const [i, weight] of WEIGHTS.entries()) sum += Number(v[i]) * weight;
42
26
  if (sum % 10 !== 0) return err("INVALID_CHECKSUM", "RTN checksum is invalid");
43
27
  return {
44
28
  valid: true,
@@ -48,17 +32,20 @@ const validate = (value) => {
48
32
  const format = (value) => compact(value);
49
33
  /** All valid Federal Reserve prefix ranges. */
50
34
  const PREFIX_RANGES = [
51
- [1, 12],
35
+ [0, 12],
52
36
  [21, 32],
53
37
  [61, 72],
54
38
  [80, 80]
55
39
  ];
56
40
  /** Generate a random valid U.S. RTN. */
57
41
  const generate = () => {
58
- const range = PREFIX_RANGES[randomInt(0, PREFIX_RANGES.length - 1)];
59
- const body = String(randomInt(range[0], range[1])).padStart(2, "0") + randomDigits(6);
42
+ const [low, high] = randomPick(PREFIX_RANGES);
43
+ const body = String(randomInt(low, high)).padStart(2, "0") + randomDigits(6);
60
44
  let sum = 0;
61
- for (let i = 0; i < 8; i++) sum += Number(body[i]) * WEIGHTS[i];
45
+ for (const [i, weight] of WEIGHTS.entries()) {
46
+ if (i >= 8) break;
47
+ sum += Number(body[i]) * weight;
48
+ }
62
49
  const check = (10 - sum % 10) % 10;
63
50
  return body + String(check);
64
51
  };
@@ -75,6 +62,7 @@ const rtn = {
75
62
  "Routing Transit Number"
76
63
  ],
77
64
  candidatePattern: "\\d{9}",
65
+ scope: "country",
78
66
  country: "US",
79
67
  entityType: "company",
80
68
  sourceUrl: "https://en.wikipedia.org/wiki/ABA_routing_transit_number",
@@ -1 +1 @@
1
- {"version":3,"file":"rtn.js","names":[],"sources":["../../src/us/rtn.ts"],"sourcesContent":["/**\n * RTN (Routing Transit Number / ABA Number).\n *\n * 9-digit number used by U.S. financial institutions\n * for routing wire transfers, ACH, and check\n * processing. Uses a weighted checksum with weights\n * [3, 7, 1] repeated three times.\n *\n * The first two digits identify the Federal Reserve\n * district (01-12) or special ranges (21-32 for\n * thrifts, 61-72 for electronic, 80 for traveler's\n * cheques).\n *\n * @see https://en.wikipedia.org/wiki/ABA_routing_transit_number\n * @see https://www.frbservices.org/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits, randomInt } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst WEIGHTS = [3, 7, 1, 3, 7, 1, 3, 7, 1];\n\nconst compact = (value: string): string =>\n clean(value, \" -\").trim();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"RTN must be 9 digits\");\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"RTN must contain only digits\",\n );\n }\n\n // Validate Federal Reserve prefix (first 2 digits)\n const prefix = Number(v.slice(0, 2));\n const validPrefixRanges =\n (prefix >= 1 && prefix <= 12) ||\n (prefix >= 21 && prefix <= 32) ||\n (prefix >= 61 && prefix <= 72) ||\n prefix === 80;\n if (!validPrefixRanges) {\n return err(\n \"INVALID_COMPONENT\",\n \"RTN has an invalid Federal Reserve district\",\n );\n }\n\n // Weighted checksum must be divisible by 10\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n sum += Number(v[i]) * WEIGHTS[i]!;\n }\n if (sum % 10 !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"RTN checksum is invalid\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** All valid Federal Reserve prefix ranges. */\nconst PREFIX_RANGES: readonly [number, number][] = [\n [1, 12],\n [21, 32],\n [61, 72],\n [80, 80],\n];\n\n/** Generate a random valid U.S. RTN. */\nconst generate = (): string => {\n const range =\n PREFIX_RANGES[randomInt(0, PREFIX_RANGES.length - 1)]!;\n const prefix = String(\n randomInt(range[0], range[1]),\n ).padStart(2, \"0\");\n const mid = randomDigits(6);\n const body = prefix + mid;\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n sum += Number(body[i]) * WEIGHTS[i]!;\n }\n const check = (10 - (sum % 10)) % 10;\n return body + String(check);\n};\n\n/** U.S. Routing Transit Number. */\nconst rtn: Validator = {\n name: \"Routing Transit Number\",\n localName: \"Routing Transit Number\",\n abbreviation: \"RTN\",\n aliases: [\n \"RTN\",\n \"ABA\",\n \"Routing Number\",\n \"ABA Routing Number\",\n \"Routing Transit Number\",\n ] as const,\n candidatePattern: \"\\\\d{9}\",\n country: \"US\",\n entityType: \"company\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/ABA_routing_transit_number\",\n lengths: [9] as const,\n examples: [\"111000025\", \"021000021\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default rtn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAE;AAE3C,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,MAAM;AAE3B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,EACf,QAAO,IAAI,kBAAkB,uBAAuB;AAGtD,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;CAIH,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;AAMpC,KAAI,EAJD,UAAU,KAAK,UAAU,MACzB,UAAU,MAAM,UAAU,MAC1B,UAAU,MAAM,UAAU,MAC3B,WAAW,IAEX,QAAO,IACL,qBACA,8CACD;CAIH,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,QAAO,OAAO,EAAE,GAAG,GAAG,QAAQ;AAEhC,KAAI,MAAM,OAAO,EACf,QAAO,IACL,oBACA,0BACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,gBAA6C;CACjD,CAAC,GAAG,GAAG;CACP,CAAC,IAAI,GAAG;CACR,CAAC,IAAI,GAAG;CACR,CAAC,IAAI,GAAG;CACT;;AAGD,MAAM,iBAAyB;CAC7B,MAAM,QACJ,cAAc,UAAU,GAAG,cAAc,SAAS,EAAE;CAKtD,MAAM,OAJS,OACb,UAAU,MAAM,IAAI,MAAM,GAAG,CAC9B,CAAC,SAAS,GAAG,IAAI,GACN,aAAa,EAAE;CAE3B,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,QAAO,OAAO,KAAK,GAAG,GAAG,QAAQ;CAEnC,MAAM,SAAS,KAAM,MAAM,MAAO;AAClC,QAAO,OAAO,OAAO,MAAM;;;AAI7B,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CACF,SAAS,CAAC,EAAE;CACZ,UAAU,CAAC,aAAa,YAAY;CACpC;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"rtn.js","names":[],"sources":["../../src/us/rtn.ts"],"sourcesContent":["/**\n * RTN (Routing Transit Number / ABA Number).\n *\n * 9-digit number used by U.S. financial institutions\n * for routing wire transfers, ACH, and check\n * processing. Uses a weighted checksum with weights\n * [3, 7, 1] repeated three times.\n *\n * The first two digits identify the Federal Reserve\n * district (01-12) or special ranges (00 for U.S.\n * Government, 21-32 for thrifts, 61-72 for electronic,\n * 80 for traveler's cheques).\n *\n * @see https://en.wikipedia.org/wiki/ABA_routing_transit_number\n * @see https://www.frbservices.org/\n */\n\nimport type {\n ValidateResult,\n CountryValidator,\n} from \"../types\";\n\nimport { clean } from \"#util/clean\";\nimport {\n randomDigits,\n randomInt,\n randomPick,\n} from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nconst WEIGHTS = [3, 7, 1, 3, 7, 1, 3, 7, 1] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -\").trim();\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 9) {\n return err(\"INVALID_LENGTH\", \"RTN must be 9 digits\");\n }\n\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"RTN must contain only digits\",\n );\n }\n\n // Validate Federal Reserve prefix (first 2 digits)\n const prefix = Number(v.slice(0, 2));\n const validPrefixRanges =\n // 00 is reserved for U.S. Government and federal\n // agencies per the ABA Routing Number Policy;\n // 01-12 are the 12 Federal Reserve districts.\n // @see https://en.wikipedia.org/wiki/ABA_routing_transit_number\n (prefix >= 0 && prefix <= 12) ||\n (prefix >= 21 && prefix <= 32) ||\n (prefix >= 61 && prefix <= 72) ||\n prefix === 80;\n if (!validPrefixRanges) {\n return err(\n \"INVALID_COMPONENT\",\n \"RTN has an invalid Federal Reserve district\",\n );\n }\n\n // Weighted checksum must be divisible by 10\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n sum += Number(v[i]) * weight;\n }\n if (sum % 10 !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"RTN checksum is invalid\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** All valid Federal Reserve prefix ranges. */\nconst PREFIX_RANGES: readonly [number, number][] = [\n [0, 12],\n [21, 32],\n [61, 72],\n [80, 80],\n];\n\n/** Generate a random valid U.S. RTN. */\nconst generate = (): string => {\n const [low, high] = randomPick(PREFIX_RANGES);\n const prefix = String(randomInt(low, high)).padStart(\n 2,\n \"0\",\n );\n const mid = randomDigits(6);\n const body = prefix + mid;\n let sum = 0;\n for (const [i, weight] of WEIGHTS.entries()) {\n if (i >= 8) break;\n sum += Number(body[i]) * weight;\n }\n const check = (10 - (sum % 10)) % 10;\n return body + String(check);\n};\n\n/** U.S. Routing Transit Number. */\nconst rtn: CountryValidator<\"US\"> = {\n name: \"Routing Transit Number\",\n localName: \"Routing Transit Number\",\n abbreviation: \"RTN\",\n aliases: [\n \"RTN\",\n \"ABA\",\n \"Routing Number\",\n \"ABA Routing Number\",\n \"Routing Transit Number\",\n ] as const,\n candidatePattern: \"\\\\d{9}\",\n scope: \"country\",\n country: \"US\",\n entityType: \"company\",\n sourceUrl:\n \"https://en.wikipedia.org/wiki/ABA_routing_transit_number\",\n lengths: [9] as const,\n examples: [\"111000025\", \"021000021\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default rtn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;AA+BA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAE1C,MAAM,WAAW,UACf,MAAM,OAAO,IAAI,EAAE,KAAK;AAE1B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,KAAK;CAEvB,IAAI,EAAE,WAAW,GACf,OAAO,IAAI,kBAAkB,sBAAsB;CAGrD,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,IACL,kBACA,8BACF;CAIF,MAAM,SAAS,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;CAUnC,IAAI,EAJD,UAAU,KAAK,UAAU,MACzB,UAAU,MAAM,UAAU,MAC1B,UAAU,MAAM,UAAU,MAC3B,WAAW,KAEX,OAAO,IACL,qBACA,6CACF;CAIF,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GACxC,OAAO,OAAO,EAAE,EAAE,IAAI;CAExB,IAAI,MAAM,OAAO,GACf,OAAO,IACL,oBACA,yBACF;CAGF,OAAO;EAAE,OAAO;EAAM,SAAS;CAAE;AACnC;AAEA,MAAM,UAAU,UAA0B,QAAQ,KAAK;;AAGvD,MAAM,gBAA6C;CACjD,CAAC,GAAG,EAAE;CACN,CAAC,IAAI,EAAE;CACP,CAAC,IAAI,EAAE;CACP,CAAC,IAAI,EAAE;AACT;;AAGA,MAAM,iBAAyB;CAC7B,MAAM,CAAC,KAAK,QAAQ,WAAW,aAAa;CAM5C,MAAM,OALS,OAAO,UAAU,KAAK,IAAI,CAAC,EAAE,SAC1C,GACA,GAGgB,IADN,aAAa,CACD;CACxB,IAAI,MAAM;CACV,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ,QAAQ,GAAG;EAC3C,IAAI,KAAK,GAAG;EACZ,OAAO,OAAO,KAAK,EAAE,IAAI;CAC3B;CACA,MAAM,SAAS,KAAM,MAAM,MAAO;CAClC,OAAO,OAAO,OAAO,KAAK;AAC5B;;AAGA,MAAM,MAA8B;CAClC,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACA;EACA;CACF;CACA,kBAAkB;CAClB,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WACE;CACF,SAAS,CAAC,CAAC;CACX,UAAU,CAAC,aAAa,WAAW;CACnC;CACA;CACA;CACA;AACF"}
package/dist/us/ssn.d.ts CHANGED
@@ -1,13 +1,24 @@
1
- import { ValidateResult, Validator } from "../types.js";
1
+ import { CountryValidator, ValidateResult } from "../types.js";
2
2
 
3
3
  //#region src/us/ssn.d.ts
4
4
  /** Generate a random valid U.S. SSN. */
5
5
  declare const generate: () => string;
6
+ /**
7
+ * SSN (U.S. Social Security Number).
8
+ *
9
+ * 9-digit identifier: 3-digit area, 2-digit group,
10
+ * 4-digit serial. No checksum. Area cannot be 000,
11
+ * 666, or 900-999; group cannot be 00; serial
12
+ * cannot be 0000.
13
+ *
14
+ * @see https://en.wikipedia.org/wiki/Social_Security_number
15
+ * @see https://www.ssa.gov/employer/verifySSN.htm
16
+ */
6
17
  declare const compact: (value: string) => string;
7
18
  declare const validate: (value: string) => ValidateResult;
8
19
  declare const format: (value: string) => string;
9
20
  /** U.S. Social Security Number. */
10
- declare const ssn: Validator;
21
+ declare const ssn: CountryValidator<"US">;
11
22
  //#endregion
12
23
  export { compact, ssn as default, format, generate, validate };
13
24
  //# sourceMappingURL=ssn.d.ts.map
package/dist/us/ssn.js CHANGED
@@ -3,17 +3,6 @@ import { randomInt } from "../_util/generate.js";
3
3
  import { err } from "../_util/result.js";
4
4
  import { isdigits } from "../_util/strings.js";
5
5
  //#region src/us/ssn.ts
6
- /**
7
- * SSN (U.S. Social Security Number).
8
- *
9
- * 9-digit identifier: 3-digit area, 2-digit group,
10
- * 4-digit serial. No checksum. Area cannot be 000,
11
- * 666, or 900-999; group cannot be 00; serial
12
- * cannot be 0000.
13
- *
14
- * @see https://en.wikipedia.org/wiki/Social_Security_number
15
- * @see https://www.ssa.gov/employer/verifySSN.htm
16
- */
17
6
  /** Generate a random valid U.S. SSN. */
18
7
  const generate = () => {
19
8
  for (;;) {
@@ -62,6 +51,7 @@ const ssn = {
62
51
  abbreviation: "SSN",
63
52
  aliases: ["SSN", "Social Security Number"],
64
53
  candidatePattern: "\\d{3}-?\\d{2}-?\\d{4}",
54
+ scope: "country",
65
55
  country: "US",
66
56
  entityType: "person",
67
57
  sourceUrl: "https://www.ssa.gov/employer/verifySSN.htm",