@stll/stdnum 1.0.0 → 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 (704) hide show
  1. package/dist/_checksums/luhn.js.map +1 -1
  2. package/dist/_checksums/mod1110.js +1 -1
  3. package/dist/_checksums/mod1110.js.map +1 -1
  4. package/dist/_checksums/mod112.js.map +1 -1
  5. package/dist/_checksums/mod97.js.map +1 -1
  6. package/dist/_checksums/verhoeff.js.map +1 -1
  7. package/dist/_checksums/weighted-sum.js.map +1 -1
  8. package/dist/_util/arabic.js.map +1 -1
  9. package/dist/_util/clean.js.map +1 -1
  10. package/dist/_util/date.js.map +1 -1
  11. package/dist/_util/generate.js.map +1 -1
  12. package/dist/_util/result.js.map +1 -1
  13. package/dist/_util/strings.js.map +1 -1
  14. package/dist/ad/nrt.d.ts +16 -2
  15. package/dist/ad/nrt.js +1 -14
  16. package/dist/ad/nrt.js.map +1 -1
  17. package/dist/ae/eid.d.ts +2 -2
  18. package/dist/ae/eid.js +2 -12
  19. package/dist/ae/eid.js.map +1 -1
  20. package/dist/ai/tin.d.ts +20 -2
  21. package/dist/ai/tin.js +1 -18
  22. package/dist/ai/tin.js.map +1 -1
  23. package/dist/al/nipt.d.ts +13 -2
  24. package/dist/al/nipt.js +1 -11
  25. package/dist/al/nipt.js.map +1 -1
  26. package/dist/am/tin.d.ts +16 -2
  27. package/dist/am/tin.js +1 -14
  28. package/dist/am/tin.js.map +1 -1
  29. package/dist/ar/cbu.d.ts +2 -2
  30. package/dist/ar/cbu.js +1 -9
  31. package/dist/ar/cbu.js.map +1 -1
  32. package/dist/ar/cuit.d.ts +2 -2
  33. package/dist/ar/cuit.js +1 -17
  34. package/dist/ar/cuit.js.map +1 -1
  35. package/dist/ar/dni.d.ts +11 -2
  36. package/dist/ar/dni.js +1 -9
  37. package/dist/ar/dni.js.map +1 -1
  38. package/dist/at/businessid.d.ts +10 -2
  39. package/dist/at/businessid.js +1 -8
  40. package/dist/at/businessid.js.map +1 -1
  41. package/dist/at/tin.d.ts +2 -2
  42. package/dist/at/tin.js +1 -11
  43. package/dist/at/tin.js.map +1 -1
  44. package/dist/at/uid.d.ts +2 -2
  45. package/dist/at/uid.js +2 -10
  46. package/dist/at/uid.js.map +1 -1
  47. package/dist/at/vnr.d.ts +2 -2
  48. package/dist/at/vnr.js +4 -14
  49. package/dist/at/vnr.js.map +1 -1
  50. package/dist/au/abn.d.ts +2 -2
  51. package/dist/au/abn.js +1 -10
  52. package/dist/au/abn.js.map +1 -1
  53. package/dist/au/acn.d.ts +2 -2
  54. package/dist/au/acn.js +1 -10
  55. package/dist/au/acn.js.map +1 -1
  56. package/dist/au/tfn.d.ts +2 -2
  57. package/dist/au/tfn.js +1 -10
  58. package/dist/au/tfn.js.map +1 -1
  59. package/dist/az/voen.d.ts +2 -2
  60. package/dist/az/voen.js +1 -14
  61. package/dist/az/voen.js.map +1 -1
  62. package/dist/ba/jmbg.d.ts +2 -2
  63. package/dist/ba/jmbg.js +3 -11
  64. package/dist/ba/jmbg.js.map +1 -1
  65. package/dist/bd/nid.d.ts +23 -2
  66. package/dist/bd/nid.js +1 -21
  67. package/dist/bd/nid.js.map +1 -1
  68. package/dist/be/bis.d.ts +2 -2
  69. package/dist/be/bis.js +1 -11
  70. package/dist/be/bis.js.map +1 -1
  71. package/dist/be/nn.d.ts +2 -2
  72. package/dist/be/nn.js +1 -11
  73. package/dist/be/nn.js.map +1 -1
  74. package/dist/be/vat.d.ts +2 -2
  75. package/dist/be/vat.js +1 -9
  76. package/dist/be/vat.js.map +1 -1
  77. package/dist/bg/egn.d.ts +2 -2
  78. package/dist/bg/egn.js +3 -18
  79. package/dist/bg/egn.js.map +1 -1
  80. package/dist/bg/pnf.d.ts +2 -2
  81. package/dist/bg/pnf.js +1 -8
  82. package/dist/bg/pnf.js.map +1 -1
  83. package/dist/bg/vat.d.ts +2 -2
  84. package/dist/bg/vat.js +3 -9
  85. package/dist/bg/vat.js.map +1 -1
  86. package/dist/bh/cpr.d.ts +2 -2
  87. package/dist/bh/cpr.js +1 -17
  88. package/dist/bh/cpr.js.map +1 -1
  89. package/dist/bic.d.ts +13 -2
  90. package/dist/bic.js +1 -11
  91. package/dist/bic.js.map +1 -1
  92. package/dist/br/cnpj.d.ts +2 -2
  93. package/dist/br/cnpj.js +1 -20
  94. package/dist/br/cnpj.js.map +1 -1
  95. package/dist/br/cpf.d.ts +2 -2
  96. package/dist/br/cpf.js +1 -14
  97. package/dist/br/cpf.js.map +1 -1
  98. package/dist/by/unp.d.ts +2 -2
  99. package/dist/by/unp.js +3 -14
  100. package/dist/by/unp.js.map +1 -1
  101. package/dist/bz/tin.d.ts +2 -2
  102. package/dist/bz/tin.js +1 -26
  103. package/dist/bz/tin.js.map +1 -1
  104. package/dist/ca/bn.d.ts +2 -2
  105. package/dist/ca/bn.js +2 -10
  106. package/dist/ca/bn.js.map +1 -1
  107. package/dist/ca/sin.d.ts +2 -2
  108. package/dist/ca/sin.js +2 -10
  109. package/dist/ca/sin.js.map +1 -1
  110. package/dist/ch/ssn.d.ts +2 -2
  111. package/dist/ch/ssn.js +1 -9
  112. package/dist/ch/ssn.js.map +1 -1
  113. package/dist/ch/uid.d.ts +2 -2
  114. package/dist/ch/uid.js +1 -9
  115. package/dist/ch/uid.js.map +1 -1
  116. package/dist/ch/vat.d.ts +2 -2
  117. package/dist/ch/vat.js +1 -9
  118. package/dist/ch/vat.js.map +1 -1
  119. package/dist/cl/rut.d.ts +2 -2
  120. package/dist/cl/rut.js +1 -14
  121. package/dist/cl/rut.js.map +1 -1
  122. package/dist/cn/ric.d.ts +2 -2
  123. package/dist/cn/ric.js +3 -14
  124. package/dist/cn/ric.js.map +1 -1
  125. package/dist/cn/uscc.d.ts +2 -2
  126. package/dist/cn/uscc.js +1 -10
  127. package/dist/cn/uscc.js.map +1 -1
  128. package/dist/co/nit.d.ts +2 -2
  129. package/dist/co/nit.js +2 -12
  130. package/dist/co/nit.js.map +1 -1
  131. package/dist/cr/cpf.d.ts +18 -2
  132. package/dist/cr/cpf.js +1 -16
  133. package/dist/cr/cpf.js.map +1 -1
  134. package/dist/creditcard.d.ts +2 -2
  135. package/dist/creditcard.js +5 -14
  136. package/dist/creditcard.js.map +1 -1
  137. package/dist/cu/ni.d.ts +2 -2
  138. package/dist/cu/ni.js +2 -17
  139. package/dist/cu/ni.js.map +1 -1
  140. package/dist/cy/vat.d.ts +2 -2
  141. package/dist/cy/vat.js +1 -8
  142. package/dist/cy/vat.js.map +1 -1
  143. package/dist/cz/dic.d.ts +2 -2
  144. package/dist/cz/dic.js +7 -13
  145. package/dist/cz/dic.js.map +1 -1
  146. package/dist/cz/ico.d.ts +2 -2
  147. package/dist/cz/ico.js +2 -10
  148. package/dist/cz/ico.js.map +1 -1
  149. package/dist/cz/rc.d.ts +2 -2
  150. package/dist/cz/rc.js +2 -26
  151. package/dist/cz/rc.js.map +1 -1
  152. package/dist/de/handelsreg.d.ts +19 -2
  153. package/dist/de/handelsreg.js +1 -17
  154. package/dist/de/handelsreg.js.map +1 -1
  155. package/dist/de/idnr.d.ts +2 -2
  156. package/dist/de/idnr.js +2 -12
  157. package/dist/de/idnr.js.map +1 -1
  158. package/dist/de/stnr.d.ts +17 -2
  159. package/dist/de/stnr.js +1 -15
  160. package/dist/de/stnr.js.map +1 -1
  161. package/dist/de/svnr.d.ts +2 -2
  162. package/dist/de/svnr.js +2 -11
  163. package/dist/de/svnr.js.map +1 -1
  164. package/dist/de/vat.d.ts +2 -2
  165. package/dist/de/vat.js +2 -11
  166. package/dist/de/vat.js.map +1 -1
  167. package/dist/dk/cpr.d.ts +2 -2
  168. package/dist/dk/cpr.js +2 -10
  169. package/dist/dk/cpr.js.map +1 -1
  170. package/dist/dk/cvr.d.ts +2 -2
  171. package/dist/dk/cvr.js +2 -15
  172. package/dist/dk/cvr.js.map +1 -1
  173. package/dist/dk/vat.d.ts +2 -2
  174. package/dist/dk/vat.js +3 -13
  175. package/dist/dk/vat.js.map +1 -1
  176. package/dist/do/rnc.d.ts +2 -2
  177. package/dist/do/rnc.js +2 -16
  178. package/dist/do/rnc.js.map +1 -1
  179. package/dist/ec/ruc.d.ts +2 -2
  180. package/dist/ec/ruc.js +1 -18
  181. package/dist/ec/ruc.js.map +1 -1
  182. package/dist/ee/ik.d.ts +2 -2
  183. package/dist/ee/ik.js +3 -20
  184. package/dist/ee/ik.js.map +1 -1
  185. package/dist/ee/registrikood.d.ts +2 -2
  186. package/dist/ee/registrikood.js +1 -8
  187. package/dist/ee/registrikood.js.map +1 -1
  188. package/dist/ee/vat.d.ts +2 -2
  189. package/dist/ee/vat.js +2 -10
  190. package/dist/ee/vat.js.map +1 -1
  191. package/dist/eg/tn.d.ts +11 -2
  192. package/dist/eg/tn.js +1 -9
  193. package/dist/eg/tn.js.map +1 -1
  194. package/dist/es/cif.d.ts +2 -2
  195. package/dist/es/cif.js +1 -10
  196. package/dist/es/cif.js.map +1 -1
  197. package/dist/es/dni.d.ts +2 -2
  198. package/dist/es/dni.js +1 -9
  199. package/dist/es/dni.js.map +1 -1
  200. package/dist/es/nie.d.ts +2 -2
  201. package/dist/es/nie.js +1 -9
  202. package/dist/es/nie.js.map +1 -1
  203. package/dist/es/nss.d.ts +2 -2
  204. package/dist/es/nss.js +1 -16
  205. package/dist/es/nss.js.map +1 -1
  206. package/dist/es/vat.d.ts +2 -2
  207. package/dist/es/vat.js +5 -10
  208. package/dist/es/vat.js.map +1 -1
  209. package/dist/eu/vat.d.ts +2 -2
  210. package/dist/eu/vat.js +1 -0
  211. package/dist/eu/vat.js.map +1 -1
  212. package/dist/fi/hetu.d.ts +2 -2
  213. package/dist/fi/hetu.js +2 -10
  214. package/dist/fi/hetu.js.map +1 -1
  215. package/dist/fi/vat.d.ts +2 -2
  216. package/dist/fi/vat.js +3 -10
  217. package/dist/fi/vat.js.map +1 -1
  218. package/dist/fi/ytunnus.d.ts +2 -2
  219. package/dist/fi/ytunnus.js +2 -10
  220. package/dist/fi/ytunnus.js.map +1 -1
  221. package/dist/fr/nif.d.ts +2 -2
  222. package/dist/fr/nif.js +1 -9
  223. package/dist/fr/nif.js.map +1 -1
  224. package/dist/fr/nir.d.ts +2 -2
  225. package/dist/fr/nir.js +2 -14
  226. package/dist/fr/nir.js.map +1 -1
  227. package/dist/fr/siren.d.ts +2 -2
  228. package/dist/fr/siren.js +2 -10
  229. package/dist/fr/siren.js.map +1 -1
  230. package/dist/fr/siret.d.ts +2 -2
  231. package/dist/fr/siret.js +2 -11
  232. package/dist/fr/siret.js.map +1 -1
  233. package/dist/fr/tva.d.ts +2 -2
  234. package/dist/fr/tva.js +2 -12
  235. package/dist/fr/tva.js.map +1 -1
  236. package/dist/gb/nino.d.ts +12 -2
  237. package/dist/gb/nino.js +1 -10
  238. package/dist/gb/nino.js.map +1 -1
  239. package/dist/gb/sedol.d.ts +2 -2
  240. package/dist/gb/sedol.js +1 -11
  241. package/dist/gb/sedol.js.map +1 -1
  242. package/dist/gb/utr.d.ts +2 -2
  243. package/dist/gb/utr.js +2 -10
  244. package/dist/gb/utr.js.map +1 -1
  245. package/dist/gb/vat.d.ts +2 -2
  246. package/dist/gb/vat.js +2 -11
  247. package/dist/gb/vat.js.map +1 -1
  248. package/dist/ge/pin.d.ts +14 -2
  249. package/dist/ge/pin.js +1 -12
  250. package/dist/ge/pin.js.map +1 -1
  251. package/dist/gh/tin.d.ts +2 -2
  252. package/dist/gh/tin.js +1 -15
  253. package/dist/gh/tin.js.map +1 -1
  254. package/dist/gr/amka.d.ts +2 -2
  255. package/dist/gr/amka.js +3 -11
  256. package/dist/gr/amka.js.map +1 -1
  257. package/dist/gr/vat.d.ts +2 -2
  258. package/dist/gr/vat.js +1 -10
  259. package/dist/gr/vat.js.map +1 -1
  260. package/dist/gt/nit.d.ts +2 -2
  261. package/dist/gt/nit.js +1 -12
  262. package/dist/gt/nit.js.map +1 -1
  263. package/dist/hk/hkid.d.ts +2 -2
  264. package/dist/hk/hkid.js +1 -10
  265. package/dist/hk/hkid.js.map +1 -1
  266. package/dist/hr/vat.d.ts +2 -2
  267. package/dist/hr/vat.js +2 -9
  268. package/dist/hr/vat.js.map +1 -1
  269. package/dist/hu/vat.d.ts +2 -2
  270. package/dist/hu/vat.js +3 -10
  271. package/dist/hu/vat.js.map +1 -1
  272. package/dist/iban.d.ts +2 -2
  273. package/dist/iban.js +2 -8
  274. package/dist/iban.js.map +1 -1
  275. package/dist/id/npwp.d.ts +2 -2
  276. package/dist/id/npwp.js +3 -13
  277. package/dist/id/npwp.js.map +1 -1
  278. package/dist/ie/pps.d.ts +2 -2
  279. package/dist/ie/pps.js +1 -10
  280. package/dist/ie/pps.js.map +1 -1
  281. package/dist/ie/vat.d.ts +2 -2
  282. package/dist/ie/vat.js +1 -9
  283. package/dist/ie/vat.js.map +1 -1
  284. package/dist/il/idnr.d.ts +2 -2
  285. package/dist/il/idnr.js +2 -9
  286. package/dist/il/idnr.js.map +1 -1
  287. package/dist/in/aadhaar.d.ts +2 -2
  288. package/dist/in/aadhaar.js +2 -12
  289. package/dist/in/aadhaar.js.map +1 -1
  290. package/dist/in/gstin.d.ts +2 -2
  291. package/dist/in/gstin.js +1 -10
  292. package/dist/in/gstin.js.map +1 -1
  293. package/dist/in/pan.d.ts +15 -2
  294. package/dist/in/pan.js +1 -13
  295. package/dist/in/pan.js.map +1 -1
  296. package/dist/index.d.ts +2 -2
  297. package/dist/index.js +6 -6
  298. package/dist/iq/nid.d.ts +16 -2
  299. package/dist/iq/nid.js +2 -15
  300. package/dist/iq/nid.js.map +1 -1
  301. package/dist/ir/nid.d.ts +2 -2
  302. package/dist/ir/nid.js +2 -24
  303. package/dist/ir/nid.js.map +1 -1
  304. package/dist/is/kennitala.d.ts +2 -2
  305. package/dist/is/kennitala.js +2 -13
  306. package/dist/is/kennitala.js.map +1 -1
  307. package/dist/is/vsk.d.ts +9 -2
  308. package/dist/is/vsk.js +1 -7
  309. package/dist/is/vsk.js.map +1 -1
  310. package/dist/isin.d.ts +2 -2
  311. package/dist/isin.js +2 -12
  312. package/dist/isin.js.map +1 -1
  313. package/dist/it/codicefiscale.d.ts +2 -2
  314. package/dist/it/codicefiscale.js +1 -21
  315. package/dist/it/codicefiscale.js.map +1 -1
  316. package/dist/it/iva.d.ts +2 -2
  317. package/dist/it/iva.js +2 -9
  318. package/dist/it/iva.js.map +1 -1
  319. package/dist/jp/cn.d.ts +2 -2
  320. package/dist/jp/cn.js +1 -9
  321. package/dist/jp/cn.js.map +1 -1
  322. package/dist/jp/mynumber.d.ts +2 -2
  323. package/dist/jp/mynumber.js +1 -10
  324. package/dist/jp/mynumber.js.map +1 -1
  325. package/dist/kr/brn.d.ts +11 -2
  326. package/dist/kr/brn.js +1 -9
  327. package/dist/kr/brn.js.map +1 -1
  328. package/dist/kr/rrn.d.ts +2 -2
  329. package/dist/kr/rrn.js +2 -11
  330. package/dist/kr/rrn.js.map +1 -1
  331. package/dist/kw/civil.d.ts +2 -2
  332. package/dist/kw/civil.js +2 -14
  333. package/dist/kw/civil.js.map +1 -1
  334. package/dist/kz/iin.d.ts +2 -2
  335. package/dist/kz/iin.js +3 -18
  336. package/dist/kz/iin.js.map +1 -1
  337. package/dist/lei.d.ts +2 -2
  338. package/dist/lei.js +2 -11
  339. package/dist/lei.js.map +1 -1
  340. package/dist/li/peid.d.ts +11 -2
  341. package/dist/li/peid.js +1 -9
  342. package/dist/li/peid.js.map +1 -1
  343. package/dist/lk/nic.d.ts +2 -2
  344. package/dist/lk/nic.js +2 -14
  345. package/dist/lk/nic.js.map +1 -1
  346. package/dist/lt/asmens.d.ts +2 -2
  347. package/dist/lt/asmens.js +2 -1
  348. package/dist/lt/asmens.js.map +1 -1
  349. package/dist/lt/vat.d.ts +2 -2
  350. package/dist/lt/vat.js +2 -10
  351. package/dist/lt/vat.js.map +1 -1
  352. package/dist/lu/vat.d.ts +2 -2
  353. package/dist/lu/vat.js +2 -8
  354. package/dist/lu/vat.js.map +1 -1
  355. package/dist/luhn.d.ts +2 -2
  356. package/dist/luhn.js +2 -9
  357. package/dist/luhn.js.map +1 -1
  358. package/dist/lv/vat.d.ts +2 -2
  359. package/dist/lv/vat.js +2 -28
  360. package/dist/lv/vat.js.map +1 -1
  361. package/dist/ma/ice.d.ts +2 -2
  362. package/dist/ma/ice.js +2 -11
  363. package/dist/ma/ice.js.map +1 -1
  364. package/dist/mc/tva.d.ts +2 -2
  365. package/dist/mc/tva.js +1 -0
  366. package/dist/mc/tva.js.map +1 -1
  367. package/dist/md/idno.d.ts +2 -2
  368. package/dist/md/idno.js +1 -10
  369. package/dist/md/idno.js.map +1 -1
  370. package/dist/me/pib.d.ts +2 -2
  371. package/dist/me/pib.js +2 -10
  372. package/dist/me/pib.js.map +1 -1
  373. package/dist/mk/edb.d.ts +2 -2
  374. package/dist/mk/edb.js +2 -11
  375. package/dist/mk/edb.js.map +1 -1
  376. package/dist/mt/vat.d.ts +2 -2
  377. package/dist/mt/vat.js +3 -10
  378. package/dist/mt/vat.js.map +1 -1
  379. package/dist/mu/brn.d.ts +23 -2
  380. package/dist/mu/brn.js +1 -21
  381. package/dist/mu/brn.js.map +1 -1
  382. package/dist/mx/clabe.d.ts +2 -2
  383. package/dist/mx/clabe.js +1 -14
  384. package/dist/mx/clabe.js.map +1 -1
  385. package/dist/mx/curp.d.ts +2 -2
  386. package/dist/mx/curp.js +3 -17
  387. package/dist/mx/curp.js.map +1 -1
  388. package/dist/mx/rfc.d.ts +2 -2
  389. package/dist/mx/rfc.js +3 -19
  390. package/dist/mx/rfc.js.map +1 -1
  391. package/dist/my/nric.d.ts +2 -2
  392. package/dist/my/nric.js +2 -14
  393. package/dist/my/nric.js.map +1 -1
  394. package/dist/ng/nin.d.ts +13 -2
  395. package/dist/ng/nin.js +1 -11
  396. package/dist/ng/nin.js.map +1 -1
  397. package/dist/ni/ruc.d.ts +2 -2
  398. package/dist/ni/ruc.js +1 -23
  399. package/dist/ni/ruc.js.map +1 -1
  400. package/dist/nl/bsn.d.ts +2 -2
  401. package/dist/nl/bsn.js +2 -10
  402. package/dist/nl/bsn.js.map +1 -1
  403. package/dist/nl/kvk.d.ts +9 -2
  404. package/dist/nl/kvk.js +1 -7
  405. package/dist/nl/kvk.js.map +1 -1
  406. package/dist/nl/vat.d.ts +2 -2
  407. package/dist/nl/vat.js +1 -13
  408. package/dist/nl/vat.js.map +1 -1
  409. package/dist/no/fodselsnummer.d.ts +2 -2
  410. package/dist/no/fodselsnummer.js +2 -10
  411. package/dist/no/fodselsnummer.js.map +1 -1
  412. package/dist/no/mva.d.ts +2 -2
  413. package/dist/no/mva.js +1 -8
  414. package/dist/no/mva.js.map +1 -1
  415. package/dist/no/orgnr.d.ts +2 -2
  416. package/dist/no/orgnr.js +2 -8
  417. package/dist/no/orgnr.js.map +1 -1
  418. package/dist/nz/ird.d.ts +2 -2
  419. package/dist/nz/ird.js +2 -11
  420. package/dist/nz/ird.js.map +1 -1
  421. package/dist/pa/ruc.d.ts +2 -2
  422. package/dist/pa/ruc.js +1 -18
  423. package/dist/pa/ruc.js.map +1 -1
  424. package/dist/patterns.d.ts +8 -7
  425. package/dist/patterns.js +3 -5
  426. package/dist/patterns.js.map +1 -1
  427. package/dist/pe/ruc.d.ts +2 -2
  428. package/dist/pe/ruc.js +1 -15
  429. package/dist/pe/ruc.js.map +1 -1
  430. package/dist/ph/philid.d.ts +14 -2
  431. package/dist/ph/philid.js +1 -12
  432. package/dist/ph/philid.js.map +1 -1
  433. package/dist/pk/cnic.d.ts +14 -2
  434. package/dist/pk/cnic.js +1 -12
  435. package/dist/pk/cnic.js.map +1 -1
  436. package/dist/pl/nip.d.ts +2 -2
  437. package/dist/pl/nip.js +2 -10
  438. package/dist/pl/nip.js.map +1 -1
  439. package/dist/pl/pesel.d.ts +2 -2
  440. package/dist/pl/pesel.js +3 -13
  441. package/dist/pl/pesel.js.map +1 -1
  442. package/dist/pl/regon.d.ts +2 -2
  443. package/dist/pl/regon.js +2 -11
  444. package/dist/pl/regon.js.map +1 -1
  445. package/dist/pt/cc.d.ts +2 -2
  446. package/dist/pt/cc.js +1 -9
  447. package/dist/pt/cc.js.map +1 -1
  448. package/dist/pt/vat.d.ts +2 -2
  449. package/dist/pt/vat.js +3 -11
  450. package/dist/pt/vat.js.map +1 -1
  451. package/dist/ro/cnp.d.ts +2 -2
  452. package/dist/ro/cnp.js +4 -14
  453. package/dist/ro/cnp.js.map +1 -1
  454. package/dist/ro/vat.d.ts +2 -2
  455. package/dist/ro/vat.js +13 -11
  456. package/dist/ro/vat.js.map +1 -1
  457. package/dist/rs/pib.d.ts +2 -2
  458. package/dist/rs/pib.js +1 -9
  459. package/dist/rs/pib.js.map +1 -1
  460. package/dist/ru/inn.d.ts +2 -2
  461. package/dist/ru/inn.js +1 -11
  462. package/dist/ru/inn.js.map +1 -1
  463. package/dist/se/orgnr.d.ts +2 -2
  464. package/dist/se/orgnr.js +2 -9
  465. package/dist/se/orgnr.js.map +1 -1
  466. package/dist/se/personnummer.d.ts +2 -2
  467. package/dist/se/personnummer.js +7 -15
  468. package/dist/se/personnummer.js.map +1 -1
  469. package/dist/se/vat.d.ts +2 -2
  470. package/dist/se/vat.js +3 -10
  471. package/dist/se/vat.js.map +1 -1
  472. package/dist/sg/uen.d.ts +2 -2
  473. package/dist/sg/uen.js +1 -15
  474. package/dist/sg/uen.js.map +1 -1
  475. package/dist/si/emso.d.ts +2 -2
  476. package/dist/si/emso.js +3 -18
  477. package/dist/si/emso.js.map +1 -1
  478. package/dist/si/vat.d.ts +2 -2
  479. package/dist/si/vat.js +3 -12
  480. package/dist/si/vat.js.map +1 -1
  481. package/dist/sk/dic.d.ts +2 -2
  482. package/dist/sk/dic.js +1 -0
  483. package/dist/sk/dic.js.map +1 -1
  484. package/dist/sk/ico.d.ts +2 -2
  485. package/dist/sk/ico.js +1 -0
  486. package/dist/sk/ico.js.map +1 -1
  487. package/dist/sk/rc.d.ts +2 -2
  488. package/dist/sk/rc.js +1 -0
  489. package/dist/sk/rc.js.map +1 -1
  490. package/dist/th/tin.d.ts +2 -2
  491. package/dist/th/tin.js +1 -11
  492. package/dist/th/tin.js.map +1 -1
  493. package/dist/tr/tckimlik.d.ts +2 -2
  494. package/dist/tr/tckimlik.js +1 -20
  495. package/dist/tr/tckimlik.js.map +1 -1
  496. package/dist/tr/vkn.d.ts +2 -2
  497. package/dist/tr/vkn.js +1 -20
  498. package/dist/tr/vkn.js.map +1 -1
  499. package/dist/tw/ubn.d.ts +2 -2
  500. package/dist/tw/ubn.js +1 -11
  501. package/dist/tw/ubn.js.map +1 -1
  502. package/dist/types.d.ts +26 -4
  503. package/dist/ua/edrpou.d.ts +2 -2
  504. package/dist/ua/edrpou.js +1 -11
  505. package/dist/ua/edrpou.js.map +1 -1
  506. package/dist/us/ein.d.ts +12 -2
  507. package/dist/us/ein.js +1 -10
  508. package/dist/us/ein.js.map +1 -1
  509. package/dist/us/itin.d.ts +13 -2
  510. package/dist/us/itin.js +1 -11
  511. package/dist/us/itin.js.map +1 -1
  512. package/dist/us/rtn.d.ts +2 -2
  513. package/dist/us/rtn.js +3 -18
  514. package/dist/us/rtn.js.map +1 -1
  515. package/dist/us/ssn.d.ts +13 -2
  516. package/dist/us/ssn.js +1 -11
  517. package/dist/us/ssn.js.map +1 -1
  518. package/dist/uy/rut.d.ts +2 -2
  519. package/dist/uy/rut.js +1 -14
  520. package/dist/uy/rut.js.map +1 -1
  521. package/dist/ve/rif.d.ts +2 -2
  522. package/dist/ve/rif.js +2 -15
  523. package/dist/ve/rif.js.map +1 -1
  524. package/dist/vn/mst.d.ts +2 -2
  525. package/dist/vn/mst.js +1 -12
  526. package/dist/vn/mst.js.map +1 -1
  527. package/dist/za/idnr.d.ts +2 -2
  528. package/dist/za/idnr.js +3 -16
  529. package/dist/za/idnr.js.map +1 -1
  530. package/package.json +22 -12
  531. package/src/_checksums/mod1110.ts +1 -1
  532. package/src/ad/nrt.ts +7 -3
  533. package/src/ae/eid.ts +7 -3
  534. package/src/ai/tin.ts +7 -3
  535. package/src/al/nipt.ts +7 -3
  536. package/src/am/tin.ts +7 -3
  537. package/src/ar/cbu.ts +7 -3
  538. package/src/ar/cuit.ts +7 -3
  539. package/src/ar/dni.ts +7 -3
  540. package/src/at/businessid.ts +7 -3
  541. package/src/at/tin.ts +7 -3
  542. package/src/at/uid.ts +7 -3
  543. package/src/at/vnr.ts +37 -9
  544. package/src/au/abn.ts +7 -3
  545. package/src/au/acn.ts +7 -3
  546. package/src/au/tfn.ts +7 -3
  547. package/src/az/voen.ts +7 -3
  548. package/src/ba/jmbg.ts +8 -7
  549. package/src/bd/nid.ts +7 -3
  550. package/src/be/bis.ts +8 -4
  551. package/src/be/nn.ts +7 -3
  552. package/src/be/vat.ts +7 -3
  553. package/src/bg/egn.ts +8 -7
  554. package/src/bg/pnf.ts +7 -3
  555. package/src/bg/vat.ts +8 -3
  556. package/src/bh/cpr.ts +7 -3
  557. package/src/bic.ts +7 -3
  558. package/src/br/cnpj.ts +7 -3
  559. package/src/br/cpf.ts +7 -3
  560. package/src/by/unp.ts +10 -5
  561. package/src/bz/tin.ts +7 -3
  562. package/src/ca/bn.ts +7 -3
  563. package/src/ca/sin.ts +7 -3
  564. package/src/ch/ssn.ts +7 -3
  565. package/src/ch/uid.ts +7 -3
  566. package/src/ch/vat.ts +9 -5
  567. package/src/cl/rut.ts +7 -3
  568. package/src/cn/ric.ts +8 -7
  569. package/src/cn/uscc.ts +7 -3
  570. package/src/co/nit.ts +8 -4
  571. package/src/cr/cpf.ts +7 -3
  572. package/src/creditcard.ts +10 -6
  573. package/src/cu/ni.ts +8 -7
  574. package/src/cy/vat.ts +7 -3
  575. package/src/cz/dic.ts +9 -4
  576. package/src/cz/ico.ts +7 -3
  577. package/src/cz/rc.ts +8 -7
  578. package/src/de/handelsreg.ts +7 -3
  579. package/src/de/idnr.ts +7 -3
  580. package/src/de/stnr.ts +7 -3
  581. package/src/de/svnr.ts +7 -3
  582. package/src/de/vat.ts +7 -3
  583. package/src/dk/cpr.ts +8 -7
  584. package/src/dk/cvr.ts +7 -3
  585. package/src/dk/vat.ts +8 -3
  586. package/src/do/rnc.ts +7 -3
  587. package/src/ec/ruc.ts +7 -3
  588. package/src/ee/ik.ts +8 -7
  589. package/src/ee/registrikood.ts +8 -4
  590. package/src/ee/vat.ts +7 -3
  591. package/src/eg/tn.ts +7 -3
  592. package/src/es/cif.ts +8 -4
  593. package/src/es/dni.ts +7 -3
  594. package/src/es/nie.ts +8 -4
  595. package/src/es/nss.ts +7 -3
  596. package/src/es/vat.ts +13 -5
  597. package/src/eu/vat.ts +10 -6
  598. package/src/fi/hetu.ts +8 -7
  599. package/src/fi/vat.ts +8 -3
  600. package/src/fi/ytunnus.ts +7 -3
  601. package/src/fr/nif.ts +7 -3
  602. package/src/fr/nir.ts +8 -7
  603. package/src/fr/siren.ts +7 -3
  604. package/src/fr/siret.ts +7 -3
  605. package/src/fr/tva.ts +7 -3
  606. package/src/gb/nino.ts +7 -3
  607. package/src/gb/sedol.ts +7 -3
  608. package/src/gb/utr.ts +7 -3
  609. package/src/gb/vat.ts +7 -3
  610. package/src/ge/pin.ts +7 -3
  611. package/src/gh/tin.ts +7 -3
  612. package/src/gr/amka.ts +7 -3
  613. package/src/gr/vat.ts +7 -3
  614. package/src/gt/nit.ts +7 -3
  615. package/src/hk/hkid.ts +7 -3
  616. package/src/hr/vat.ts +7 -3
  617. package/src/hu/vat.ts +8 -3
  618. package/src/iban.ts +7 -3
  619. package/src/id/npwp.ts +7 -3
  620. package/src/ie/pps.ts +7 -3
  621. package/src/ie/vat.ts +7 -3
  622. package/src/il/idnr.ts +7 -3
  623. package/src/in/aadhaar.ts +7 -3
  624. package/src/in/gstin.ts +7 -3
  625. package/src/in/pan.ts +7 -3
  626. package/src/index.ts +3 -0
  627. package/src/iq/nid.ts +7 -3
  628. package/src/ir/nid.ts +7 -3
  629. package/src/is/kennitala.ts +7 -3
  630. package/src/is/vsk.ts +7 -3
  631. package/src/isin.ts +7 -3
  632. package/src/it/codicefiscale.ts +11 -7
  633. package/src/it/iva.ts +7 -3
  634. package/src/jp/cn.ts +7 -3
  635. package/src/jp/mynumber.ts +7 -3
  636. package/src/kr/brn.ts +7 -3
  637. package/src/kr/rrn.ts +8 -7
  638. package/src/kw/civil.ts +8 -7
  639. package/src/kz/iin.ts +8 -8
  640. package/src/lei.ts +7 -3
  641. package/src/li/peid.ts +7 -3
  642. package/src/lk/nic.ts +8 -7
  643. package/src/lt/asmens.ts +8 -4
  644. package/src/lt/vat.ts +8 -3
  645. package/src/lu/vat.ts +8 -3
  646. package/src/luhn.ts +7 -3
  647. package/src/lv/vat.ts +7 -3
  648. package/src/ma/ice.ts +7 -3
  649. package/src/mc/tva.ts +9 -5
  650. package/src/md/idno.ts +7 -3
  651. package/src/me/pib.ts +7 -3
  652. package/src/mk/edb.ts +7 -3
  653. package/src/mt/vat.ts +8 -3
  654. package/src/mu/brn.ts +7 -3
  655. package/src/mx/clabe.ts +7 -3
  656. package/src/mx/curp.ts +9 -8
  657. package/src/mx/rfc.ts +8 -4
  658. package/src/my/nric.ts +8 -7
  659. package/src/ng/nin.ts +7 -3
  660. package/src/ni/ruc.ts +7 -3
  661. package/src/nl/bsn.ts +7 -3
  662. package/src/nl/kvk.ts +7 -3
  663. package/src/nl/vat.ts +7 -3
  664. package/src/no/fodselsnummer.ts +11 -7
  665. package/src/no/mva.ts +9 -5
  666. package/src/no/orgnr.ts +7 -3
  667. package/src/nz/ird.ts +8 -4
  668. package/src/pa/ruc.ts +7 -3
  669. package/src/patterns.ts +49 -18
  670. package/src/pe/ruc.ts +7 -3
  671. package/src/ph/philid.ts +7 -3
  672. package/src/pk/cnic.ts +7 -3
  673. package/src/pl/nip.ts +7 -3
  674. package/src/pl/pesel.ts +8 -7
  675. package/src/pl/regon.ts +7 -3
  676. package/src/pt/cc.ts +7 -3
  677. package/src/pt/vat.ts +8 -3
  678. package/src/ro/cnp.ts +15 -8
  679. package/src/ro/vat.ts +8 -3
  680. package/src/rs/pib.ts +7 -3
  681. package/src/ru/inn.ts +7 -3
  682. package/src/se/orgnr.ts +7 -3
  683. package/src/se/personnummer.ts +35 -33
  684. package/src/se/vat.ts +8 -3
  685. package/src/sg/uen.ts +7 -3
  686. package/src/si/emso.ts +8 -7
  687. package/src/si/vat.ts +8 -3
  688. package/src/sk/dic.ts +8 -4
  689. package/src/sk/ico.ts +3 -2
  690. package/src/sk/rc.ts +6 -2
  691. package/src/th/tin.ts +7 -3
  692. package/src/tr/tckimlik.ts +7 -3
  693. package/src/tr/vkn.ts +7 -3
  694. package/src/tw/ubn.ts +7 -3
  695. package/src/types.ts +34 -3
  696. package/src/ua/edrpou.ts +7 -3
  697. package/src/us/ein.ts +7 -3
  698. package/src/us/itin.ts +7 -3
  699. package/src/us/rtn.ts +16 -8
  700. package/src/us/ssn.ts +7 -3
  701. package/src/uy/rut.ts +7 -3
  702. package/src/ve/rif.ts +8 -6
  703. package/src/vn/mst.ts +7 -3
  704. package/src/za/idnr.ts +8 -7
