@stll/stdnum 0.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (808) hide show
  1. package/LICENSE +1 -5
  2. package/README.md +28 -4
  3. package/dist/_checksums/luhn.js.map +1 -1
  4. package/dist/_checksums/mod1110.js +1 -1
  5. package/dist/_checksums/mod1110.js.map +1 -1
  6. package/dist/_checksums/mod112.js +5 -5
  7. package/dist/_checksums/mod112.js.map +1 -1
  8. package/dist/_checksums/mod97.js.map +1 -1
  9. package/dist/_checksums/verhoeff.js.map +1 -1
  10. package/dist/_checksums/weighted-sum.js.map +1 -1
  11. package/dist/_util/arabic.js.map +1 -1
  12. package/dist/_util/clean.js.map +1 -1
  13. package/dist/_util/date.js.map +1 -1
  14. package/dist/_util/generate.d.ts +13 -1
  15. package/dist/_util/generate.js +23 -1
  16. package/dist/_util/generate.js.map +1 -1
  17. package/dist/_util/result.js.map +1 -1
  18. package/dist/_util/strings.js.map +1 -1
  19. package/dist/ad/mod.d.ts +3 -2
  20. package/dist/ad/nrt.d.ts +16 -2
  21. package/dist/ad/nrt.js +4 -16
  22. package/dist/ad/nrt.js.map +1 -1
  23. package/dist/ae/eid.d.ts +2 -3
  24. package/dist/ae/eid.js +2 -12
  25. package/dist/ae/eid.js.map +1 -1
  26. package/dist/ae/mod.d.ts +3 -2
  27. package/dist/ai/mod.d.ts +3 -2
  28. package/dist/ai/tin.d.ts +20 -2
  29. package/dist/ai/tin.js +1 -18
  30. package/dist/ai/tin.js.map +1 -1
  31. package/dist/al/mod.d.ts +3 -2
  32. package/dist/al/nipt.d.ts +13 -2
  33. package/dist/al/nipt.js +1 -11
  34. package/dist/al/nipt.js.map +1 -1
  35. package/dist/am/mod.d.ts +3 -2
  36. package/dist/am/tin.d.ts +16 -2
  37. package/dist/am/tin.js +1 -14
  38. package/dist/am/tin.js.map +1 -1
  39. package/dist/ar/cbu.d.ts +2 -3
  40. package/dist/ar/cbu.js +2 -10
  41. package/dist/ar/cbu.js.map +1 -1
  42. package/dist/ar/cuit.d.ts +2 -3
  43. package/dist/ar/cuit.js +13 -29
  44. package/dist/ar/cuit.js.map +1 -1
  45. package/dist/ar/dni.d.ts +11 -2
  46. package/dist/ar/dni.js +1 -9
  47. package/dist/ar/dni.js.map +1 -1
  48. package/dist/ar/mod.d.ts +3 -2
  49. package/dist/at/businessid.d.ts +10 -2
  50. package/dist/at/businessid.js +1 -8
  51. package/dist/at/businessid.js.map +1 -1
  52. package/dist/at/mod.d.ts +3 -2
  53. package/dist/at/tin.d.ts +2 -3
  54. package/dist/at/tin.js +1 -11
  55. package/dist/at/tin.js.map +1 -1
  56. package/dist/at/uid.d.ts +2 -3
  57. package/dist/at/uid.js +2 -10
  58. package/dist/at/uid.js.map +1 -1
  59. package/dist/at/vnr.d.ts +5 -4
  60. package/dist/at/vnr.js +23 -16
  61. package/dist/at/vnr.js.map +1 -1
  62. package/dist/au/abn.d.ts +2 -3
  63. package/dist/au/abn.js +1 -10
  64. package/dist/au/abn.js.map +1 -1
  65. package/dist/au/acn.d.ts +2 -3
  66. package/dist/au/acn.js +1 -10
  67. package/dist/au/acn.js.map +1 -1
  68. package/dist/au/mod.d.ts +3 -2
  69. package/dist/au/tfn.d.ts +2 -3
  70. package/dist/au/tfn.js +1 -10
  71. package/dist/au/tfn.js.map +1 -1
  72. package/dist/az/mod.d.ts +3 -2
  73. package/dist/az/voen.d.ts +2 -3
  74. package/dist/az/voen.js +1 -14
  75. package/dist/az/voen.js.map +1 -1
  76. package/dist/ba/jmbg.d.ts +2 -3
  77. package/dist/ba/jmbg.js +4 -11
  78. package/dist/ba/jmbg.js.map +1 -1
  79. package/dist/ba/mod.d.ts +3 -2
  80. package/dist/bd/mod.d.ts +3 -2
  81. package/dist/bd/nid.d.ts +23 -2
  82. package/dist/bd/nid.js +11 -32
  83. package/dist/bd/nid.js.map +1 -1
  84. package/dist/be/bis.d.ts +2 -3
  85. package/dist/be/bis.js +1 -11
  86. package/dist/be/bis.js.map +1 -1
  87. package/dist/be/mod.d.ts +3 -2
  88. package/dist/be/nn.d.ts +2 -3
  89. package/dist/be/nn.js +1 -11
  90. package/dist/be/nn.js.map +1 -1
  91. package/dist/be/vat.d.ts +2 -3
  92. package/dist/be/vat.js +1 -9
  93. package/dist/be/vat.js.map +1 -1
  94. package/dist/bg/egn.d.ts +2 -3
  95. package/dist/bg/egn.js +5 -13
  96. package/dist/bg/egn.js.map +1 -1
  97. package/dist/bg/mod.d.ts +3 -2
  98. package/dist/bg/pnf.d.ts +2 -3
  99. package/dist/bg/pnf.js +1 -8
  100. package/dist/bg/pnf.js.map +1 -1
  101. package/dist/bg/vat.d.ts +2 -3
  102. package/dist/bg/vat.js +3 -9
  103. package/dist/bg/vat.js.map +1 -1
  104. package/dist/bh/cpr.d.ts +5 -4
  105. package/dist/bh/cpr.js +9 -19
  106. package/dist/bh/cpr.js.map +1 -1
  107. package/dist/bh/mod.d.ts +3 -2
  108. package/dist/bic.d.ts +13 -2
  109. package/dist/bic.js +14 -26
  110. package/dist/bic.js.map +1 -1
  111. package/dist/br/cnpj.d.ts +2 -3
  112. package/dist/br/cnpj.js +1 -20
  113. package/dist/br/cnpj.js.map +1 -1
  114. package/dist/br/cpf.d.ts +2 -3
  115. package/dist/br/cpf.js +1 -14
  116. package/dist/br/cpf.js.map +1 -1
  117. package/dist/br/mod.d.ts +3 -2
  118. package/dist/by/mod.d.ts +3 -2
  119. package/dist/by/unp.d.ts +2 -3
  120. package/dist/by/unp.js +9 -17
  121. package/dist/by/unp.js.map +1 -1
  122. package/dist/bz/mod.d.ts +3 -2
  123. package/dist/bz/tin.d.ts +5 -4
  124. package/dist/bz/tin.js +10 -27
  125. package/dist/bz/tin.js.map +1 -1
  126. package/dist/ca/bn.d.ts +2 -3
  127. package/dist/ca/bn.js +2 -10
  128. package/dist/ca/bn.js.map +1 -1
  129. package/dist/ca/mod.d.ts +3 -2
  130. package/dist/ca/sin.d.ts +2 -3
  131. package/dist/ca/sin.js +2 -10
  132. package/dist/ca/sin.js.map +1 -1
  133. package/dist/ch/mod.d.ts +3 -2
  134. package/dist/ch/ssn.d.ts +2 -3
  135. package/dist/ch/ssn.js +1 -9
  136. package/dist/ch/ssn.js.map +1 -1
  137. package/dist/ch/uid.d.ts +2 -3
  138. package/dist/ch/uid.js +1 -9
  139. package/dist/ch/uid.js.map +1 -1
  140. package/dist/ch/vat.d.ts +2 -3
  141. package/dist/ch/vat.js +1 -9
  142. package/dist/ch/vat.js.map +1 -1
  143. package/dist/cl/mod.d.ts +3 -2
  144. package/dist/cl/rut.d.ts +2 -3
  145. package/dist/cl/rut.js +2 -15
  146. package/dist/cl/rut.js.map +1 -1
  147. package/dist/cn/mod.d.ts +3 -2
  148. package/dist/cn/ric.d.ts +2 -3
  149. package/dist/cn/ric.js +4 -14
  150. package/dist/cn/ric.js.map +1 -1
  151. package/dist/cn/uscc.d.ts +2 -3
  152. package/dist/cn/uscc.js +8 -16
  153. package/dist/cn/uscc.js.map +1 -1
  154. package/dist/co/mod.d.ts +3 -2
  155. package/dist/co/nit.d.ts +2 -3
  156. package/dist/co/nit.js +6 -13
  157. package/dist/co/nit.js.map +1 -1
  158. package/dist/cr/cpf.d.ts +18 -2
  159. package/dist/cr/cpf.js +5 -19
  160. package/dist/cr/cpf.js.map +1 -1
  161. package/dist/cr/mod.d.ts +3 -2
  162. package/dist/creditcard.d.ts +2 -3
  163. package/dist/creditcard.js +5 -14
  164. package/dist/creditcard.js.map +1 -1
  165. package/dist/cu/mod.d.ts +3 -2
  166. package/dist/cu/ni.d.ts +5 -4
  167. package/dist/cu/ni.js +13 -18
  168. package/dist/cu/ni.js.map +1 -1
  169. package/dist/cy/mod.d.ts +3 -2
  170. package/dist/cy/vat.d.ts +2 -3
  171. package/dist/cy/vat.js +1 -8
  172. package/dist/cy/vat.js.map +1 -1
  173. package/dist/cz/dic.d.ts +2 -3
  174. package/dist/cz/dic.js +7 -13
  175. package/dist/cz/dic.js.map +1 -1
  176. package/dist/cz/ico.d.ts +2 -3
  177. package/dist/cz/ico.js +2 -10
  178. package/dist/cz/ico.js.map +1 -1
  179. package/dist/cz/mod.d.ts +3 -2
  180. package/dist/cz/rc.d.ts +2 -3
  181. package/dist/cz/rc.js +22 -21
  182. package/dist/cz/rc.js.map +1 -1
  183. package/dist/de/handelsreg.d.ts +19 -2
  184. package/dist/de/handelsreg.js +10 -26
  185. package/dist/de/handelsreg.js.map +1 -1
  186. package/dist/de/idnr.d.ts +2 -3
  187. package/dist/de/idnr.js +2 -12
  188. package/dist/de/idnr.js.map +1 -1
  189. package/dist/de/mod.d.ts +3 -2
  190. package/dist/de/stnr.d.ts +17 -3
  191. package/dist/de/stnr.js +1 -15
  192. package/dist/de/stnr.js.map +1 -1
  193. package/dist/de/svnr.d.ts +2 -3
  194. package/dist/de/svnr.js +4 -13
  195. package/dist/de/svnr.js.map +1 -1
  196. package/dist/de/vat.d.ts +2 -3
  197. package/dist/de/vat.js +2 -11
  198. package/dist/de/vat.js.map +1 -1
  199. package/dist/dk/cpr.d.ts +5 -4
  200. package/dist/dk/cpr.js +14 -12
  201. package/dist/dk/cpr.js.map +1 -1
  202. package/dist/dk/cvr.d.ts +2 -3
  203. package/dist/dk/cvr.js +2 -15
  204. package/dist/dk/cvr.js.map +1 -1
  205. package/dist/dk/mod.d.ts +3 -2
  206. package/dist/dk/vat.d.ts +2 -3
  207. package/dist/dk/vat.js +3 -13
  208. package/dist/dk/vat.js.map +1 -1
  209. package/dist/do/mod.d.ts +3 -2
  210. package/dist/do/rnc.d.ts +2 -3
  211. package/dist/do/rnc.js +3 -17
  212. package/dist/do/rnc.js.map +1 -1
  213. package/dist/ec/mod.d.ts +3 -2
  214. package/dist/ec/ruc.d.ts +2 -3
  215. package/dist/ec/ruc.js +2 -19
  216. package/dist/ec/ruc.js.map +1 -1
  217. package/dist/ee/ik.d.ts +2 -3
  218. package/dist/ee/ik.js +6 -15
  219. package/dist/ee/ik.js.map +1 -1
  220. package/dist/ee/mod.d.ts +3 -2
  221. package/dist/ee/registrikood.d.ts +2 -3
  222. package/dist/ee/registrikood.js +9 -15
  223. package/dist/ee/registrikood.js.map +1 -1
  224. package/dist/ee/vat.d.ts +2 -3
  225. package/dist/ee/vat.js +2 -10
  226. package/dist/ee/vat.js.map +1 -1
  227. package/dist/eg/mod.d.ts +3 -2
  228. package/dist/eg/tn.d.ts +11 -2
  229. package/dist/eg/tn.js +1 -9
  230. package/dist/eg/tn.js.map +1 -1
  231. package/dist/es/cif.d.ts +2 -3
  232. package/dist/es/cif.js +3 -12
  233. package/dist/es/cif.js.map +1 -1
  234. package/dist/es/dni.d.ts +2 -3
  235. package/dist/es/dni.js +1 -9
  236. package/dist/es/dni.js.map +1 -1
  237. package/dist/es/mod.d.ts +3 -2
  238. package/dist/es/nie.d.ts +2 -3
  239. package/dist/es/nie.js +14 -22
  240. package/dist/es/nie.js.map +1 -1
  241. package/dist/es/nss.d.ts +2 -3
  242. package/dist/es/nss.js +1 -16
  243. package/dist/es/nss.js.map +1 -1
  244. package/dist/es/vat.d.ts +2 -3
  245. package/dist/es/vat.js +5 -10
  246. package/dist/es/vat.js.map +1 -1
  247. package/dist/eu/mod.d.ts +3 -2
  248. package/dist/eu/vat.d.ts +5 -4
  249. package/dist/eu/vat.js +44 -2
  250. package/dist/eu/vat.js.map +1 -1
  251. package/dist/fi/hetu.d.ts +5 -4
  252. package/dist/fi/hetu.js +19 -12
  253. package/dist/fi/hetu.js.map +1 -1
  254. package/dist/fi/mod.d.ts +3 -2
  255. package/dist/fi/vat.d.ts +2 -3
  256. package/dist/fi/vat.js +3 -10
  257. package/dist/fi/vat.js.map +1 -1
  258. package/dist/fi/ytunnus.d.ts +2 -3
  259. package/dist/fi/ytunnus.js +2 -10
  260. package/dist/fi/ytunnus.js.map +1 -1
  261. package/dist/fr/mod.d.ts +3 -2
  262. package/dist/fr/nif.d.ts +2 -3
  263. package/dist/fr/nif.js +1 -9
  264. package/dist/fr/nif.js.map +1 -1
  265. package/dist/fr/nir.d.ts +2 -3
  266. package/dist/fr/nir.js +3 -14
  267. package/dist/fr/nir.js.map +1 -1
  268. package/dist/fr/siren.d.ts +2 -3
  269. package/dist/fr/siren.js +2 -10
  270. package/dist/fr/siren.js.map +1 -1
  271. package/dist/fr/siret.d.ts +2 -3
  272. package/dist/fr/siret.js +2 -11
  273. package/dist/fr/siret.js.map +1 -1
  274. package/dist/fr/tva.d.ts +2 -3
  275. package/dist/fr/tva.js +2 -12
  276. package/dist/fr/tva.js.map +1 -1
  277. package/dist/gb/mod.d.ts +3 -2
  278. package/dist/gb/nino.d.ts +12 -2
  279. package/dist/gb/nino.js +8 -17
  280. package/dist/gb/nino.js.map +1 -1
  281. package/dist/gb/sedol.d.ts +2 -3
  282. package/dist/gb/sedol.js +9 -18
  283. package/dist/gb/sedol.js.map +1 -1
  284. package/dist/gb/utr.d.ts +2 -3
  285. package/dist/gb/utr.js +2 -10
  286. package/dist/gb/utr.js.map +1 -1
  287. package/dist/gb/vat.d.ts +2 -3
  288. package/dist/gb/vat.js +2 -11
  289. package/dist/gb/vat.js.map +1 -1
  290. package/dist/ge/mod.d.ts +3 -2
  291. package/dist/ge/pin.d.ts +14 -2
  292. package/dist/ge/pin.js +1 -12
  293. package/dist/ge/pin.js.map +1 -1
  294. package/dist/gh/mod.d.ts +3 -2
  295. package/dist/gh/tin.d.ts +2 -3
  296. package/dist/gh/tin.js +10 -24
  297. package/dist/gh/tin.js.map +1 -1
  298. package/dist/gr/amka.d.ts +2 -3
  299. package/dist/gr/amka.js +3 -11
  300. package/dist/gr/amka.js.map +1 -1
  301. package/dist/gr/mod.d.ts +3 -2
  302. package/dist/gr/vat.d.ts +2 -3
  303. package/dist/gr/vat.js +1 -10
  304. package/dist/gr/vat.js.map +1 -1
  305. package/dist/gt/mod.d.ts +3 -2
  306. package/dist/gt/nit.d.ts +2 -3
  307. package/dist/gt/nit.js +6 -14
  308. package/dist/gt/nit.js.map +1 -1
  309. package/dist/hk/hkid.d.ts +2 -3
  310. package/dist/hk/hkid.js +2 -10
  311. package/dist/hk/hkid.js.map +1 -1
  312. package/dist/hk/mod.d.ts +3 -2
  313. package/dist/hr/mod.d.ts +3 -2
  314. package/dist/hr/vat.d.ts +2 -3
  315. package/dist/hr/vat.js +2 -9
  316. package/dist/hr/vat.js.map +1 -1
  317. package/dist/hu/mod.d.ts +3 -2
  318. package/dist/hu/vat.d.ts +2 -3
  319. package/dist/hu/vat.js +3 -10
  320. package/dist/hu/vat.js.map +1 -1
  321. package/dist/iban.d.ts +2 -3
  322. package/dist/iban.js +2 -8
  323. package/dist/iban.js.map +1 -1
  324. package/dist/id/mod.d.ts +3 -2
  325. package/dist/id/npwp.d.ts +2 -3
  326. package/dist/id/npwp.js +3 -13
  327. package/dist/id/npwp.js.map +1 -1
  328. package/dist/ie/mod.d.ts +3 -2
  329. package/dist/ie/pps.d.ts +2 -3
  330. package/dist/ie/pps.js +1 -10
  331. package/dist/ie/pps.js.map +1 -1
  332. package/dist/ie/vat.d.ts +2 -3
  333. package/dist/ie/vat.js +1 -9
  334. package/dist/ie/vat.js.map +1 -1
  335. package/dist/il/idnr.d.ts +2 -3
  336. package/dist/il/idnr.js +2 -9
  337. package/dist/il/idnr.js.map +1 -1
  338. package/dist/il/mod.d.ts +3 -2
  339. package/dist/in/aadhaar.d.ts +2 -3
  340. package/dist/in/aadhaar.js +2 -12
  341. package/dist/in/aadhaar.js.map +1 -1
  342. package/dist/in/gstin.d.ts +2 -3
  343. package/dist/in/gstin.js +4 -11
  344. package/dist/in/gstin.js.map +1 -1
  345. package/dist/in/mod.d.ts +3 -2
  346. package/dist/in/pan.d.ts +15 -2
  347. package/dist/in/pan.js +3 -15
  348. package/dist/in/pan.js.map +1 -1
  349. package/dist/index.d.ts +2 -2
  350. package/dist/index.js +6 -6
  351. package/dist/iq/mod.d.ts +3 -2
  352. package/dist/iq/nid.d.ts +16 -2
  353. package/dist/iq/nid.js +2 -15
  354. package/dist/iq/nid.js.map +1 -1
  355. package/dist/ir/mod.d.ts +3 -2
  356. package/dist/ir/nid.d.ts +2 -3
  357. package/dist/ir/nid.js +2 -24
  358. package/dist/ir/nid.js.map +1 -1
  359. package/dist/is/kennitala.d.ts +2 -3
  360. package/dist/is/kennitala.js +2 -13
  361. package/dist/is/kennitala.js.map +1 -1
  362. package/dist/is/mod.d.ts +3 -2
  363. package/dist/is/vsk.d.ts +9 -2
  364. package/dist/is/vsk.js +1 -7
  365. package/dist/is/vsk.js.map +1 -1
  366. package/dist/isin.d.ts +2 -3
  367. package/dist/isin.js +11 -21
  368. package/dist/isin.js.map +1 -1
  369. package/dist/it/codicefiscale.d.ts +5 -4
  370. package/dist/it/codicefiscale.js +27 -23
  371. package/dist/it/codicefiscale.js.map +1 -1
  372. package/dist/it/iva.d.ts +2 -3
  373. package/dist/it/iva.js +2 -9
  374. package/dist/it/iva.js.map +1 -1
  375. package/dist/it/mod.d.ts +3 -2
  376. package/dist/jp/cn.d.ts +2 -3
  377. package/dist/jp/cn.js +1 -9
  378. package/dist/jp/cn.js.map +1 -1
  379. package/dist/jp/mod.d.ts +3 -2
  380. package/dist/jp/mynumber.d.ts +2 -3
  381. package/dist/jp/mynumber.js +1 -10
  382. package/dist/jp/mynumber.js.map +1 -1
  383. package/dist/kr/brn.d.ts +11 -2
  384. package/dist/kr/brn.js +1 -9
  385. package/dist/kr/brn.js.map +1 -1
  386. package/dist/kr/mod.d.ts +3 -2
  387. package/dist/kr/rrn.d.ts +5 -4
  388. package/dist/kr/rrn.js +15 -13
  389. package/dist/kr/rrn.js.map +1 -1
  390. package/dist/kw/civil.d.ts +6 -5
  391. package/dist/kw/civil.js +20 -17
  392. package/dist/kw/civil.js.map +1 -1
  393. package/dist/kw/mod.d.ts +3 -2
  394. package/dist/kz/iin.d.ts +2 -3
  395. package/dist/kz/iin.js +4 -18
  396. package/dist/kz/iin.js.map +1 -1
  397. package/dist/kz/mod.d.ts +3 -2
  398. package/dist/lei.d.ts +2 -3
  399. package/dist/lei.js +2 -11
  400. package/dist/lei.js.map +1 -1
  401. package/dist/li/mod.d.ts +3 -2
  402. package/dist/li/peid.d.ts +11 -2
  403. package/dist/li/peid.js +1 -9
  404. package/dist/li/peid.js.map +1 -1
  405. package/dist/lk/mod.d.ts +3 -2
  406. package/dist/lk/nic.d.ts +5 -4
  407. package/dist/lk/nic.js +16 -16
  408. package/dist/lk/nic.js.map +1 -1
  409. package/dist/lt/asmens.d.ts +2 -3
  410. package/dist/lt/asmens.js +2 -1
  411. package/dist/lt/asmens.js.map +1 -1
  412. package/dist/lt/mod.d.ts +3 -2
  413. package/dist/lt/vat.d.ts +2 -3
  414. package/dist/lt/vat.js +2 -10
  415. package/dist/lt/vat.js.map +1 -1
  416. package/dist/lu/mod.d.ts +3 -2
  417. package/dist/lu/vat.d.ts +2 -3
  418. package/dist/lu/vat.js +2 -8
  419. package/dist/lu/vat.js.map +1 -1
  420. package/dist/luhn.d.ts +2 -3
  421. package/dist/luhn.js +9 -9
  422. package/dist/luhn.js.map +1 -1
  423. package/dist/lv/mod.d.ts +3 -2
  424. package/dist/lv/vat.d.ts +2 -3
  425. package/dist/lv/vat.js +19 -18
  426. package/dist/lv/vat.js.map +1 -1
  427. package/dist/ma/ice.d.ts +2 -3
  428. package/dist/ma/ice.js +2 -11
  429. package/dist/ma/ice.js.map +1 -1
  430. package/dist/ma/mod.d.ts +3 -2
  431. package/dist/mc/mod.d.ts +3 -2
  432. package/dist/mc/tva.d.ts +2 -3
  433. package/dist/mc/tva.js +1 -0
  434. package/dist/mc/tva.js.map +1 -1
  435. package/dist/md/idno.d.ts +2 -3
  436. package/dist/md/idno.js +1 -10
  437. package/dist/md/idno.js.map +1 -1
  438. package/dist/md/mod.d.ts +3 -2
  439. package/dist/me/mod.d.ts +3 -2
  440. package/dist/me/pib.d.ts +2 -3
  441. package/dist/me/pib.js +2 -10
  442. package/dist/me/pib.js.map +1 -1
  443. package/dist/mk/edb.d.ts +2 -3
  444. package/dist/mk/edb.js +2 -11
  445. package/dist/mk/edb.js.map +1 -1
  446. package/dist/mk/mod.d.ts +3 -2
  447. package/dist/mt/mod.d.ts +3 -2
  448. package/dist/mt/vat.d.ts +2 -3
  449. package/dist/mt/vat.js +3 -10
  450. package/dist/mt/vat.js.map +1 -1
  451. package/dist/mu/brn.d.ts +23 -2
  452. package/dist/mu/brn.js +1 -21
  453. package/dist/mu/brn.js.map +1 -1
  454. package/dist/mu/mod.d.ts +3 -2
  455. package/dist/mx/clabe.d.ts +2 -3
  456. package/dist/mx/clabe.js +1 -14
  457. package/dist/mx/clabe.js.map +1 -1
  458. package/dist/mx/curp.d.ts +5 -4
  459. package/dist/mx/curp.js +27 -19
  460. package/dist/mx/curp.js.map +1 -1
  461. package/dist/mx/mod.d.ts +3 -2
  462. package/dist/mx/rfc.d.ts +5 -4
  463. package/dist/mx/rfc.js +23 -20
  464. package/dist/mx/rfc.js.map +1 -1
  465. package/dist/my/mod.d.ts +3 -2
  466. package/dist/my/nric.d.ts +5 -4
  467. package/dist/my/nric.js +18 -16
  468. package/dist/my/nric.js.map +1 -1
  469. package/dist/ng/mod.d.ts +3 -2
  470. package/dist/ng/nin.d.ts +13 -2
  471. package/dist/ng/nin.js +1 -11
  472. package/dist/ng/nin.js.map +1 -1
  473. package/dist/ni/mod.d.ts +3 -2
  474. package/dist/ni/ruc.d.ts +2 -3
  475. package/dist/ni/ruc.js +1 -23
  476. package/dist/ni/ruc.js.map +1 -1
  477. package/dist/nl/bsn.d.ts +2 -3
  478. package/dist/nl/bsn.js +2 -10
  479. package/dist/nl/bsn.js.map +1 -1
  480. package/dist/nl/kvk.d.ts +9 -2
  481. package/dist/nl/kvk.js +1 -7
  482. package/dist/nl/kvk.js.map +1 -1
  483. package/dist/nl/mod.d.ts +3 -2
  484. package/dist/nl/vat.d.ts +2 -3
  485. package/dist/nl/vat.js +4 -50
  486. package/dist/nl/vat.js.map +1 -1
  487. package/dist/no/fodselsnummer.d.ts +2 -3
  488. package/dist/no/fodselsnummer.js +3 -10
  489. package/dist/no/fodselsnummer.js.map +1 -1
  490. package/dist/no/mod.d.ts +3 -2
  491. package/dist/no/mva.d.ts +2 -3
  492. package/dist/no/mva.js +1 -8
  493. package/dist/no/mva.js.map +1 -1
  494. package/dist/no/orgnr.d.ts +2 -3
  495. package/dist/no/orgnr.js +2 -8
  496. package/dist/no/orgnr.js.map +1 -1
  497. package/dist/nz/ird.d.ts +2 -3
  498. package/dist/nz/ird.js +4 -13
  499. package/dist/nz/ird.js.map +1 -1
  500. package/dist/nz/mod.d.ts +3 -2
  501. package/dist/pa/mod.d.ts +3 -2
  502. package/dist/pa/ruc.d.ts +2 -3
  503. package/dist/pa/ruc.js +4 -19
  504. package/dist/pa/ruc.js.map +1 -1
  505. package/dist/patterns.d.ts +8 -10
  506. package/dist/patterns.js +83 -28
  507. package/dist/patterns.js.map +1 -1
  508. package/dist/pe/mod.d.ts +3 -2
  509. package/dist/pe/ruc.d.ts +2 -3
  510. package/dist/pe/ruc.js +10 -24
  511. package/dist/pe/ruc.js.map +1 -1
  512. package/dist/ph/mod.d.ts +3 -2
  513. package/dist/ph/philid.d.ts +14 -2
  514. package/dist/ph/philid.js +1 -12
  515. package/dist/ph/philid.js.map +1 -1
  516. package/dist/pk/cnic.d.ts +14 -2
  517. package/dist/pk/cnic.js +1 -12
  518. package/dist/pk/cnic.js.map +1 -1
  519. package/dist/pk/mod.d.ts +3 -2
  520. package/dist/pl/mod.d.ts +3 -2
  521. package/dist/pl/nip.d.ts +2 -3
  522. package/dist/pl/nip.js +2 -10
  523. package/dist/pl/nip.js.map +1 -1
  524. package/dist/pl/pesel.d.ts +2 -3
  525. package/dist/pl/pesel.js +4 -13
  526. package/dist/pl/pesel.js.map +1 -1
  527. package/dist/pl/regon.d.ts +2 -3
  528. package/dist/pl/regon.js +2 -11
  529. package/dist/pl/regon.js.map +1 -1
  530. package/dist/pt/cc.d.ts +2 -3
  531. package/dist/pt/cc.js +7 -13
  532. package/dist/pt/cc.js.map +1 -1
  533. package/dist/pt/mod.d.ts +3 -2
  534. package/dist/pt/vat.d.ts +2 -3
  535. package/dist/pt/vat.js +3 -11
  536. package/dist/pt/vat.js.map +1 -1
  537. package/dist/ro/cnp.d.ts +2 -3
  538. package/dist/ro/cnp.js +5 -14
  539. package/dist/ro/cnp.js.map +1 -1
  540. package/dist/ro/mod.d.ts +3 -2
  541. package/dist/ro/vat.d.ts +2 -3
  542. package/dist/ro/vat.js +13 -11
  543. package/dist/ro/vat.js.map +1 -1
  544. package/dist/rs/mod.d.ts +3 -2
  545. package/dist/rs/pib.d.ts +2 -3
  546. package/dist/rs/pib.js +1 -9
  547. package/dist/rs/pib.js.map +1 -1
  548. package/dist/ru/inn.d.ts +2 -3
  549. package/dist/ru/inn.js +2 -12
  550. package/dist/ru/inn.js.map +1 -1
  551. package/dist/ru/mod.d.ts +3 -2
  552. package/dist/se/mod.d.ts +3 -2
  553. package/dist/se/orgnr.d.ts +2 -3
  554. package/dist/se/orgnr.js +2 -9
  555. package/dist/se/orgnr.js.map +1 -1
  556. package/dist/se/personnummer.d.ts +2 -3
  557. package/dist/se/personnummer.js +8 -15
  558. package/dist/se/personnummer.js.map +1 -1
  559. package/dist/se/vat.d.ts +2 -3
  560. package/dist/se/vat.js +3 -10
  561. package/dist/se/vat.js.map +1 -1
  562. package/dist/sg/mod.d.ts +3 -2
  563. package/dist/sg/uen.d.ts +2 -3
  564. package/dist/sg/uen.js +47 -70
  565. package/dist/sg/uen.js.map +1 -1
  566. package/dist/si/emso.d.ts +2 -3
  567. package/dist/si/emso.js +12 -14
  568. package/dist/si/emso.js.map +1 -1
  569. package/dist/si/mod.d.ts +3 -2
  570. package/dist/si/vat.d.ts +2 -3
  571. package/dist/si/vat.js +3 -12
  572. package/dist/si/vat.js.map +1 -1
  573. package/dist/sk/dic.d.ts +2 -3
  574. package/dist/sk/dic.js +1 -0
  575. package/dist/sk/dic.js.map +1 -1
  576. package/dist/sk/ico.d.ts +2 -3
  577. package/dist/sk/ico.js +1 -0
  578. package/dist/sk/ico.js.map +1 -1
  579. package/dist/sk/mod.d.ts +3 -2
  580. package/dist/sk/rc.d.ts +4 -5
  581. package/dist/sk/rc.js +6 -2
  582. package/dist/sk/rc.js.map +1 -1
  583. package/dist/th/mod.d.ts +3 -2
  584. package/dist/th/tin.d.ts +2 -3
  585. package/dist/th/tin.js +1 -11
  586. package/dist/th/tin.js.map +1 -1
  587. package/dist/tr/mod.d.ts +3 -2
  588. package/dist/tr/tckimlik.d.ts +2 -3
  589. package/dist/tr/tckimlik.js +1 -20
  590. package/dist/tr/tckimlik.js.map +1 -1
  591. package/dist/tr/vkn.d.ts +2 -3
  592. package/dist/tr/vkn.js +1 -20
  593. package/dist/tr/vkn.js.map +1 -1
  594. package/dist/tw/mod.d.ts +3 -2
  595. package/dist/tw/ubn.d.ts +2 -3
  596. package/dist/tw/ubn.js +2 -12
  597. package/dist/tw/ubn.js.map +1 -1
  598. package/dist/types.d.ts +56 -21
  599. package/dist/ua/edrpou.d.ts +2 -3
  600. package/dist/ua/edrpou.js +5 -12
  601. package/dist/ua/edrpou.js.map +1 -1
  602. package/dist/ua/mod.d.ts +3 -2
  603. package/dist/us/ein.d.ts +12 -2
  604. package/dist/us/ein.js +88 -97
  605. package/dist/us/ein.js.map +1 -1
  606. package/dist/us/itin.d.ts +13 -2
  607. package/dist/us/itin.js +4 -15
  608. package/dist/us/itin.js.map +1 -1
  609. package/dist/us/mod.d.ts +3 -2
  610. package/dist/us/rtn.d.ts +2 -3
  611. package/dist/us/rtn.js +11 -23
  612. package/dist/us/rtn.js.map +1 -1
  613. package/dist/us/ssn.d.ts +13 -2
  614. package/dist/us/ssn.js +1 -11
  615. package/dist/us/ssn.js.map +1 -1
  616. package/dist/uy/mod.d.ts +3 -2
  617. package/dist/uy/rut.d.ts +2 -3
  618. package/dist/uy/rut.js +2 -15
  619. package/dist/uy/rut.js.map +1 -1
  620. package/dist/ve/mod.d.ts +3 -2
  621. package/dist/ve/rif.d.ts +2 -3
  622. package/dist/ve/rif.js +13 -26
  623. package/dist/ve/rif.js.map +1 -1
  624. package/dist/vn/mod.d.ts +3 -2
  625. package/dist/vn/mst.d.ts +2 -3
  626. package/dist/vn/mst.js +1 -12
  627. package/dist/vn/mst.js.map +1 -1
  628. package/dist/za/idnr.d.ts +2 -3
  629. package/dist/za/idnr.js +4 -16
  630. package/dist/za/idnr.js.map +1 -1
  631. package/dist/za/mod.d.ts +3 -2
  632. package/package.json +34 -21
  633. package/src/_checksums/mod1110.ts +1 -1
  634. package/src/_checksums/mod112.ts +7 -6
  635. package/src/_util/generate.ts +38 -0
  636. package/src/ad/nrt.ts +19 -7
  637. package/src/ae/eid.ts +7 -3
  638. package/src/ai/tin.ts +7 -3
  639. package/src/al/nipt.ts +7 -3
  640. package/src/am/tin.ts +7 -3
  641. package/src/ar/cbu.ts +9 -5
  642. package/src/ar/cuit.ts +22 -10
  643. package/src/ar/dni.ts +7 -3
  644. package/src/at/businessid.ts +7 -3
  645. package/src/at/tin.ts +7 -3
  646. package/src/at/uid.ts +7 -3
  647. package/src/at/vnr.ts +62 -12
  648. package/src/au/abn.ts +7 -3
  649. package/src/au/acn.ts +7 -3
  650. package/src/au/tfn.ts +7 -3
  651. package/src/az/voen.ts +9 -3
  652. package/src/ba/jmbg.ts +9 -7
  653. package/src/bd/nid.ts +11 -7
  654. package/src/be/bis.ts +8 -4
  655. package/src/be/nn.ts +7 -3
  656. package/src/be/vat.ts +7 -3
  657. package/src/bg/egn.ts +19 -10
  658. package/src/bg/pnf.ts +7 -3
  659. package/src/bg/vat.ts +8 -3
  660. package/src/bh/cpr.ts +17 -4
  661. package/src/bic.ts +26 -20
  662. package/src/br/cnpj.ts +7 -3
  663. package/src/br/cpf.ts +7 -3
  664. package/src/by/unp.ts +19 -9
  665. package/src/bz/tin.ts +19 -4
  666. package/src/ca/bn.ts +7 -3
  667. package/src/ca/sin.ts +7 -3
  668. package/src/ch/ssn.ts +7 -3
  669. package/src/ch/uid.ts +7 -3
  670. package/src/ch/vat.ts +9 -5
  671. package/src/cl/rut.ts +11 -5
  672. package/src/cn/ric.ts +11 -7
  673. package/src/cn/uscc.ts +27 -11
  674. package/src/co/nit.ts +14 -6
  675. package/src/cr/cpf.ts +11 -6
  676. package/src/creditcard.ts +10 -6
  677. package/src/cu/ni.ts +28 -7
  678. package/src/cy/vat.ts +7 -3
  679. package/src/cz/dic.ts +9 -4
  680. package/src/cz/ico.ts +7 -3
  681. package/src/cz/rc.ts +61 -29
  682. package/src/de/handelsreg.ts +21 -6
  683. package/src/de/idnr.ts +10 -3
  684. package/src/de/stnr.ts +11 -3
  685. package/src/de/svnr.ts +14 -5
  686. package/src/de/vat.ts +7 -3
  687. package/src/dk/cpr.ts +23 -8
  688. package/src/dk/cvr.ts +7 -3
  689. package/src/dk/vat.ts +8 -3
  690. package/src/do/rnc.ts +9 -5
  691. package/src/ec/ruc.ts +9 -5
  692. package/src/ee/ik.ts +21 -10
  693. package/src/ee/registrikood.ts +12 -7
  694. package/src/ee/vat.ts +7 -3
  695. package/src/eg/tn.ts +7 -3
  696. package/src/es/cif.ts +10 -7
  697. package/src/es/dni.ts +7 -3
  698. package/src/es/nie.ts +18 -9
  699. package/src/es/nss.ts +7 -3
  700. package/src/es/vat.ts +13 -5
  701. package/src/eu/vat.ts +55 -6
  702. package/src/fi/hetu.ts +26 -8
  703. package/src/fi/vat.ts +8 -3
  704. package/src/fi/ytunnus.ts +7 -3
  705. package/src/fr/nif.ts +7 -3
  706. package/src/fr/nir.ts +9 -7
  707. package/src/fr/siren.ts +7 -3
  708. package/src/fr/siret.ts +7 -3
  709. package/src/fr/tva.ts +7 -3
  710. package/src/gb/nino.ts +18 -13
  711. package/src/gb/sedol.ts +21 -15
  712. package/src/gb/utr.ts +7 -3
  713. package/src/gb/vat.ts +7 -3
  714. package/src/ge/pin.ts +7 -3
  715. package/src/gh/tin.ts +11 -6
  716. package/src/gr/amka.ts +7 -3
  717. package/src/gr/vat.ts +7 -3
  718. package/src/gt/nit.ts +13 -6
  719. package/src/hk/hkid.ts +9 -4
  720. package/src/hr/vat.ts +7 -3
  721. package/src/hu/vat.ts +8 -3
  722. package/src/iban.ts +7 -3
  723. package/src/id/npwp.ts +7 -3
  724. package/src/ie/pps.ts +7 -3
  725. package/src/ie/vat.ts +7 -3
  726. package/src/il/idnr.ts +7 -3
  727. package/src/in/aadhaar.ts +7 -3
  728. package/src/in/gstin.ts +10 -4
  729. package/src/in/pan.ts +15 -6
  730. package/src/index.ts +6 -0
  731. package/src/iq/nid.ts +7 -3
  732. package/src/ir/nid.ts +7 -3
  733. package/src/is/kennitala.ts +7 -3
  734. package/src/is/vsk.ts +7 -3
  735. package/src/isin.ts +17 -7
  736. package/src/it/codicefiscale.ts +49 -7
  737. package/src/it/iva.ts +7 -3
  738. package/src/jp/cn.ts +7 -3
  739. package/src/jp/mynumber.ts +7 -3
  740. package/src/kr/brn.ts +7 -3
  741. package/src/kr/rrn.ts +27 -8
  742. package/src/kw/civil.ts +31 -14
  743. package/src/kz/iin.ts +9 -8
  744. package/src/lei.ts +7 -3
  745. package/src/li/peid.ts +7 -3
  746. package/src/lk/nic.ts +31 -8
  747. package/src/lt/asmens.ts +8 -4
  748. package/src/lt/vat.ts +8 -3
  749. package/src/lu/vat.ts +8 -3
  750. package/src/luhn.ts +10 -3
  751. package/src/lv/vat.ts +53 -23
  752. package/src/ma/ice.ts +7 -3
  753. package/src/mc/tva.ts +9 -5
  754. package/src/md/idno.ts +7 -3
  755. package/src/me/pib.ts +7 -3
  756. package/src/mk/edb.ts +7 -3
  757. package/src/mt/vat.ts +8 -3
  758. package/src/mu/brn.ts +7 -3
  759. package/src/mx/clabe.ts +7 -3
  760. package/src/mx/curp.ts +47 -10
  761. package/src/mx/rfc.ts +42 -7
  762. package/src/my/nric.ts +33 -8
  763. package/src/ng/nin.ts +7 -3
  764. package/src/ni/ruc.ts +7 -3
  765. package/src/nl/bsn.ts +7 -3
  766. package/src/nl/kvk.ts +7 -3
  767. package/src/nl/vat.ts +18 -69
  768. package/src/no/fodselsnummer.ts +12 -7
  769. package/src/no/mva.ts +9 -5
  770. package/src/no/orgnr.ts +7 -3
  771. package/src/nz/ird.ts +12 -8
  772. package/src/pa/ruc.ts +39 -11
  773. package/src/patterns.ts +184 -46
  774. package/src/pe/ruc.ts +13 -10
  775. package/src/ph/philid.ts +7 -3
  776. package/src/pk/cnic.ts +9 -3
  777. package/src/pl/nip.ts +7 -3
  778. package/src/pl/pesel.ts +9 -7
  779. package/src/pl/regon.ts +7 -3
  780. package/src/pt/cc.ts +13 -7
  781. package/src/pt/vat.ts +8 -3
  782. package/src/ro/cnp.ts +16 -8
  783. package/src/ro/vat.ts +8 -3
  784. package/src/rs/pib.ts +7 -3
  785. package/src/ru/inn.ts +9 -5
  786. package/src/se/orgnr.ts +7 -3
  787. package/src/se/personnummer.ts +35 -32
  788. package/src/se/vat.ts +8 -3
  789. package/src/sg/uen.ts +44 -23
  790. package/src/si/emso.ts +37 -11
  791. package/src/si/vat.ts +8 -3
  792. package/src/sk/dic.ts +8 -4
  793. package/src/sk/ico.ts +3 -2
  794. package/src/sk/rc.ts +17 -4
  795. package/src/th/tin.ts +7 -3
  796. package/src/tr/tckimlik.ts +7 -3
  797. package/src/tr/vkn.ts +7 -3
  798. package/src/tw/ubn.ts +9 -5
  799. package/src/types.ts +69 -7
  800. package/src/ua/edrpou.ts +10 -5
  801. package/src/us/ein.ts +95 -91
  802. package/src/us/itin.ts +14 -11
  803. package/src/us/rtn.ts +32 -19
  804. package/src/us/ssn.ts +7 -3
  805. package/src/uy/rut.ts +9 -5
  806. package/src/ve/rif.ts +19 -12
  807. package/src/vn/mst.ts +7 -3
  808. package/src/za/idnr.ts +9 -7
