@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/my/nric.ts CHANGED
@@ -12,18 +12,18 @@
12
12
  * @see https://en.wikipedia.org/wiki/Malaysian_identity_card
13
13
  */
14
14
 
15
+ import type {
16
+ ParsedPersonId,
17
+ ValidateResult,
18
+ CountryValidator,
19
+ } from "../types";
20
+
15
21
  import { clean } from "#util/clean";
16
22
  import { isValidDate } from "#util/date";
17
23
  import { randomInt } from "#util/generate";
18
24
  import { err } from "#util/result";
19
25
  import { isdigits } from "#util/strings";
20
26
 
21
- import type {
22
- ParsedPersonId,
23
- ValidateResult,
24
- Validator,
25
- } from "../types";
26
-
27
27
  /**
28
28
  * Valid place-of-birth codes (2-digit).
29
29
  * Codes 01-16 are states, 21-59 are pre-2000
@@ -234,12 +234,13 @@ const generate = (): string => {
234
234
  };
235
235
 
236
236
  /** Malaysian National Registration Identity Card. */
237
- const nric: Validator<ParsedPersonId> = {
237
+ const nric: CountryValidator<"MY", ParsedPersonId> = {
238
238
  name: "Malaysian National Registration Identity Card Number",
239
239
  localName: "Nombor Kad Pengenalan",
240
240
  abbreviation: "NRIC",
241
241
  aliases: ["NRIC", "MyKad", "kad pengenalan"] as const,
242
242
  candidatePattern: "\\d{6}-?\\d{2}-?\\d{4}",
243
+ scope: "country",
243
244
  country: "MY",
244
245
  entityType: "person",
245
246
  description:
package/src/ng/nin.ts CHANGED
@@ -13,13 +13,16 @@ const generate = (): string => randomDigits(11);
13
13
  * @see https://nimc.gov.ng/about-nin/
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 } from "#util/generate";
18
23
  import { err } from "#util/result";
19
24
  import { isdigits } from "#util/strings";
20
25
 
21
- import type { ValidateResult, Validator } from "../types";
22
-
23
26
  const compact = (value: string): string =>
24
27
  clean(value, " -");
25
28
 
@@ -46,7 +49,7 @@ const format = (value: string): string => {
46
49
  };
47
50
 
48
51
  /** Nigerian National Identification Number. */
49
- const nin: Validator = {
52
+ const nin: CountryValidator<"NG"> = {
50
53
  name: "National Identification Number",
51
54
  localName: "National Identification Number",
52
55
  abbreviation: "NIN",
@@ -55,6 +58,7 @@ const nin: Validator = {
55
58
  "National Identification Number",
56
59
  ] as const,
57
60
  candidatePattern: "\\d{11}",
61
+ scope: "country",
58
62
  country: "NG",
59
63
  entityType: "person",
60
64
  lengths: [11] as const,
package/src/ni/ruc.ts CHANGED
@@ -22,13 +22,16 @@
22
22
  * @see https://www.dgi.gob.ni/
23
23
  */
24
24
 
25
+ import type {
26
+ ValidateResult,
27
+ CountryValidator,
28
+ } from "../types";
29
+
25
30
  import { clean } from "#util/clean";
26
31
  import { randomDigits } from "#util/generate";
27
32
  import { err } from "#util/result";
28
33
  import { isdigits } from "#util/strings";
29
34
 
30
- import type { ValidateResult, Validator } from "../types";
31
-
32
35
  /**
33
36
  * Check letter alphabet (mod 23). Excludes I, O, Z
34
37
  * to prevent transcription errors.
@@ -154,12 +157,13 @@ const format = (value: string): string => {
154
157
  const generate = (): string => "J" + randomDigits(13);
155
158
 
156
159
  /** Nicaragua tax identification number. */
157
- const ruc: Validator = {
160
+ const ruc: CountryValidator<"NI"> = {
158
161
  name: "Tax Identification Number",
159
162
  localName: "Registro Único de Contribuyente",
160
163
  abbreviation: "RUC",
161
164
  aliases: ["RUC"] as const,
162
165
  candidatePattern: "[JKME]\\d{13}",
166
+ scope: "country",
163
167
  country: "NI",
164
168
  entityType: "any",
165
169
  description: "Tax identifier issued by Nicaragua's DGI",
package/src/nl/bsn.ts CHANGED
@@ -8,14 +8,17 @@
8
8
  * @see https://www.government.nl/topics/personal-data/citizen-service-number-bsn
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+
11
16
  import { weightedSum } from "#checksums/weighted-sum";
12
17
  import { clean } from "#util/clean";
13
18
  import { randomDigits } from "#util/generate";
14
19
  import { err } from "#util/result";
15
20
  import { isdigits } from "#util/strings";
16
21
 
17
- import type { ValidateResult, Validator } from "../types";
18
-
19
22
  const WEIGHTS = [9, 8, 7, 6, 5, 4, 3, 2, -1] as const;
20
23
 
21
24
  const compact = (value: string): string =>
@@ -62,7 +65,7 @@ const generate = (): string => {
62
65
  };
63
66
 
64
67
  /** Dutch Citizen Service Number. */
65
- const bsn: Validator = {
68
+ const bsn: CountryValidator<"NL"> = {
66
69
  name: "Dutch Citizen Service Number",
67
70
  localName: "Burgerservicenummer",
68
71
  abbreviation: "BSN",
@@ -72,6 +75,7 @@ const bsn: Validator = {
72
75
  "sofinummer",
73
76
  ] as const,
74
77
  candidatePattern: "\\d{9}",
78
+ scope: "country",
75
79
  country: "NL",
76
80
  entityType: "person",
77
81
  sourceUrl:
package/src/nl/kvk.ts CHANGED
@@ -9,13 +9,16 @@ const generate = (): string => randomDigits(8);
9
9
  * @see https://www.kvk.nl/
10
10
  */
11
11
 
12
+ import type {
13
+ ValidateResult,
14
+ CountryValidator,
15
+ } from "../types";
16
+
12
17
  import { clean } from "#util/clean";
13
18
  import { randomDigits } from "#util/generate";
14
19
  import { err } from "#util/result";
15
20
  import { isdigits } from "#util/strings";
16
21
 
17
- import type { ValidateResult, Validator } from "../types";
18
-
19
22
  const compact = (value: string): string =>
20
23
  clean(value, " -/.");
21
24
 
@@ -39,12 +42,13 @@ const validate = (value: string): ValidateResult => {
39
42
  const format = (value: string): string => compact(value);
40
43
 
41
44
  /** Dutch Chamber of Commerce Number. */
42
- const kvk: Validator = {
45
+ const kvk: CountryValidator<"NL"> = {
43
46
  name: "Dutch Chamber of Commerce Number",
44
47
  localName: "KvK-nummer",
45
48
  abbreviation: "KvK",
46
49
  aliases: ["KVK-nummer", "Kamer van Koophandel"] as const,
47
50
  candidatePattern: "\\d{8}",
51
+ scope: "country",
48
52
  country: "NL",
49
53
  entityType: "company",
50
54
  sourceUrl: "https://www.kvk.nl/",
package/src/nl/vat.ts CHANGED
@@ -12,13 +12,16 @@
12
12
  * @see https://business.gov.nl/regulations/using-checking-vat-numbers/
13
13
  */
14
14
 
15
+ import type {
16
+ ValidateResult,
17
+ CountryValidator,
18
+ } from "../types";
19
+
15
20
  import { clean } from "#util/clean";
16
21
  import { randomDigits } from "#util/generate";
17
22
  import { err } from "#util/result";
18
23
  import { isdigits } from "#util/strings";
19
24
 
20
- import type { ValidateResult, Validator } from "../types";
21
-
22
25
  const compact = (value: string): string => {
23
26
  let v = clean(value, " -/.");
24
27
  if (v.startsWith("NL") || v.startsWith("nl")) {
@@ -70,12 +73,13 @@ const generate = (): string =>
70
73
  `${randomDigits(9)}B${randomDigits(2)}`;
71
74
 
72
75
  /** Dutch VAT Number. */
73
- const vat: Validator = {
76
+ const vat: CountryValidator<"NL"> = {
74
77
  name: "Dutch VAT Number",
75
78
  localName: "BTW-identificatienummer",
76
79
  abbreviation: "BTW",
77
80
  aliases: ["BTW-nummer", "BTW-id"] as const,
78
81
  candidatePattern: "NL\\d{9}B\\d{2}",
82
+ scope: "country",
79
83
  country: "NL",
80
84
  entityType: "company",
81
85
  sourceUrl:
@@ -8,18 +8,18 @@
8
8
  * @see https://www.skatteetaten.no/
9
9
  */
10
10
 
11
+ import type {
12
+ ParsedPersonId,
13
+ ValidateResult,
14
+ CountryValidator,
15
+ } from "../types";
16
+
11
17
  import { clean } from "#util/clean";
12
18
  import { isValidDate } from "#util/date";
13
19
  import { randomDigits, randomInt } from "#util/generate";
14
20
  import { err } from "#util/result";
15
21
  import { isdigits } from "#util/strings";
16
22
 
17
- import type {
18
- ParsedPersonId,
19
- ValidateResult,
20
- Validator,
21
- } from "../types";
22
-
23
23
  const WEIGHTS_D1 = [3, 7, 6, 1, 8, 9, 4, 5, 2] as const;
24
24
  const WEIGHTS_D2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2] as const;
25
25
 
@@ -172,12 +172,16 @@ const generate = (): string => {
172
172
  };
173
173
 
174
174
  /** Norwegian Birth Number. */
175
- const fodselsnummer: Validator<ParsedPersonId> = {
175
+ const fodselsnummer: CountryValidator<
176
+ "NO",
177
+ ParsedPersonId
178
+ > = {
176
179
  name: "Norwegian Birth Number",
177
180
  localName: "Fødselsnummer",
178
181
  abbreviation: "Fødselsnr",
179
182
  aliases: ["fødselsnummer", "personnummer"] as const,
180
183
  candidatePattern: "\\d{11}",
184
+ scope: "country",
181
185
  country: "NO",
182
186
  entityType: "person",
183
187
  sourceUrl: "https://www.skatteetaten.no/",
package/src/no/mva.ts CHANGED
@@ -7,15 +7,18 @@
7
7
  * @see https://www.skatteetaten.no/
8
8
  */
9
9
 
10
- import { clean } from "#util/clean";
11
- import { err } from "#util/result";
12
-
13
- import type { ValidateResult, Validator } from "../types";
10
+ import type {
11
+ ValidateResult,
12
+ CountryValidator,
13
+ } from "../types";
14
14
  import {
15
15
  validate as validateOrgnr,
16
16
  generate as generateOrgnr,
17
17
  } from "./orgnr";
18
18
 
19
+ import { clean } from "#util/clean";
20
+ import { err } from "#util/result";
21
+
19
22
  const compact = (value: string): string => {
20
23
  let v = clean(value, " -").toUpperCase();
21
24
  if (v.startsWith("NO")) {
@@ -53,12 +56,13 @@ const format = (value: string): string => {
53
56
  const generate = (): string => generateOrgnr() + "MVA";
54
57
 
55
58
  /** Norwegian VAT Number. */
56
- const mva: Validator = {
59
+ const mva: CountryValidator<"NO"> = {
57
60
  name: "Norwegian VAT Number",
58
61
  localName: "Merverdiavgift",
59
62
  abbreviation: "MVA",
60
63
  aliases: ["MVA-nummer", "organisasjonsnummer"] as const,
61
64
  candidatePattern: "NO\\d{9}MVA",
65
+ scope: "country",
62
66
  country: "NO",
63
67
  entityType: "company",
64
68
  sourceUrl: "https://www.skatteetaten.no/",
package/src/no/orgnr.ts CHANGED
@@ -6,14 +6,17 @@
6
6
  * @see https://www.brreg.no/
7
7
  */
8
8
 
9
+ import type {
10
+ ValidateResult,
11
+ CountryValidator,
12
+ } from "../types";
13
+
9
14
  import { weightedSum } from "#checksums/weighted-sum";
10
15
  import { clean } from "#util/clean";
11
16
  import { randomDigits } from "#util/generate";
12
17
  import { err } from "#util/result";
13
18
  import { isdigits } from "#util/strings";
14
19
 
15
- import type { ValidateResult, Validator } from "../types";
16
-
17
20
  const WEIGHTS = [3, 2, 7, 6, 5, 4, 3, 2, 1] as const;
18
21
 
19
22
  const compact = (value: string): string =>
@@ -59,12 +62,13 @@ const generate = (): string => {
59
62
  };
60
63
 
61
64
  /** Norwegian Organization Number. */
62
- const orgnr: Validator = {
65
+ const orgnr: CountryValidator<"NO"> = {
63
66
  name: "Norwegian Organization Number",
64
67
  localName: "Organisasjonsnummer",
65
68
  abbreviation: "Orgnr",
66
69
  aliases: ["organisasjonsnummer", "org.nr"] as const,
67
70
  candidatePattern: "\\d{9}",
71
+ scope: "country",
68
72
  country: "NO",
69
73
  entityType: "company",
70
74
  sourceUrl: "https://www.brreg.no/",
package/src/nz/ird.ts CHANGED
@@ -9,13 +9,16 @@
9
9
  * @see https://www.ird.govt.nz/
10
10
  */
11
11
 
12
+ import type {
13
+ ValidateResult,
14
+ CountryValidator,
15
+ } from "../types";
16
+
12
17
  import { clean } from "#util/clean";
13
18
  import { randomDigits } from "#util/generate";
14
19
  import { err } from "#util/result";
15
20
  import { isdigits } from "#util/strings";
16
21
 
17
- import type { ValidateResult, Validator } from "../types";
18
-
19
22
  const PRIMARY_WEIGHTS = [3, 2, 7, 6, 5, 4, 3, 2] as const;
20
23
 
21
24
  const SECONDARY_WEIGHTS = [7, 4, 3, 2, 5, 2, 7, 6] as const;
@@ -80,7 +83,7 @@ const validate = (value: string): ValidateResult => {
80
83
  "IRD number cannot have a valid check digit",
81
84
  );
82
85
  }
83
- if (expected !== Number(v[v.length - 1])) {
86
+ if (expected !== Number(v.at(-1))) {
84
87
  return err(
85
88
  "INVALID_CHECKSUM",
86
89
  "IRD check digit does not match",
@@ -105,12 +108,13 @@ const generate = (): string => {
105
108
  };
106
109
 
107
110
  /** New Zealand IRD Number. */
108
- const ird: Validator = {
111
+ const ird: CountryValidator<"NZ"> = {
109
112
  name: "IRD Number",
110
113
  localName: "IRD Number",
111
114
  abbreviation: "IRD",
112
115
  aliases: ["IRD number", "tax number NZ"] as const,
113
116
  candidatePattern: "\\d{8,9}",
117
+ scope: "country",
114
118
  country: "NZ",
115
119
  entityType: "any",
116
120
  compact,
package/src/pa/ruc.ts CHANGED
@@ -17,12 +17,15 @@
17
17
  * @see https://dgi.mef.gob.pa/
18
18
  */
19
19
 
20
+ import type {
21
+ ValidateResult,
22
+ CountryValidator,
23
+ } from "../types";
24
+
20
25
  import { clean } from "#util/clean";
21
26
  import { randomInt } from "#util/generate";
22
27
  import { err } from "#util/result";
23
28
 
24
- import type { ValidateResult, Validator } from "../types";
25
-
26
29
  /**
27
30
  * Legacy cross-reference table: maps two-digit codes
28
31
  * at positions 5–6 of old-format juridical RUCs.
@@ -359,12 +362,13 @@ const generate = (): string => {
359
362
  };
360
363
 
361
364
  /** Panama tax identification number. */
362
- const ruc: Validator = {
365
+ const ruc: CountryValidator<"PA"> = {
363
366
  name: "Tax Identification Number",
364
367
  localName: "Registro Único de Contribuyente",
365
368
  abbreviation: "RUC",
366
369
  aliases: ["RUC"] as const,
367
370
  candidatePattern: "\\d{1,2}-?\\d{1,4}-?\\d{1,6}",
371
+ scope: "country",
368
372
  country: "PA",
369
373
  entityType: "any",
370
374
  description: "Tax identifier issued by Panama's DGI",
package/src/patterns.ts CHANGED
@@ -27,13 +27,19 @@
27
27
  * ```
28
28
  */
29
29
 
30
- import type { CountryCode, Validator } from "./types";
30
+ import type {
31
+ CountryCode,
32
+ CountryValidator,
33
+ Validator,
34
+ } from "./types";
31
35
 
32
36
  // ─── Pattern type ─────────────────────────────
33
37
 
34
- export type ValidatorPattern = {
38
+ export type ValidatorPattern<
39
+ TValidator extends Validator = Validator,
40
+ > = {
35
41
  /** The validator this pattern was derived from. */
36
- validator: Validator;
42
+ validator: TValidator;
37
43
  /** Loose regex matching candidates in text. */
38
44
  regex: RegExp;
39
45
  };
@@ -314,9 +320,9 @@ export const toRegex = (v: Validator): RegExp => {
314
320
  /**
315
321
  * Build patterns for a list of validators.
316
322
  */
317
- export const toPatterns = (
318
- validators: readonly Validator[],
319
- ): ValidatorPattern[] =>
323
+ export const toPatterns = <TValidator extends Validator>(
324
+ validators: readonly TValidator[],
325
+ ): ValidatorPattern<TValidator>[] =>
320
326
  validators.map((v) => ({
321
327
  validator: v,
322
328
  regex: toRegex(v),
@@ -326,22 +332,47 @@ export const toPatterns = (
326
332
  * Filter validators by country code and build
327
333
  * patterns.
328
334
  */
329
- export const byCountry = (
330
- country: CountryCode,
331
- validators: readonly Validator[],
332
- ): ValidatorPattern[] =>
333
- toPatterns(
334
- validators.filter((v) => v.country === country),
335
+ type CountryScopedValidator<
336
+ TValidator extends Validator,
337
+ TCountry extends CountryCode,
338
+ > =
339
+ TValidator extends CountryValidator<
340
+ infer TValidatorCountry,
341
+ infer TParsed
342
+ >
343
+ ? TCountry extends TValidatorCountry
344
+ ? TValidator & CountryValidator<TCountry, TParsed>
345
+ : TValidatorCountry extends TCountry
346
+ ? TValidator
347
+ : never
348
+ : never;
349
+
350
+ export const byCountry = <
351
+ TCountry extends CountryCode,
352
+ TValidator extends Validator,
353
+ >(
354
+ country: TCountry,
355
+ validators: readonly TValidator[],
356
+ ): ValidatorPattern<
357
+ CountryScopedValidator<TValidator, TCountry>
358
+ >[] => {
359
+ const countryValidators = validators.filter(
360
+ (
361
+ v,
362
+ ): v is CountryScopedValidator<TValidator, TCountry> =>
363
+ v.scope === "country" && v.country === country,
335
364
  );
365
+ return toPatterns(countryValidators);
366
+ };
336
367
 
337
368
  /**
338
369
  * Filter validators by entity type and build
339
370
  * patterns.
340
371
  */
341
- export const byEntityType = (
372
+ export const byEntityType = <TValidator extends Validator>(
342
373
  entityType: "person" | "company" | "any",
343
- validators: readonly Validator[],
344
- ): ValidatorPattern[] =>
374
+ validators: readonly TValidator[],
375
+ ): ValidatorPattern<TValidator>[] =>
345
376
  toPatterns(
346
377
  validators.filter(
347
378
  (v) =>
@@ -354,6 +385,6 @@ export const byEntityType = (
354
385
  /**
355
386
  * Build patterns for ALL provided validators.
356
387
  */
357
- export const allPatterns = (
358
- validators: readonly Validator[],
359
- ): ValidatorPattern[] => toPatterns(validators);
388
+ export const allPatterns = <TValidator extends Validator>(
389
+ validators: readonly TValidator[],
390
+ ): ValidatorPattern<TValidator>[] => toPatterns(validators);
package/src/pe/ruc.ts CHANGED
@@ -14,13 +14,16 @@
14
14
  * @see https://en.wikipedia.org/wiki/Tax_identification_number#Peru
15
15
  */
16
16
 
17
+ import type {
18
+ ValidateResult,
19
+ CountryValidator,
20
+ } from "../types";
21
+
17
22
  import { clean } from "#util/clean";
18
23
  import { randomDigits, randomPick } from "#util/generate";
19
24
  import { err } from "#util/result";
20
25
  import { isdigits } from "#util/strings";
21
26
 
22
- import type { ValidateResult, Validator } from "../types";
23
-
24
27
  /**
25
28
  * Valid type prefixes for RUC numbers.
26
29
  * 10 = natural person, 15 = non-domiciled without RUC,
@@ -99,12 +102,13 @@ const generate = (): string => {
99
102
  * Examples sourced from python-stdnum test suite
100
103
  * (pe.ruc module).
101
104
  */
102
- const ruc: Validator = {
105
+ const ruc: CountryValidator<"PE"> = {
103
106
  name: "Peruvian Tax ID",
104
107
  localName: "Registro Único de Contribuyentes",
105
108
  abbreviation: "RUC",
106
109
  aliases: ["RUC"] as const,
107
110
  candidatePattern: "\\d{11}",
111
+ scope: "country",
108
112
  country: "PE",
109
113
  entityType: "any",
110
114
  compact,
package/src/ph/philid.ts CHANGED
@@ -14,13 +14,16 @@ const generate = (): string => randomDigits(12);
14
14
  * @see https://philsys.gov.ph/
15
15
  */
16
16
 
17
+ import type {
18
+ ValidateResult,
19
+ CountryValidator,
20
+ } from "../types";
21
+
17
22
  import { clean } from "#util/clean";
18
23
  import { randomDigits } from "#util/generate";
19
24
  import { err } from "#util/result";
20
25
  import { isdigits } from "#util/strings";
21
26
 
22
- import type { ValidateResult, Validator } from "../types";
23
-
24
27
  const compact = (value: string): string =>
25
28
  clean(value, " -");
26
29
 
@@ -50,12 +53,13 @@ const format = (value: string): string => {
50
53
  };
51
54
 
52
55
  /** Philippine Identification System Number. */
53
- const philid: Validator = {
56
+ const philid: CountryValidator<"PH"> = {
54
57
  name: "Philippine Identification System Number",
55
58
  localName: "PhilSys Card Number",
56
59
  abbreviation: "PhilID",
57
60
  aliases: ["PhilID", "PhilSys", "Philippine ID"] as const,
58
61
  candidatePattern: "\\d{4}-\\d{4}-\\d{4}-\\d{4}",
62
+ scope: "country",
59
63
  country: "PH",
60
64
  entityType: "person",
61
65
  description:
package/src/pk/cnic.ts CHANGED
@@ -20,13 +20,16 @@ const generate = (): string => {
20
20
  * @see https://en.wikipedia.org/wiki/CNIC_(Pakistan)
21
21
  */
22
22
 
23
+ import type {
24
+ ValidateResult,
25
+ CountryValidator,
26
+ } from "../types";
27
+
23
28
  import { clean } from "#util/clean";
24
29
  import { randomDigits, randomInt } from "#util/generate";
25
30
  import { err } from "#util/result";
26
31
  import { isdigits } from "#util/strings";
27
32
 
28
- import type { ValidateResult, Validator } from "../types";
29
-
30
33
  const compact = (value: string): string =>
31
34
  clean(value, " -");
32
35
 
@@ -81,12 +84,13 @@ const format = (value: string): string => {
81
84
  };
82
85
 
83
86
  /** Pakistan Computerized National Identity Card. */
84
- const cnic: Validator = {
87
+ const cnic: CountryValidator<"PK"> = {
85
88
  name: "Computerized National Identity Card",
86
89
  localName: "Computerized National Identity Card",
87
90
  abbreviation: "CNIC",
88
91
  aliases: ["CNIC", "شناختی کارڈ"] as const,
89
92
  candidatePattern: "\\d{5}-?\\d{7}-?\\d",
93
+ scope: "country",
90
94
  country: "PK",
91
95
  entityType: "person",
92
96
  lengths: [13],
package/src/pl/nip.ts CHANGED
@@ -8,14 +8,17 @@
8
8
  * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/poland-tin.pdf
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+
11
16
  import { weightedSum } from "#checksums/weighted-sum";
12
17
  import { clean } from "#util/clean";
13
18
  import { randomDigits } from "#util/generate";
14
19
  import { err } from "#util/result";
15
20
  import { isdigits } from "#util/strings";
16
21
 
17
- import type { ValidateResult, Validator } from "../types";
18
-
19
22
  const WEIGHTS = [6, 5, 7, 2, 3, 4, 5, 6, 7] as const;
20
23
 
21
24
  const compact = (value: string): string => {
@@ -73,7 +76,7 @@ const generate = (): string => {
73
76
  };
74
77
 
75
78
  /** Polish VAT Number. */
76
- const nip: Validator = {
79
+ const nip: CountryValidator<"PL"> = {
77
80
  name: "Polish VAT Number",
78
81
  localName: "Numer Identyfikacji Podatkowej",
79
82
  abbreviation: "NIP",
@@ -82,6 +85,7 @@ const nip: Validator = {
82
85
  "numer identyfikacji podatkowej",
83
86
  ] as const,
84
87
  candidatePattern: "\\d{3}-?\\d{3}-?\\d{2}-?\\d{2}",
88
+ scope: "country",
85
89
  country: "PL",
86
90
  entityType: "company",
87
91
  sourceUrl: "https://www.biznes.gov.pl/en/portal/004124",