package/src/sk/ico.ts CHANGED
@@ -13,10 +13,10 @@ import {
13
13
  generate,
14
14
  validate,
15
15
  } from "../cz/ico";
16
- import type { Validator } from "../types";
16
+ import type { CountryValidator } from "../types";
17
17
 
18
18
  /** Slovak Company Identification Number. */
19
- const ico: Validator = {
19
+ const ico: CountryValidator<"SK"> = {
20
20
  name: "Slovak Company ID",
21
21
  localName: "Identifikačné číslo organizácie",
22
22
  abbreviation: "IČO",
@@ -25,6 +25,7 @@ const ico: Validator = {
25
25
  "identifikačné číslo organizácie",
26
26
  ] as const,
27
27
  candidatePattern: "\\d{8}",
28
+ scope: "country",
28
29
  country: "SK",
29
30
  entityType: "company",
30
31
  sourceUrl: "https://www.statistics.sk/",
package/src/sk/rc.ts CHANGED
@@ -15,15 +15,19 @@ import {
15
15
  parse,
16
16
  validate,
17
17
  } from "../cz/rc";
18
- import type { ParsedPersonId, Validator } from "../types";
18
+ import type {
19
+ ParsedPersonId,
20
+ CountryValidator,
21
+ } from "../types";
19
22
 
20
23
  /** Slovak Birth Number. */
21
- const rc: Validator<ParsedPersonId> = {
24
+ const rc: CountryValidator<"SK", ParsedPersonId> = {
22
25
  name: "Slovak Birth Number",
23
26
  localName: "Rodné číslo",
24
27
  abbreviation: "RČ",
25
28
  aliases: ["rodné číslo", "RČ"] as const,
26
29
  candidatePattern: "\\d{6}/\\d{3,4}",
30
+ scope: "country",
27
31
  country: "SK",
28
32
  entityType: "person",
29
33
  sourceUrl: "https://www.minv.sk/",
package/src/th/tin.ts CHANGED
@@ -10,13 +10,16 @@
10
10
  * @see https://en.wikipedia.org/wiki/Thai_identity_card
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, randomInt } 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 compact = (value: string): string =>
21
24
  clean(value, " -");
22
25
 
@@ -79,12 +82,13 @@ const generate = (): string => {
79
82
  };
80
83
 
81
84
  /** Thai Tax Identification Number. */
82
- const tin: Validator = {
85
+ const tin: CountryValidator<"TH"> = {
83
86
  name: "Thai Tax Identification Number",
84
87
  localName: "เลขประจำตัวผู้เสียภาษี",
85
88
  abbreviation: "TIN",
86
89
  aliases: ["เลขประจำตัวผู้เสียภาษี", "TIN"] as const,
87
90
  candidatePattern: "\\d{13}",
91
+ scope: "country",
88
92
  country: "TH",
89
93
  entityType: "any",
90
94
  description:
@@ -19,13 +19,16 @@
19
19
  * @see https://www.turkiye.gov.tr/nvi-tckn-dogrulama
20
20
  */
21
21
 
22
+ import type {
23
+ ValidateResult,
24
+ CountryValidator,
25
+ } from "../types";
26
+
22
27
  import { clean } from "#util/clean";
23
28
  import { randomDigits, randomInt } from "#util/generate";
24
29
  import { err } from "#util/result";
25
30
  import { isdigits } from "#util/strings";
26
31
 
27
- import type { ValidateResult, Validator } from "../types";
28
-
29
32
  const compact = (value: string): string =>
30
33
  clean(value, " -./");
31
34
 
@@ -88,7 +91,7 @@ const generate = (): string => {
88
91
  };
89
92
 
90
93
  /** Turkish Personal Identification Number. */
91
- const tckimlik: Validator = {
94
+ const tckimlik: CountryValidator<"TR"> = {
92
95
  name: "Turkish Personal ID",
93
96
  localName: "T.C. Kimlik Numarası",
94
97
  abbreviation: "T.C. Kimlik",
@@ -97,6 +100,7 @@ const tckimlik: Validator = {
97
100
  "T.C. Kimlik Numarası",
98
101
  ] as const,
99
102
  candidatePattern: "[1-9]\\d{10}",
103
+ scope: "country",
100
104
  country: "TR",
101
105
  entityType: "person",
102
106
  sourceUrl: "https://www.nvi.gov.tr/",
package/src/tr/vkn.ts CHANGED
@@ -19,13 +19,16 @@
19
19
  * @see https://www.gib.gov.tr/
20
20
  */
21
21
 
22
+ import type {
23
+ ValidateResult,
24
+ CountryValidator,
25
+ } from "../types";
26
+
22
27
  import { clean } from "#util/clean";
23
28
  import { randomDigits } from "#util/generate";
24
29
  import { err } from "#util/result";
25
30
  import { isdigits } from "#util/strings";
26
31
 
27
- import type { ValidateResult, Validator } from "../types";
28
-
29
32
  const compact = (value: string): string =>
30
33
  clean(value, " -./");
31
34
 
@@ -77,12 +80,13 @@ const generate = (): string => {
77
80
  };
78
81
 
79
82
  /** Turkish Tax Identification Number. */
80
- const vkn: Validator = {
83
+ const vkn: CountryValidator<"TR"> = {
81
84
  name: "Turkish Tax ID",
82
85
  localName: "Vergi Kimlik Numarası",
83
86
  abbreviation: "VKN",
84
87
  aliases: ["VKN", "Vergi Kimlik Numarası"] as const,
85
88
  candidatePattern: "\\d{10}",
89
+ scope: "country",
86
90
  country: "TR",
87
91
  entityType: "company",
88
92
  sourceUrl: "https://www.gib.gov.tr/",
package/src/tw/ubn.ts CHANGED
@@ -10,13 +10,16 @@
10
10
  * @see https://zh.wikipedia.org/wiki/統一編號
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 = [1, 2, 1, 2, 1, 2, 4, 1] as const;
21
24
 
22
25
  /** Sum the individual digits of a number. */
@@ -84,12 +87,13 @@ const generate = (): string => {
84
87
  };
85
88
 
86
89
  /** Taiwanese Unified Business Number. */
87
- const ubn: Validator = {
90
+ const ubn: CountryValidator<"TW"> = {
88
91
  name: "Unified Business Number",
89
92
  localName: "統一編號",
90
93
  abbreviation: "UBN",
91
94
  aliases: ["統一編號", "UBN"] as const,
92
95
  candidatePattern: "\\d{8}",
96
+ scope: "country",
93
97
  country: "TW",
94
98
  entityType: "company",
95
99
  description:
package/src/types.ts CHANGED
@@ -135,7 +135,20 @@ export type ParsedIdentifier =
135
135
  | ParsedBirthDate
136
136
  | ParsedPersonId;
137
137
 
138
- export type Validator<
138
+ /**
139
+ * Whether an identifier is scoped to a single
140
+ * country (e.g. Czech IČO) or is cross-border by
141
+ * design (e.g. IBAN, ISIN, BIC, LEI, EU VAT).
142
+ *
143
+ * Modeled as a discriminated union so consumers
144
+ * can group, filter, and exhaustively switch
145
+ * without null-checking `country`.
146
+ */
147
+ export type ValidatorScope =
148
+ | { scope: "country"; country: CountryCode }
149
+ | { scope: "global" };
150
+
151
+ type ValidatorBase<
139
152
  TParsed extends ParsedIdentifier | undefined = undefined,
140
153
  > = {
141
154
  /** English name. */
@@ -144,8 +157,6 @@ export type Validator<
144
157
  localName: string;
145
158
  /** Common abbreviation (e.g. "IČO"). */
146
159
  abbreviation: string;
147
- /** Country this identifier belongs to. */
148
- country?: CountryCode;
149
160
  /** What kind of entity this identifies. */
150
161
  entityType: "person" | "company" | "any";
151
162
 
@@ -226,6 +237,26 @@ export type Validator<
226
237
  ? unknown
227
238
  : { parse: (value: string) => TParsed | null });
228
239
 
240
+ export type CountryValidator<
241
+ TCountry extends CountryCode = CountryCode,
242
+ TParsed extends ParsedIdentifier | undefined = undefined,
243
+ > = ValidatorBase<TParsed> & {
244
+ scope: "country";
245
+ country: TCountry;
246
+ };
247
+
248
+ export type GlobalValidator<
249
+ TParsed extends ParsedIdentifier | undefined = undefined,
250
+ > = ValidatorBase<TParsed> & {
251
+ scope: "global";
252
+ };
253
+
254
+ export type Validator<
255
+ TParsed extends ParsedIdentifier | undefined = undefined,
256
+ > =
257
+ | CountryValidator<CountryCode, TParsed>
258
+ | GlobalValidator<TParsed>;
259
+
229
260
  export type ParsableValidator<
230
261
  TParsed extends ParsedIdentifier = ParsedIdentifier,
231
262
  > = Validator<TParsed>;
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;
@@ -83,12 +86,13 @@ const generate = (): string => {
83
86
  };
84
87
 
85
88
  /** Ukrainian Company Register Number. */
86
- const edrpou: Validator = {
89
+ const edrpou: CountryValidator<"UA"> = {
87
90
  name: "Ukrainian Company Register Number",
88
91
  localName: "ЄДРПОУ",
89
92
  abbreviation: "ЄДРПОУ",
90
93
  aliases: ["ЄДРПОУ", "EDRPOU"] as const,
91
94
  candidatePattern: "\\d{8}",
95
+ scope: "country",
92
96
  country: "UA",
93
97
  entityType: "company",
94
98
  lengths: [8] as const,
package/src/us/ein.ts CHANGED
@@ -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
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
@@ -23,13 +23,16 @@ const generate = (): string => {
23
23
  * @see https://www.irs.gov/individuals/individual-taxpayer-identification-number
24
24
  */
25
25
 
26
+ import type {
27
+ ValidateResult,
28
+ CountryValidator,
29
+ } from "../types";
30
+
26
31
  import { clean } from "#util/clean";
27
32
  import { randomDigits, randomPick } from "#util/generate";
28
33
  import { err } from "#util/result";
29
34
  import { isdigits } from "#util/strings";
30
35
 
31
- import type { ValidateResult, Validator } from "../types";
32
-
33
36
  const ITIN_RE = /^(?<area>\d{3})-?(?<group>\d{2})-?\d{4}$/;
34
37
 
35
38
  /** Groups 70-99 excluding 89 and 93. */
@@ -99,7 +102,7 @@ const format = (value: string): string => {
99
102
  /**
100
103
  * U.S. Individual Taxpayer Identification Number.
101
104
  */
102
- const itin: Validator = {
105
+ const itin: CountryValidator<"US"> = {
103
106
  name: "Individual Taxpayer Identification Number",
104
107
  localName: "Individual Taxpayer Identification Number",
105
108
  abbreviation: "ITIN",
@@ -108,6 +111,7 @@ const itin: Validator = {
108
111
  "Individual Taxpayer Identification Number",
109
112
  ] as const,
110
113
  candidatePattern: "9\\d{2}[\\s-]?\\d{2}[\\s-]?\\d{4}",
114
+ scope: "country",
111
115
  country: "US",
112
116
  entityType: "person",
113
117
  sourceUrl:
package/src/us/rtn.ts CHANGED
@@ -7,14 +7,19 @@
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
24
  import {
20
25
  randomDigits,
@@ -24,8 +29,6 @@ import {
24
29
  import { err } from "#util/result";
25
30
  import { isdigits } from "#util/strings";
26
31
 
27
- import type { ValidateResult, Validator } from "../types";
28
-
29
32
  const WEIGHTS = [3, 7, 1, 3, 7, 1, 3, 7, 1] as const;
30
33
 
31
34
  const compact = (value: string): string =>
@@ -48,7 +51,11 @@ const validate = (value: string): ValidateResult => {
48
51
  // Validate Federal Reserve prefix (first 2 digits)
49
52
  const prefix = Number(v.slice(0, 2));
50
53
  const validPrefixRanges =
51
- (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) ||
52
59
  (prefix >= 21 && prefix <= 32) ||
53
60
  (prefix >= 61 && prefix <= 72) ||
54
61
  prefix === 80;
@@ -78,7 +85,7 @@ const format = (value: string): string => compact(value);
78
85
 
79
86
  /** All valid Federal Reserve prefix ranges. */
80
87
  const PREFIX_RANGES: readonly [number, number][] = [
81
- [1, 12],
88
+ [0, 12],
82
89
  [21, 32],
83
90
  [61, 72],
84
91
  [80, 80],
@@ -103,7 +110,7 @@ const generate = (): string => {
103
110
  };
104
111
 
105
112
  /** U.S. Routing Transit Number. */
106
- const rtn: Validator = {
113
+ const rtn: CountryValidator<"US"> = {
107
114
  name: "Routing Transit Number",
108
115
  localName: "Routing Transit Number",
109
116
  abbreviation: "RTN",
@@ -115,6 +122,7 @@ const rtn: Validator = {
115
122
  "Routing Transit Number",
116
123
  ] as const,
117
124
  candidatePattern: "\\d{9}",
125
+ scope: "country",
118
126
  country: "US",
119
127
  entityType: "company",
120
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 => {
@@ -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
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.
@@ -110,9 +113,7 @@ const GENERATE_TYPES = ["V", "E", "J", "P", "G"] as const;
110
113
  const generate = (): string => {
111
114
  const prefix = randomPick(GENERATE_TYPES);
112
115
  const body = randomDigits(8);
113
- return (
114
- prefix + body + String(calcCheckDigit(prefix, body))
115
- );
116
+ return prefix + body + calcCheckDigit(prefix, body);
116
117
  };
117
118
 
118
119
  /**
@@ -120,7 +121,7 @@ const generate = (): string => {
120
121
  *
121
122
  * Examples sourced from python-stdnum test suite.
122
123
  */
123
- const rif: Validator = {
124
+ const rif: CountryValidator<"VE"> = {
124
125
  name: "Venezuelan Tax ID",
125
126
  localName: "Registro de Información Fiscal",
126
127
  abbreviation: "RIF",
@@ -129,6 +130,7 @@ const rif: Validator = {
129
130
  "Registro de Información Fiscal",
130
131
  ] as const,
131
132
  candidatePattern: "[VEJPG]-?\\d{8}-?\\d",
133
+ scope: "country",
132
134
  country: "VE",
133
135
  entityType: "any",
134
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,12 +132,13 @@ const generate = (): string => {
132
132
  };
133
133
 
134
134
  /** South African Identity Number. */
135
- const idnr: Validator<ParsedPersonId> = {
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,