package/src/gr/amka.ts CHANGED
@@ -8,6 +8,11 @@
8
8
  * @see https://www.amka.gr/
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+
11
16
  import {
12
17
  luhnValidate,
13
18
  luhnChecksum,
@@ -18,8 +23,6 @@ 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 compact = (value: string): string =>
24
27
  clean(value, " -");
25
28
 
@@ -80,7 +83,7 @@ const generate = (): string => {
80
83
  };
81
84
 
82
85
  /** Greek Social Security Number. */
83
- const amka: Validator = {
86
+ const amka: CountryValidator<"GR"> = {
84
87
  name: "Greek Social Security Number",
85
88
  localName: "Αριθμός Μητρώου Κοινωνικής Ασφάλισης",
86
89
  abbreviation: "ΑΜΚΑ",
@@ -90,6 +93,7 @@ const amka: Validator = {
90
93
  "AMKA",
91
94
  ] as const,
92
95
  candidatePattern: "\\d{11}",
96
+ scope: "country",
93
97
  country: "GR",
94
98
  entityType: "person",
95
99
  sourceUrl: "https://www.amka.gr/",
package/src/gr/vat.ts CHANGED
@@ -9,13 +9,16 @@
9
9
  * @see https://www.aade.gr/
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
  let v = clean(value, " -/.");
21
24
  if (v.startsWith("EL") || v.startsWith("el")) {
@@ -72,7 +75,7 @@ const generate = (): string => {
72
75
  };
73
76
 
74
77
  /** Greek VAT Number. */
75
- const vat: Validator = {
78
+ const vat: CountryValidator<"GR"> = {
76
79
  name: "Greek VAT Number",
77
80
  localName: "Αριθμός Φορολογικού Μητρώου",
78
81
  abbreviation: "ΑΦΜ",
@@ -82,6 +85,7 @@ const vat: Validator = {
82
85
  "AFM",
83
86
  ] as const,
84
87
  candidatePattern: "EL\\d{9}",
88
+ scope: "country",
85
89
  country: "GR",
86
90
  entityType: "any",
87
91
  sourceUrl: "https://www.aade.gr/",
package/src/gt/nit.ts CHANGED
@@ -11,13 +11,16 @@
11
11
  * @see https://portal.sat.gob.gt/portal/
12
12
  */
13
13
 
14
+ import type {
15
+ ValidateResult,
16
+ CountryValidator,
17
+ } from "../types";
18
+
14
19
  import { clean } from "#util/clean";
15
20
  import { randomDigits } from "#util/generate";
16
21
  import { err } from "#util/result";
17
22
  import { isdigits } from "#util/strings";
18
23
 
19
- import type { ValidateResult, Validator } from "../types";
20
-
21
24
  /**
22
25
  * Compact: strip spaces, hyphens, leading zeros,
23
26
  * and uppercase.
@@ -88,18 +91,22 @@ const format = (value: string): string => {
88
91
 
89
92
  /** Generate a random valid NIT (7 body digits). */
90
93
  const generate = (): string => {
91
- const body = randomDigits(7);
92
- const check = calcCheckChar(body);
93
- return `${body}${check}`;
94
+ for (;;) {
95
+ const body = randomDigits(7);
96
+ if (body.startsWith("0")) continue;
97
+ const check = calcCheckChar(body);
98
+ return `${body}${check}`;
99
+ }
94
100
  };
95
101
 
96
102
  /** Guatemala tax identification number. */
97
- const nit: Validator = {
103
+ const nit: CountryValidator<"GT"> = {
98
104
  name: "Tax Identification Number",
99
105
  localName: "Número de Identificación Tributaria",
100
106
  abbreviation: "NIT",
101
107
  aliases: ["NIT"] as const,
102
108
  candidatePattern: "\\d{7,8}-?\\d",
109
+ scope: "country",
103
110
  country: "GT",
104
111
  entityType: "any",
105
112
  description: "Tax identifier issued by Guatemala's SAT",
package/src/hk/hkid.ts CHANGED
@@ -9,12 +9,15 @@
9
9
  * @see https://en.wikipedia.org/wiki/Hong_Kong_identity_card
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, randomInt } from "#util/generate";
14
19
  import { err } from "#util/result";
15
20
 
16
- import type { ValidateResult, Validator } from "../types";
17
-
18
21
  /** Strip spaces, parentheses, and dashes. */
19
22
  const compact = (value: string): string =>
20
23
  clean(value, " -()").toUpperCase();
@@ -32,7 +35,8 @@ const computeCheck = (body: string): string => {
32
35
 
33
36
  let sum = 0;
34
37
  for (let i = 0; i < 8; i++) {
35
- const ch = padded[i]!;
38
+ const ch = padded[i];
39
+ if (ch === undefined) continue;
36
40
  let val: number;
37
41
  if (ch === " ") {
38
42
  val = 36;
@@ -105,12 +109,13 @@ const generate = (): string => {
105
109
  };
106
110
 
107
111
  /** Hong Kong Identity Card number. */
108
- const hkid: Validator = {
112
+ const hkid: CountryValidator<"HK"> = {
109
113
  name: "Hong Kong Identity Card Number",
110
114
  localName: "Hong Kong Identity Card Number",
111
115
  abbreviation: "HKID",
112
116
  aliases: ["HKID", "香港身份證"] as const,
113
117
  candidatePattern: "[A-Z]{1,2}\\d{6}[\\dA]",
118
+ scope: "country",
114
119
  country: "HK",
115
120
  entityType: "person",
116
121
  lengths: [8, 9],
package/src/hr/vat.ts CHANGED
@@ -7,6 +7,11 @@
7
7
  * @see https://www.porezna-uprava.hr/
8
8
  */
9
9
 
10
+ import type {
11
+ ValidateResult,
12
+ CountryValidator,
13
+ } from "../types";
14
+
10
15
  import {
11
16
  mod1110validate,
12
17
  mod1110checkDigit,
@@ -16,8 +21,6 @@ import { randomDigits } from "#util/generate";
16
21
  import { err } from "#util/result";
17
22
  import { isdigits } from "#util/strings";
18
23
 
19
- import type { ValidateResult, Validator } from "../types";
20
-
21
24
  const compact = (value: string): string => {
22
25
  let v = clean(value, " -/.");
23
26
  if (v.startsWith("HR") || v.startsWith("hr")) {
@@ -59,12 +62,13 @@ const generate = (): string => {
59
62
  };
60
63
 
61
64
  /** Croatian VAT Number. */
62
- const vat: Validator = {
65
+ const vat: CountryValidator<"HR"> = {
63
66
  name: "Croatian VAT Number",
64
67
  localName: "Osobni identifikacijski broj",
65
68
  abbreviation: "OIB",
66
69
  aliases: ["OIB", "osobni identifikacijski broj"] as const,
67
70
  candidatePattern: "HR\\d{11}",
71
+ scope: "country",
68
72
  country: "HR",
69
73
  entityType: "any",
70
74
  sourceUrl: "https://www.porezna-uprava.hr/",
package/src/hu/vat.ts CHANGED
@@ -8,14 +8,17 @@
8
8
  * @see https://www.oecd.org/content/dam/oecd/en/topics/policy-issue-focus/aeoi/hungary-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 = [9, 7, 3, 1, 9, 7, 3, 1];
20
23
 
21
24
  const compact = (value: string): string => {
@@ -62,15 +65,17 @@ const generate = (): string => {
62
65
  };
63
66
 
64
67
  /** Hungarian VAT Number. */
65
- const vat: Validator = {
68
+ const vat: CountryValidator<"HU"> = {
66
69
  name: "Hungarian VAT Number",
67
70
  localName: "Adószám",
68
71
  abbreviation: "ANUM",
69
72
  aliases: ["adószám", "adóazonosító jel"] as const,
70
73
  candidatePattern: "\\d{8}-\\d-\\d{2}",
74
+ scope: "country",
71
75
  country: "HU",
72
76
  entityType: "company",
73
77
  sourceUrl: "https://nav.gov.hu/",
78
+ lengths: [8] as const,
74
79
  examples: ["12892312"] as const,
75
80
  compact,
76
81
  format,
package/src/iban.ts CHANGED
@@ -6,14 +6,17 @@
6
6
  * characters. Validated using ISO 7064 Mod 97-10.
7
7
  */
8
8
 
9
+ import type {
10
+ ValidateResult,
11
+ GlobalValidator,
12
+ } from "./types";
13
+
9
14
  import { mod97 } from "#checksums/mod97";
10
15
  import { clean } from "#util/clean";
11
16
  import { randomDigits, randomInt } from "#util/generate";
12
17
  import { err } from "#util/result";
13
18
  import { charValue, isalnum } from "#util/strings";
14
19
 
15
- import type { ValidateResult, Validator } from "./types";
16
-
17
20
  /**
18
21
  * BBAN format regex by country code.
19
22
  * Sourced from SWIFT IBAN Registry.
@@ -314,7 +317,8 @@ const generate = (): string => {
314
317
  };
315
318
 
316
319
  /** International Bank Account Number. */
317
- const iban: Validator = {
320
+ const iban: GlobalValidator = {
321
+ scope: "global",
318
322
  name: "IBAN",
319
323
  localName: "IBAN",
320
324
  abbreviation: "IBAN",
package/src/id/npwp.ts CHANGED
@@ -10,6 +10,11 @@
10
10
  * @see https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Indonesia-TIN.pdf
11
11
  */
12
12
 
13
+ import type {
14
+ ValidateResult,
15
+ CountryValidator,
16
+ } from "../types";
17
+
13
18
  import {
14
19
  luhnValidate,
15
20
  luhnChecksum,
@@ -20,8 +25,6 @@ import { randomDigits } from "#util/generate";
20
25
  import { err } from "#util/result";
21
26
  import { isdigits } from "#util/strings";
22
27
 
23
- import type { ValidateResult, Validator } from "../types";
24
-
25
28
  const compact = (value: string): string =>
26
29
  clean(value, " .-");
27
30
 
@@ -160,13 +163,14 @@ const generate = (): string => {
160
163
  };
161
164
 
162
165
  /** Indonesian Taxpayer Identification Number. */
163
- const npwp: Validator = {
166
+ const npwp: CountryValidator<"ID"> = {
164
167
  name: "Indonesian Taxpayer Identification Number",
165
168
  localName: "Nomor Pokok Wajib Pajak",
166
169
  abbreviation: "NPWP",
167
170
  aliases: ["NPWP", "Nomor Pokok Wajib Pajak"] as const,
168
171
  candidatePattern:
169
172
  "\\d{2}\\.?\\d{3}\\.?\\d{3}\\.?\\d-?\\d{3}\\.?\\d{3}",
173
+ scope: "country",
170
174
  country: "ID",
171
175
  entityType: "any",
172
176
  lengths: [15, 16],
package/src/ie/pps.ts CHANGED
@@ -9,13 +9,16 @@
9
9
  * @see https://www.gov.ie/en/service/12e6de-get-a-personal-public-service-pps-number/
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 ALPHABET = "WABCDEFGHIJKLMNOPQRSTUV";
20
23
 
21
24
  const compact = (value: string): string =>
@@ -84,12 +87,13 @@ const generate = (): string => {
84
87
  };
85
88
 
86
89
  /** Irish Personal Public Service Number. */
87
- const pps: Validator = {
90
+ const pps: CountryValidator<"IE"> = {
88
91
  name: "Irish Personal ID",
89
92
  localName: "Personal Public Service Number",
90
93
  abbreviation: "PPS",
91
94
  aliases: ["PPS number", "PPSN", "RSI number"] as const,
92
95
  candidatePattern: "\\d{7}[A-Z]{1,2}",
96
+ scope: "country",
93
97
  country: "IE",
94
98
  entityType: "person",
95
99
  sourceUrl:
package/src/ie/vat.ts CHANGED
@@ -8,13 +8,16 @@
8
8
  * @see https://www.revenue.ie/
9
9
  */
10
10
 
11
+ import type {
12
+ ValidateResult,
13
+ CountryValidator,
14
+ } from "../types";
15
+
11
16
  import { clean } from "#util/clean";
12
17
  import { randomDigits } from "#util/generate";
13
18
  import { err } from "#util/result";
14
19
  import { isdigits } from "#util/strings";
15
20
 
16
- import type { ValidateResult, Validator } from "../types";
17
-
18
21
  const ALPHABET = "WABCDEFGHIJKLMNOPQRSTUV";
19
22
 
20
23
  const compact = (value: string): string => {
@@ -118,12 +121,13 @@ const generate = (): string => {
118
121
  };
119
122
 
120
123
  /** Irish VAT Number. */
121
- const vat: Validator = {
124
+ const vat: CountryValidator<"IE"> = {
122
125
  name: "Irish VAT Number",
123
126
  localName: "Value Added Tax Number",
124
127
  abbreviation: "VAT",
125
128
  aliases: ["VAT number IE"] as const,
126
129
  candidatePattern: "IE\\d[A-Z+*]\\d{5}[A-Z]",
130
+ scope: "country",
127
131
  country: "IE",
128
132
  entityType: "any",
129
133
  sourceUrl: "https://www.revenue.ie/",
package/src/il/idnr.ts CHANGED
@@ -7,6 +7,11 @@
7
7
  * @see https://en.wikipedia.org/wiki/Israeli_identity_card
8
8
  */
9
9
 
10
+ import type {
11
+ ValidateResult,
12
+ CountryValidator,
13
+ } from "../types";
14
+
10
15
  import {
11
16
  luhnValidate,
12
17
  luhnChecksum,
@@ -16,8 +21,6 @@ import { randomDigits } from "#util/generate";
16
21
  import { err } from "#util/result";
17
22
  import { isdigits } from "#util/strings";
18
23
 
19
- import type { ValidateResult, Validator } from "../types";
20
-
21
24
  const compact = (value: string): string =>
22
25
  clean(value, " -").padStart(9, "0");
23
26
 
@@ -58,7 +61,7 @@ const generate = (): string => {
58
61
  };
59
62
 
60
63
  /** Israeli Identity Number (Mispar Zehut). */
61
- const idnr: Validator = {
64
+ const idnr: CountryValidator<"IL"> = {
62
65
  name: "Israeli Identity Number",
63
66
  localName: "מספר זהות",
64
67
  abbreviation: "ת.ז.",
@@ -68,6 +71,7 @@ const idnr: Validator = {
68
71
  "ID number",
69
72
  ] as const,
70
73
  candidatePattern: "\\d{9}",
74
+ scope: "country",
71
75
  country: "IL",
72
76
  entityType: "person",
73
77
  compact,
package/src/in/aadhaar.ts CHANGED
@@ -10,6 +10,11 @@
10
10
  * @see https://uidai.gov.in/
11
11
  */
12
12
 
13
+ import type {
14
+ ValidateResult,
15
+ CountryValidator,
16
+ } from "../types";
17
+
13
18
  import {
14
19
  verhoeffValidate,
15
20
  verhoeffCheckDigit,
@@ -19,8 +24,6 @@ import { randomDigits, randomInt } from "#util/generate";
19
24
  import { err } from "#util/result";
20
25
  import { isdigits } from "#util/strings";
21
26
 
22
- import type { ValidateResult, Validator } from "../types";
23
-
24
27
  const compact = (value: string): string =>
25
28
  clean(value, " -");
26
29
 
@@ -73,12 +76,13 @@ const generate = (): string => {
73
76
  };
74
77
 
75
78
  /** Indian Unique Identity Number. */
76
- const aadhaar: Validator = {
79
+ const aadhaar: CountryValidator<"IN"> = {
77
80
  name: "Indian Unique Identity Number",
78
81
  localName: "Aadhaar",
79
82
  abbreviation: "Aadhaar",
80
83
  aliases: ["Aadhaar", "आधार"] as const,
81
84
  candidatePattern: "\\d{4}\\s?\\d{4}\\s?\\d{4}",
85
+ scope: "country",
82
86
  country: "IN",
83
87
  entityType: "person",
84
88
  lengths: [12],
package/src/in/gstin.ts CHANGED
@@ -9,13 +9,16 @@
9
9
  * @see https://en.wikipedia.org/wiki/Goods_and_Services_Tax_Identification_Number
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, randomInt } from "#util/generate";
14
19
  import { err } from "#util/result";
15
20
  import { charValue } from "#util/strings";
16
21
 
17
- import type { ValidateResult, Validator } from "../types";
18
-
19
22
  const GSTIN_RE =
20
23
  /^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z][0-9A-Z]Z[0-9A-Z]$/;
21
24
 
@@ -70,7 +73,9 @@ const luhn36Checksum = (value: string): number => {
70
73
  let sum = 0;
71
74
  let double = false;
72
75
  for (let i = value.length - 1; i >= 0; i--) {
73
- let v = charValue(value[i]!);
76
+ const ch = value[i];
77
+ if (ch === undefined) continue;
78
+ let v = charValue(ch);
74
79
  if (double) {
75
80
  v *= 2;
76
81
  sum += Math.floor(v / BASE) + (v % BASE);
@@ -144,13 +149,14 @@ const generate = (): string => {
144
149
  };
145
150
 
146
151
  /** Indian Goods and Services Tax ID. */
147
- const gstin: Validator = {
152
+ const gstin: CountryValidator<"IN"> = {
148
153
  name: "Indian Goods and Services Tax ID",
149
154
  localName: "Goods and Services Tax Identification Number",
150
155
  abbreviation: "GSTIN",
151
156
  aliases: ["GSTIN", "GST number"] as const,
152
157
  candidatePattern:
153
158
  "\\d{2}[A-Z]{5}\\d{4}[A-Z][A-Z\\d][Z][A-Z\\d]",
159
+ scope: "country",
154
160
  country: "IN",
155
161
  entityType: "company",
156
162
  lengths: [15],
package/src/in/pan.ts CHANGED
@@ -4,8 +4,7 @@ const generate = (): string => {
4
4
  String.fromCodePoint(65 + randomInt(0, 25));
5
5
  const first3 =
6
6
  randomLetter() + randomLetter() + randomLetter();
7
- const holderType =
8
- HOLDER_TYPES[randomInt(0, HOLDER_TYPES.length - 1)]!;
7
+ const holderType = randomChar(HOLDER_TYPES);
9
8
  const fifth = randomLetter();
10
9
  const digits = randomDigits(4);
11
10
  const last = randomLetter();
@@ -26,12 +25,19 @@ const generate = (): string => {
26
25
  * @see https://en.wikipedia.org/wiki/Permanent_account_number
27
26
  */
28
27
 
28
+ import type {
29
+ ValidateResult,
30
+ CountryValidator,
31
+ } from "../types";
32
+
29
33
  import { clean } from "#util/clean";
30
- import { randomDigits, randomInt } from "#util/generate";
34
+ import {
35
+ randomChar,
36
+ randomDigits,
37
+ randomInt,
38
+ } from "#util/generate";
31
39
  import { err } from "#util/result";
32
40
 
33
- import type { ValidateResult, Validator } from "../types";
34
-
35
41
  const PAN_RE = /^[A-Z]{5}\d{4}[A-Z]$/;
36
42
 
37
43
  const HOLDER_TYPES = "ABCFGHJLPT";
@@ -53,6 +59,8 @@ const validate = (value: string): ValidateResult => {
53
59
  "PAN must be 5 letters + 4 digits + 1 letter",
54
60
  );
55
61
  }
62
+ // SAFETY: regex above guarantees v.length === 10.
63
+ // eslint-disable-next-line no-non-null-assertion
56
64
  if (!HOLDER_TYPES.includes(v[3]!)) {
57
65
  return err(
58
66
  "INVALID_COMPONENT",
@@ -65,12 +73,13 @@ const validate = (value: string): ValidateResult => {
65
73
  const format = (value: string): string => compact(value);
66
74
 
67
75
  /** Indian Permanent Account Number. */
68
- const pan: Validator = {
76
+ const pan: CountryValidator<"IN"> = {
69
77
  name: "Indian Permanent Account Number",
70
78
  localName: "Permanent Account Number",
71
79
  abbreviation: "PAN",
72
80
  aliases: ["PAN", "Permanent Account Number"] as const,
73
81
  candidatePattern: "[A-Z]{5}\\d{4}[A-Z]",
82
+ scope: "country",
74
83
  country: "IN",
75
84
  entityType: "any",
76
85
  lengths: [10],
package/src/index.ts CHANGED
@@ -1,10 +1,16 @@
1
1
  export type {
2
+ CountryValidator,
2
3
  CountryCode,
3
4
  ErrorCode,
5
+ GlobalValidator,
6
+ ParsedBirthDate,
7
+ ParsedIdentifier,
4
8
  ParsedPersonId,
9
+ ParsableValidator,
5
10
  StdnumError,
6
11
  ValidateResult,
7
12
  Validator,
13
+ ValidatorScope,
8
14
  } from "./types";
9
15
  export { default as bic } from "./bic";
10
16
  export {
package/src/iq/nid.ts CHANGED
@@ -16,14 +16,17 @@ const generate = (): string => randomDigits(12);
16
16
  * @see https://mofa.gov.iq/the-civil-status-id/
17
17
  */
18
18
 
19
+ import type {
20
+ ValidateResult,
21
+ CountryValidator,
22
+ } from "../types";
23
+
19
24
  import { normalizeArabicDigits } from "#util/arabic";
20
25
  import { clean } from "#util/clean";
21
26
  import { randomDigits } from "#util/generate";
22
27
  import { err } from "#util/result";
23
28
  import { isdigits } from "#util/strings";
24
29
 
25
- import type { ValidateResult, Validator } from "../types";
26
-
27
30
  const compact = (value: string): string =>
28
31
  normalizeArabicDigits(clean(value, " -./"));
29
32
 
@@ -48,12 +51,13 @@ const validate = (value: string): ValidateResult => {
48
51
  const format = (value: string): string => compact(value);
49
52
 
50
53
  /** Iraqi National Identification Number. */
51
- const nid: Validator = {
54
+ const nid: CountryValidator<"IQ"> = {
52
55
  name: "Iraqi National ID",
53
56
  localName: "البطاقة الوطنية الموحدة",
54
57
  abbreviation: "NID",
55
58
  aliases: ["NID", "البطاقة الوطنية الموحدة"] as const,
56
59
  candidatePattern: "\\d{12}",
60
+ scope: "country",
57
61
  country: "IQ",
58
62
  entityType: "person",
59
63
  sourceUrl: "https://mofa.gov.iq/the-civil-status-id/",
package/src/ir/nid.ts CHANGED
@@ -22,14 +22,17 @@
22
22
  * @see https://persian-tools.js.org/functions/verifyIranianNationalId.html
23
23
  */
24
24
 
25
+ import type {
26
+ ValidateResult,
27
+ CountryValidator,
28
+ } from "../types";
29
+
25
30
  import { normalizeArabicDigits } from "#util/arabic";
26
31
  import { clean } from "#util/clean";
27
32
  import { randomDigits } 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
  /** All-same-digit patterns (0000000000 .. 9999999999). */
34
37
  const ALL_SAME = new Set(
35
38
  Array.from({ length: 10 }, (_, i) =>
@@ -97,12 +100,13 @@ const generate = (): string => {
97
100
  };
98
101
 
99
102
  /** Iranian National Identification Number. */
100
- const nid: Validator = {
103
+ const nid: CountryValidator<"IR"> = {
101
104
  name: "Iranian National ID",
102
105
  localName: "کد ملی",
103
106
  abbreviation: "NID",
104
107
  aliases: ["NID", "کد ملی", "national code"] as const,
105
108
  candidatePattern: "\\d{10}",
109
+ scope: "country",
106
110
  country: "IR",
107
111
  entityType: "person",
108
112
  sourceUrl: "https://www.sabteahval.ir/",
@@ -11,14 +11,17 @@
11
11
  * @see https://www.skra.is/
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 { isValidDate } from "#util/date";
16
21
  import { randomInt } from "#util/generate";
17
22
  import { err } from "#util/result";
18
23
  import { isdigits } from "#util/strings";
19
24
 
20
- import type { ValidateResult, Validator } from "../types";
21
-
22
25
  const WEIGHTS = [3, 2, 7, 6, 5, 4, 3, 2, 0, 0] as const;
23
26
 
24
27
  const compact = (value: string): string =>
@@ -105,12 +108,13 @@ const generate = (): string => {
105
108
  };
106
109
 
107
110
  /** Icelandic Identification Number. */
108
- const kennitala: Validator = {
111
+ const kennitala: CountryValidator<"IS"> = {
109
112
  name: "Icelandic ID Number",
110
113
  localName: "Kennitala",
111
114
  abbreviation: "kt.",
112
115
  aliases: ["kennitala", "kt."] as const,
113
116
  candidatePattern: "\\d{6}-?\\d{4}",
117
+ scope: "country",
114
118
  country: "IS",
115
119
  entityType: "any",
116
120
  sourceUrl: "https://www.skra.is/",