@stll/stdnum 0.0.1

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 (1130) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +323 -0
  3. package/dist/_checksums/luhn.d.ts +12 -0
  4. package/dist/_checksums/luhn.js +26 -0
  5. package/dist/_checksums/luhn.js.map +1 -0
  6. package/dist/_checksums/mod1110.d.ts +12 -0
  7. package/dist/_checksums/mod1110.js +25 -0
  8. package/dist/_checksums/mod1110.js.map +1 -0
  9. package/dist/_checksums/mod112.d.ts +24 -0
  10. package/dist/_checksums/mod112.js +53 -0
  11. package/dist/_checksums/mod112.js.map +1 -0
  12. package/dist/_checksums/mod97.d.ts +23 -0
  13. package/dist/_checksums/mod97.js +28 -0
  14. package/dist/_checksums/mod97.js.map +1 -0
  15. package/dist/_checksums/verhoeff.d.ts +22 -0
  16. package/dist/_checksums/verhoeff.js +271 -0
  17. package/dist/_checksums/verhoeff.js.map +1 -0
  18. package/dist/_checksums/weighted-sum.d.ts +13 -0
  19. package/dist/_checksums/weighted-sum.js +22 -0
  20. package/dist/_checksums/weighted-sum.js.map +1 -0
  21. package/dist/_util/arabic.d.ts +19 -0
  22. package/dist/_util/arabic.js +41 -0
  23. package/dist/_util/arabic.js.map +1 -0
  24. package/dist/_util/clean.d.ts +13 -0
  25. package/dist/_util/clean.js +71 -0
  26. package/dist/_util/clean.js.map +1 -0
  27. package/dist/_util/date.d.ts +12 -0
  28. package/dist/_util/date.js +19 -0
  29. package/dist/_util/date.js.map +1 -0
  30. package/dist/_util/generate.d.ts +16 -0
  31. package/dist/_util/generate.js +21 -0
  32. package/dist/_util/generate.js.map +1 -0
  33. package/dist/_util/result.d.ts +8 -0
  34. package/dist/_util/result.js +13 -0
  35. package/dist/_util/result.js.map +1 -0
  36. package/dist/_util/strings.d.ts +21 -0
  37. package/dist/_util/strings.js +28 -0
  38. package/dist/_util/strings.js.map +1 -0
  39. package/dist/_virtual/_rolldown/runtime.js +13 -0
  40. package/dist/ad/mod.d.ts +8 -0
  41. package/dist/ad/mod.js +8 -0
  42. package/dist/ad/mod.js.map +1 -0
  43. package/dist/ad/nrt.d.ts +13 -0
  44. package/dist/ad/nrt.js +69 -0
  45. package/dist/ad/nrt.js.map +1 -0
  46. package/dist/ae/eid.d.ts +17 -0
  47. package/dist/ae/eid.js +79 -0
  48. package/dist/ae/eid.js.map +1 -0
  49. package/dist/ae/mod.d.ts +8 -0
  50. package/dist/ae/mod.js +8 -0
  51. package/dist/ae/mod.js.map +1 -0
  52. package/dist/ai/mod.d.ts +8 -0
  53. package/dist/ai/mod.js +8 -0
  54. package/dist/ai/mod.js.map +1 -0
  55. package/dist/ai/tin.d.ts +19 -0
  56. package/dist/ai/tin.js +72 -0
  57. package/dist/ai/tin.js.map +1 -0
  58. package/dist/al/mod.d.ts +8 -0
  59. package/dist/al/mod.js +8 -0
  60. package/dist/al/mod.js.map +1 -0
  61. package/dist/al/nipt.d.ts +13 -0
  62. package/dist/al/nipt.js +56 -0
  63. package/dist/al/nipt.js.map +1 -0
  64. package/dist/am/mod.d.ts +8 -0
  65. package/dist/am/mod.js +8 -0
  66. package/dist/am/mod.js.map +1 -0
  67. package/dist/am/tin.d.ts +13 -0
  68. package/dist/am/tin.js +53 -0
  69. package/dist/am/tin.js.map +1 -0
  70. package/dist/ar/cbu.d.ts +14 -0
  71. package/dist/ar/cbu.js +88 -0
  72. package/dist/ar/cbu.js.map +1 -0
  73. package/dist/ar/cuit.d.ts +19 -0
  74. package/dist/ar/cuit.js +123 -0
  75. package/dist/ar/cuit.js.map +1 -0
  76. package/dist/ar/dni.d.ts +13 -0
  77. package/dist/ar/dni.js +57 -0
  78. package/dist/ar/dni.js.map +1 -0
  79. package/dist/ar/mod.d.ts +10 -0
  80. package/dist/ar/mod.js +14 -0
  81. package/dist/ar/mod.js.map +1 -0
  82. package/dist/at/businessid.d.ts +13 -0
  83. package/dist/at/businessid.js +56 -0
  84. package/dist/at/businessid.js.map +1 -0
  85. package/dist/at/mod.d.ts +11 -0
  86. package/dist/at/mod.js +16 -0
  87. package/dist/at/mod.js.map +1 -0
  88. package/dist/at/tin.d.ts +14 -0
  89. package/dist/at/tin.js +70 -0
  90. package/dist/at/tin.js.map +1 -0
  91. package/dist/at/uid.d.ts +14 -0
  92. package/dist/at/uid.js +64 -0
  93. package/dist/at/uid.js.map +1 -0
  94. package/dist/at/vnr.d.ts +12 -0
  95. package/dist/at/vnr.js +79 -0
  96. package/dist/at/vnr.js.map +1 -0
  97. package/dist/au/abn.d.ts +14 -0
  98. package/dist/au/abn.js +77 -0
  99. package/dist/au/abn.js.map +1 -0
  100. package/dist/au/acn.d.ts +14 -0
  101. package/dist/au/acn.js +70 -0
  102. package/dist/au/acn.js.map +1 -0
  103. package/dist/au/mod.d.ts +10 -0
  104. package/dist/au/mod.js +14 -0
  105. package/dist/au/mod.js.map +1 -0
  106. package/dist/au/tfn.d.ts +14 -0
  107. package/dist/au/tfn.js +71 -0
  108. package/dist/au/tfn.js.map +1 -0
  109. package/dist/az/mod.d.ts +8 -0
  110. package/dist/az/mod.js +8 -0
  111. package/dist/az/mod.js.map +1 -0
  112. package/dist/az/voen.d.ts +21 -0
  113. package/dist/az/voen.js +100 -0
  114. package/dist/az/voen.js.map +1 -0
  115. package/dist/ba/jmbg.d.ts +15 -0
  116. package/dist/ba/jmbg.js +97 -0
  117. package/dist/ba/jmbg.js.map +1 -0
  118. package/dist/ba/mod.d.ts +8 -0
  119. package/dist/ba/mod.js +8 -0
  120. package/dist/ba/mod.js.map +1 -0
  121. package/dist/bd/mod.d.ts +8 -0
  122. package/dist/bd/mod.js +8 -0
  123. package/dist/bd/mod.js.map +1 -0
  124. package/dist/bd/nid.d.ts +13 -0
  125. package/dist/bd/nid.js +116 -0
  126. package/dist/bd/nid.js.map +1 -0
  127. package/dist/be/bis.d.ts +14 -0
  128. package/dist/be/bis.js +65 -0
  129. package/dist/be/bis.js.map +1 -0
  130. package/dist/be/mod.d.ts +10 -0
  131. package/dist/be/mod.js +14 -0
  132. package/dist/be/mod.js.map +1 -0
  133. package/dist/be/nn.d.ts +21 -0
  134. package/dist/be/nn.js +84 -0
  135. package/dist/be/nn.js.map +1 -0
  136. package/dist/be/vat.d.ts +14 -0
  137. package/dist/be/vat.js +70 -0
  138. package/dist/be/vat.js.map +1 -0
  139. package/dist/bg/egn.d.ts +19 -0
  140. package/dist/bg/egn.js +122 -0
  141. package/dist/bg/egn.js.map +1 -0
  142. package/dist/bg/mod.d.ts +10 -0
  143. package/dist/bg/mod.js +14 -0
  144. package/dist/bg/mod.js.map +1 -0
  145. package/dist/bg/pnf.d.ts +14 -0
  146. package/dist/bg/pnf.js +70 -0
  147. package/dist/bg/pnf.js.map +1 -0
  148. package/dist/bg/vat.d.ts +14 -0
  149. package/dist/bg/vat.js +153 -0
  150. package/dist/bg/vat.js.map +1 -0
  151. package/dist/bh/cpr.d.ts +12 -0
  152. package/dist/bh/cpr.js +58 -0
  153. package/dist/bh/cpr.js.map +1 -0
  154. package/dist/bh/mod.d.ts +8 -0
  155. package/dist/bh/mod.js +8 -0
  156. package/dist/bh/mod.js.map +1 -0
  157. package/dist/bic.d.ts +13 -0
  158. package/dist/bic.js +72 -0
  159. package/dist/bic.js.map +1 -0
  160. package/dist/br/cnpj.d.ts +21 -0
  161. package/dist/br/cnpj.js +132 -0
  162. package/dist/br/cnpj.js.map +1 -0
  163. package/dist/br/cpf.d.ts +14 -0
  164. package/dist/br/cpf.js +83 -0
  165. package/dist/br/cpf.js.map +1 -0
  166. package/dist/br/mod.d.ts +9 -0
  167. package/dist/br/mod.js +12 -0
  168. package/dist/br/mod.js.map +1 -0
  169. package/dist/by/mod.d.ts +8 -0
  170. package/dist/by/mod.js +8 -0
  171. package/dist/by/mod.js.map +1 -0
  172. package/dist/by/unp.d.ts +14 -0
  173. package/dist/by/unp.js +114 -0
  174. package/dist/by/unp.js.map +1 -0
  175. package/dist/bz/mod.d.ts +8 -0
  176. package/dist/bz/mod.js +8 -0
  177. package/dist/bz/mod.js.map +1 -0
  178. package/dist/bz/tin.d.ts +16 -0
  179. package/dist/bz/tin.js +85 -0
  180. package/dist/bz/tin.js.map +1 -0
  181. package/dist/ca/bn.d.ts +14 -0
  182. package/dist/ca/bn.js +73 -0
  183. package/dist/ca/bn.js.map +1 -0
  184. package/dist/ca/mod.d.ts +9 -0
  185. package/dist/ca/mod.js +12 -0
  186. package/dist/ca/mod.js.map +1 -0
  187. package/dist/ca/sin.d.ts +14 -0
  188. package/dist/ca/sin.js +62 -0
  189. package/dist/ca/sin.js.map +1 -0
  190. package/dist/ch/mod.d.ts +10 -0
  191. package/dist/ch/mod.js +14 -0
  192. package/dist/ch/mod.js.map +1 -0
  193. package/dist/ch/ssn.d.ts +14 -0
  194. package/dist/ch/ssn.js +67 -0
  195. package/dist/ch/ssn.js.map +1 -0
  196. package/dist/ch/uid.d.ts +14 -0
  197. package/dist/ch/uid.js +81 -0
  198. package/dist/ch/uid.js.map +1 -0
  199. package/dist/ch/vat.d.ts +14 -0
  200. package/dist/ch/vat.js +70 -0
  201. package/dist/ch/vat.js.map +1 -0
  202. package/dist/cl/mod.d.ts +8 -0
  203. package/dist/cl/mod.js +8 -0
  204. package/dist/cl/mod.js.map +1 -0
  205. package/dist/cl/rut.d.ts +19 -0
  206. package/dist/cl/rut.js +95 -0
  207. package/dist/cl/rut.js.map +1 -0
  208. package/dist/cn/mod.d.ts +9 -0
  209. package/dist/cn/mod.js +12 -0
  210. package/dist/cn/mod.js.map +1 -0
  211. package/dist/cn/ric.d.ts +19 -0
  212. package/dist/cn/ric.js +108 -0
  213. package/dist/cn/ric.js.map +1 -0
  214. package/dist/cn/uscc.d.ts +14 -0
  215. package/dist/cn/uscc.js +88 -0
  216. package/dist/cn/uscc.js.map +1 -0
  217. package/dist/co/mod.d.ts +8 -0
  218. package/dist/co/mod.js +8 -0
  219. package/dist/co/mod.js.map +1 -0
  220. package/dist/co/nit.d.ts +14 -0
  221. package/dist/co/nit.js +109 -0
  222. package/dist/co/nit.js.map +1 -0
  223. package/dist/cr/cpf.d.ts +21 -0
  224. package/dist/cr/cpf.js +79 -0
  225. package/dist/cr/cpf.js.map +1 -0
  226. package/dist/cr/mod.d.ts +8 -0
  227. package/dist/cr/mod.js +8 -0
  228. package/dist/cr/mod.js.map +1 -0
  229. package/dist/creditcard.d.ts +25 -0
  230. package/dist/creditcard.js +121 -0
  231. package/dist/creditcard.js.map +1 -0
  232. package/dist/cu/mod.d.ts +8 -0
  233. package/dist/cu/mod.js +8 -0
  234. package/dist/cu/mod.js.map +1 -0
  235. package/dist/cu/ni.d.ts +21 -0
  236. package/dist/cu/ni.js +90 -0
  237. package/dist/cu/ni.js.map +1 -0
  238. package/dist/cy/mod.d.ts +8 -0
  239. package/dist/cy/mod.js +8 -0
  240. package/dist/cy/mod.js.map +1 -0
  241. package/dist/cy/vat.d.ts +14 -0
  242. package/dist/cy/vat.js +88 -0
  243. package/dist/cy/vat.js.map +1 -0
  244. package/dist/cz/dic.d.ts +14 -0
  245. package/dist/cz/dic.js +97 -0
  246. package/dist/cz/dic.js.map +1 -0
  247. package/dist/cz/ico.d.ts +14 -0
  248. package/dist/cz/ico.js +70 -0
  249. package/dist/cz/ico.js.map +1 -0
  250. package/dist/cz/mod.d.ts +10 -0
  251. package/dist/cz/mod.js +14 -0
  252. package/dist/cz/mod.js.map +1 -0
  253. package/dist/cz/rc.d.ts +22 -0
  254. package/dist/cz/rc.js +116 -0
  255. package/dist/cz/rc.js.map +1 -0
  256. package/dist/de/handelsreg.d.ts +17 -0
  257. package/dist/de/handelsreg.js +86 -0
  258. package/dist/de/handelsreg.js.map +1 -0
  259. package/dist/de/idnr.d.ts +14 -0
  260. package/dist/de/idnr.js +102 -0
  261. package/dist/de/idnr.js.map +1 -0
  262. package/dist/de/mod.d.ts +12 -0
  263. package/dist/de/mod.js +18 -0
  264. package/dist/de/mod.js.map +1 -0
  265. package/dist/de/stnr.d.ts +22 -0
  266. package/dist/de/stnr.js +144 -0
  267. package/dist/de/stnr.js.map +1 -0
  268. package/dist/de/svnr.d.ts +14 -0
  269. package/dist/de/svnr.js +108 -0
  270. package/dist/de/svnr.js.map +1 -0
  271. package/dist/de/vat.d.ts +14 -0
  272. package/dist/de/vat.js +65 -0
  273. package/dist/de/vat.js.map +1 -0
  274. package/dist/dk/cpr.d.ts +17 -0
  275. package/dist/dk/cpr.js +81 -0
  276. package/dist/dk/cpr.js.map +1 -0
  277. package/dist/dk/cvr.d.ts +14 -0
  278. package/dist/dk/cvr.js +70 -0
  279. package/dist/dk/cvr.js.map +1 -0
  280. package/dist/dk/mod.d.ts +10 -0
  281. package/dist/dk/mod.js +14 -0
  282. package/dist/dk/mod.js.map +1 -0
  283. package/dist/dk/vat.d.ts +14 -0
  284. package/dist/dk/vat.js +72 -0
  285. package/dist/dk/vat.js.map +1 -0
  286. package/dist/do/mod.d.ts +8 -0
  287. package/dist/do/mod.js +8 -0
  288. package/dist/do/mod.js.map +1 -0
  289. package/dist/do/rnc.d.ts +18 -0
  290. package/dist/do/rnc.js +95 -0
  291. package/dist/do/rnc.js.map +1 -0
  292. package/dist/ec/mod.d.ts +8 -0
  293. package/dist/ec/mod.js +8 -0
  294. package/dist/ec/mod.js.map +1 -0
  295. package/dist/ec/ruc.d.ts +14 -0
  296. package/dist/ec/ruc.js +150 -0
  297. package/dist/ec/ruc.js.map +1 -0
  298. package/dist/ee/ik.d.ts +24 -0
  299. package/dist/ee/ik.js +131 -0
  300. package/dist/ee/ik.js.map +1 -0
  301. package/dist/ee/mod.d.ts +10 -0
  302. package/dist/ee/mod.js +14 -0
  303. package/dist/ee/mod.js.map +1 -0
  304. package/dist/ee/registrikood.d.ts +14 -0
  305. package/dist/ee/registrikood.js +63 -0
  306. package/dist/ee/registrikood.js.map +1 -0
  307. package/dist/ee/vat.d.ts +14 -0
  308. package/dist/ee/vat.js +69 -0
  309. package/dist/ee/vat.js.map +1 -0
  310. package/dist/eg/mod.d.ts +8 -0
  311. package/dist/eg/mod.js +8 -0
  312. package/dist/eg/mod.js.map +1 -0
  313. package/dist/eg/tn.d.ts +13 -0
  314. package/dist/eg/tn.js +81 -0
  315. package/dist/eg/tn.js.map +1 -0
  316. package/dist/es/cif.d.ts +14 -0
  317. package/dist/es/cif.js +66 -0
  318. package/dist/es/cif.js.map +1 -0
  319. package/dist/es/dni.d.ts +15 -0
  320. package/dist/es/dni.js +58 -0
  321. package/dist/es/dni.js.map +1 -0
  322. package/dist/es/mod.d.ts +12 -0
  323. package/dist/es/mod.js +18 -0
  324. package/dist/es/mod.js.map +1 -0
  325. package/dist/es/nie.d.ts +14 -0
  326. package/dist/es/nie.js +78 -0
  327. package/dist/es/nie.js.map +1 -0
  328. package/dist/es/nss.d.ts +14 -0
  329. package/dist/es/nss.js +72 -0
  330. package/dist/es/nss.js.map +1 -0
  331. package/dist/es/vat.d.ts +15 -0
  332. package/dist/es/vat.js +104 -0
  333. package/dist/es/vat.js.map +1 -0
  334. package/dist/eu/mod.d.ts +8 -0
  335. package/dist/eu/mod.js +8 -0
  336. package/dist/eu/mod.js.map +1 -0
  337. package/dist/eu/vat.d.ts +20 -0
  338. package/dist/eu/vat.js +145 -0
  339. package/dist/eu/vat.js.map +1 -0
  340. package/dist/fi/hetu.d.ts +17 -0
  341. package/dist/fi/hetu.js +107 -0
  342. package/dist/fi/hetu.js.map +1 -0
  343. package/dist/fi/mod.d.ts +10 -0
  344. package/dist/fi/mod.js +14 -0
  345. package/dist/fi/mod.js.map +1 -0
  346. package/dist/fi/vat.d.ts +14 -0
  347. package/dist/fi/vat.js +68 -0
  348. package/dist/fi/vat.js.map +1 -0
  349. package/dist/fi/ytunnus.d.ts +14 -0
  350. package/dist/fi/ytunnus.js +71 -0
  351. package/dist/fi/ytunnus.js.map +1 -0
  352. package/dist/fr/mod.d.ts +12 -0
  353. package/dist/fr/mod.js +18 -0
  354. package/dist/fr/mod.js.map +1 -0
  355. package/dist/fr/nif.d.ts +14 -0
  356. package/dist/fr/nif.js +64 -0
  357. package/dist/fr/nif.js.map +1 -0
  358. package/dist/fr/nir.d.ts +15 -0
  359. package/dist/fr/nir.js +106 -0
  360. package/dist/fr/nir.js.map +1 -0
  361. package/dist/fr/siren.d.ts +14 -0
  362. package/dist/fr/siren.js +56 -0
  363. package/dist/fr/siren.js.map +1 -0
  364. package/dist/fr/siret.d.ts +14 -0
  365. package/dist/fr/siret.js +73 -0
  366. package/dist/fr/siret.js.map +1 -0
  367. package/dist/fr/tva.d.ts +14 -0
  368. package/dist/fr/tva.js +80 -0
  369. package/dist/fr/tva.js.map +1 -0
  370. package/dist/gb/mod.d.ts +11 -0
  371. package/dist/gb/mod.js +16 -0
  372. package/dist/gb/mod.js.map +1 -0
  373. package/dist/gb/nino.d.ts +13 -0
  374. package/dist/gb/nino.js +103 -0
  375. package/dist/gb/nino.js.map +1 -0
  376. package/dist/gb/sedol.d.ts +15 -0
  377. package/dist/gb/sedol.js +85 -0
  378. package/dist/gb/sedol.js.map +1 -0
  379. package/dist/gb/utr.d.ts +14 -0
  380. package/dist/gb/utr.js +69 -0
  381. package/dist/gb/utr.js.map +1 -0
  382. package/dist/gb/vat.d.ts +14 -0
  383. package/dist/gb/vat.js +102 -0
  384. package/dist/gb/vat.js.map +1 -0
  385. package/dist/ge/mod.d.ts +8 -0
  386. package/dist/ge/mod.js +8 -0
  387. package/dist/ge/mod.js.map +1 -0
  388. package/dist/ge/pin.d.ts +13 -0
  389. package/dist/ge/pin.js +51 -0
  390. package/dist/ge/pin.js.map +1 -0
  391. package/dist/gh/mod.d.ts +8 -0
  392. package/dist/gh/mod.js +8 -0
  393. package/dist/gh/mod.js.map +1 -0
  394. package/dist/gh/tin.d.ts +14 -0
  395. package/dist/gh/tin.js +80 -0
  396. package/dist/gh/tin.js.map +1 -0
  397. package/dist/gr/amka.d.ts +14 -0
  398. package/dist/gr/amka.js +71 -0
  399. package/dist/gr/amka.js.map +1 -0
  400. package/dist/gr/mod.d.ts +9 -0
  401. package/dist/gr/mod.js +12 -0
  402. package/dist/gr/mod.js.map +1 -0
  403. package/dist/gr/vat.d.ts +14 -0
  404. package/dist/gr/vat.js +66 -0
  405. package/dist/gr/vat.js.map +1 -0
  406. package/dist/gt/mod.d.ts +8 -0
  407. package/dist/gt/mod.js +8 -0
  408. package/dist/gt/mod.js.map +1 -0
  409. package/dist/gt/nit.d.ts +21 -0
  410. package/dist/gt/nit.js +98 -0
  411. package/dist/gt/nit.js.map +1 -0
  412. package/dist/hk/hkid.d.ts +15 -0
  413. package/dist/hk/hkid.js +92 -0
  414. package/dist/hk/hkid.js.map +1 -0
  415. package/dist/hk/mod.d.ts +8 -0
  416. package/dist/hk/mod.js +8 -0
  417. package/dist/hk/mod.js.map +1 -0
  418. package/dist/hr/mod.d.ts +8 -0
  419. package/dist/hr/mod.js +8 -0
  420. package/dist/hr/mod.js.map +1 -0
  421. package/dist/hr/vat.d.ts +14 -0
  422. package/dist/hr/vat.js +55 -0
  423. package/dist/hr/vat.js.map +1 -0
  424. package/dist/hu/mod.d.ts +8 -0
  425. package/dist/hu/mod.js +8 -0
  426. package/dist/hu/mod.js.map +1 -0
  427. package/dist/hu/vat.d.ts +14 -0
  428. package/dist/hu/vat.js +68 -0
  429. package/dist/hu/vat.js.map +1 -0
  430. package/dist/iban.d.ts +16 -0
  431. package/dist/iban.js +282 -0
  432. package/dist/iban.js.map +1 -0
  433. package/dist/id/mod.d.ts +8 -0
  434. package/dist/id/mod.js +8 -0
  435. package/dist/id/mod.js.map +1 -0
  436. package/dist/id/npwp.d.ts +14 -0
  437. package/dist/id/npwp.js +133 -0
  438. package/dist/id/npwp.js.map +1 -0
  439. package/dist/ie/mod.d.ts +9 -0
  440. package/dist/ie/mod.js +12 -0
  441. package/dist/ie/mod.js.map +1 -0
  442. package/dist/ie/pps.d.ts +14 -0
  443. package/dist/ie/pps.js +69 -0
  444. package/dist/ie/pps.js.map +1 -0
  445. package/dist/ie/vat.d.ts +14 -0
  446. package/dist/ie/vat.js +83 -0
  447. package/dist/ie/vat.js.map +1 -0
  448. package/dist/il/idnr.d.ts +14 -0
  449. package/dist/il/idnr.js +61 -0
  450. package/dist/il/idnr.js.map +1 -0
  451. package/dist/il/mod.d.ts +8 -0
  452. package/dist/il/mod.js +8 -0
  453. package/dist/il/mod.js.map +1 -0
  454. package/dist/in/aadhaar.d.ts +14 -0
  455. package/dist/in/aadhaar.js +61 -0
  456. package/dist/in/aadhaar.js.map +1 -0
  457. package/dist/in/gstin.d.ts +14 -0
  458. package/dist/in/gstin.js +130 -0
  459. package/dist/in/gstin.js.map +1 -0
  460. package/dist/in/mod.d.ts +10 -0
  461. package/dist/in/mod.js +14 -0
  462. package/dist/in/mod.js.map +1 -0
  463. package/dist/in/pan.d.ts +13 -0
  464. package/dist/in/pan.js +58 -0
  465. package/dist/in/pan.js.map +1 -0
  466. package/dist/index.d.ts +105 -0
  467. package/dist/index.js +104 -0
  468. package/dist/iq/mod.d.ts +8 -0
  469. package/dist/iq/mod.js +8 -0
  470. package/dist/iq/mod.js.map +1 -0
  471. package/dist/iq/nid.d.ts +14 -0
  472. package/dist/iq/nid.js +56 -0
  473. package/dist/iq/nid.js.map +1 -0
  474. package/dist/ir/mod.d.ts +8 -0
  475. package/dist/ir/mod.js +8 -0
  476. package/dist/ir/mod.js.map +1 -0
  477. package/dist/ir/nid.d.ts +18 -0
  478. package/dist/ir/nid.js +90 -0
  479. package/dist/ir/nid.js.map +1 -0
  480. package/dist/is/kennitala.d.ts +14 -0
  481. package/dist/is/kennitala.js +92 -0
  482. package/dist/is/kennitala.js.map +1 -0
  483. package/dist/is/mod.d.ts +9 -0
  484. package/dist/is/mod.js +12 -0
  485. package/dist/is/mod.js.map +1 -0
  486. package/dist/is/vsk.d.ts +13 -0
  487. package/dist/is/vsk.js +47 -0
  488. package/dist/is/vsk.js.map +1 -0
  489. package/dist/isin.d.ts +14 -0
  490. package/dist/isin.js +85 -0
  491. package/dist/isin.js.map +1 -0
  492. package/dist/it/codicefiscale.d.ts +18 -0
  493. package/dist/it/codicefiscale.js +214 -0
  494. package/dist/it/codicefiscale.js.map +1 -0
  495. package/dist/it/iva.d.ts +14 -0
  496. package/dist/it/iva.js +71 -0
  497. package/dist/it/iva.js.map +1 -0
  498. package/dist/it/mod.d.ts +9 -0
  499. package/dist/it/mod.js +12 -0
  500. package/dist/it/mod.js.map +1 -0
  501. package/dist/jp/cn.d.ts +14 -0
  502. package/dist/jp/cn.js +68 -0
  503. package/dist/jp/cn.js.map +1 -0
  504. package/dist/jp/mod.d.ts +9 -0
  505. package/dist/jp/mod.js +12 -0
  506. package/dist/jp/mod.js.map +1 -0
  507. package/dist/jp/mynumber.d.ts +14 -0
  508. package/dist/jp/mynumber.js +86 -0
  509. package/dist/jp/mynumber.js.map +1 -0
  510. package/dist/kr/brn.d.ts +13 -0
  511. package/dist/kr/brn.js +67 -0
  512. package/dist/kr/brn.js.map +1 -0
  513. package/dist/kr/mod.d.ts +9 -0
  514. package/dist/kr/mod.js +12 -0
  515. package/dist/kr/mod.js.map +1 -0
  516. package/dist/kr/rrn.d.ts +22 -0
  517. package/dist/kr/rrn.js +133 -0
  518. package/dist/kr/rrn.js.map +1 -0
  519. package/dist/kw/civil.d.ts +18 -0
  520. package/dist/kw/civil.js +99 -0
  521. package/dist/kw/civil.js.map +1 -0
  522. package/dist/kw/mod.d.ts +8 -0
  523. package/dist/kw/mod.js +8 -0
  524. package/dist/kw/mod.js.map +1 -0
  525. package/dist/kz/iin.d.ts +23 -0
  526. package/dist/kz/iin.js +150 -0
  527. package/dist/kz/iin.js.map +1 -0
  528. package/dist/kz/mod.d.ts +8 -0
  529. package/dist/kz/mod.js +8 -0
  530. package/dist/kz/mod.js.map +1 -0
  531. package/dist/lei.d.ts +14 -0
  532. package/dist/lei.js +68 -0
  533. package/dist/lei.js.map +1 -0
  534. package/dist/li/mod.d.ts +8 -0
  535. package/dist/li/mod.js +8 -0
  536. package/dist/li/mod.js.map +1 -0
  537. package/dist/li/peid.d.ts +13 -0
  538. package/dist/li/peid.js +61 -0
  539. package/dist/li/peid.js.map +1 -0
  540. package/dist/lk/mod.d.ts +8 -0
  541. package/dist/lk/mod.js +8 -0
  542. package/dist/lk/mod.js.map +1 -0
  543. package/dist/lk/nic.d.ts +17 -0
  544. package/dist/lk/nic.js +139 -0
  545. package/dist/lk/nic.js.map +1 -0
  546. package/dist/lt/asmens.d.ts +14 -0
  547. package/dist/lt/asmens.js +81 -0
  548. package/dist/lt/asmens.js.map +1 -0
  549. package/dist/lt/mod.d.ts +9 -0
  550. package/dist/lt/mod.js +12 -0
  551. package/dist/lt/mod.js.map +1 -0
  552. package/dist/lt/vat.d.ts +14 -0
  553. package/dist/lt/vat.js +72 -0
  554. package/dist/lt/vat.js.map +1 -0
  555. package/dist/lu/mod.d.ts +8 -0
  556. package/dist/lu/mod.js +8 -0
  557. package/dist/lu/mod.js.map +1 -0
  558. package/dist/lu/vat.d.ts +14 -0
  559. package/dist/lu/vat.js +56 -0
  560. package/dist/lu/vat.js.map +1 -0
  561. package/dist/luhn.d.ts +17 -0
  562. package/dist/luhn.js +51 -0
  563. package/dist/luhn.js.map +1 -0
  564. package/dist/lv/mod.d.ts +8 -0
  565. package/dist/lv/mod.js +8 -0
  566. package/dist/lv/mod.js.map +1 -0
  567. package/dist/lv/vat.d.ts +14 -0
  568. package/dist/lv/vat.js +104 -0
  569. package/dist/lv/vat.js.map +1 -0
  570. package/dist/ma/ice.d.ts +14 -0
  571. package/dist/ma/ice.js +57 -0
  572. package/dist/ma/ice.js.map +1 -0
  573. package/dist/ma/mod.d.ts +8 -0
  574. package/dist/ma/mod.js +8 -0
  575. package/dist/ma/mod.js.map +1 -0
  576. package/dist/mc/mod.d.ts +8 -0
  577. package/dist/mc/mod.js +8 -0
  578. package/dist/mc/mod.js.map +1 -0
  579. package/dist/mc/tva.d.ts +14 -0
  580. package/dist/mc/tva.js +53 -0
  581. package/dist/mc/tva.js.map +1 -0
  582. package/dist/md/idno.d.ts +12 -0
  583. package/dist/md/idno.js +71 -0
  584. package/dist/md/idno.js.map +1 -0
  585. package/dist/md/mod.d.ts +8 -0
  586. package/dist/md/mod.js +8 -0
  587. package/dist/md/mod.js.map +1 -0
  588. package/dist/me/mod.d.ts +8 -0
  589. package/dist/me/mod.js +8 -0
  590. package/dist/me/mod.js.map +1 -0
  591. package/dist/me/pib.d.ts +14 -0
  592. package/dist/me/pib.js +63 -0
  593. package/dist/me/pib.js.map +1 -0
  594. package/dist/mk/edb.d.ts +14 -0
  595. package/dist/mk/edb.js +77 -0
  596. package/dist/mk/edb.js.map +1 -0
  597. package/dist/mk/mod.d.ts +8 -0
  598. package/dist/mk/mod.js +8 -0
  599. package/dist/mk/mod.js.map +1 -0
  600. package/dist/mt/mod.d.ts +8 -0
  601. package/dist/mt/mod.js +8 -0
  602. package/dist/mt/mod.js.map +1 -0
  603. package/dist/mt/vat.d.ts +14 -0
  604. package/dist/mt/vat.js +69 -0
  605. package/dist/mt/vat.js.map +1 -0
  606. package/dist/mu/brn.d.ts +13 -0
  607. package/dist/mu/brn.js +68 -0
  608. package/dist/mu/brn.js.map +1 -0
  609. package/dist/mu/mod.d.ts +8 -0
  610. package/dist/mu/mod.js +8 -0
  611. package/dist/mu/mod.js.map +1 -0
  612. package/dist/mx/clabe.d.ts +18 -0
  613. package/dist/mx/clabe.js +87 -0
  614. package/dist/mx/clabe.js.map +1 -0
  615. package/dist/mx/curp.d.ts +21 -0
  616. package/dist/mx/curp.js +140 -0
  617. package/dist/mx/curp.js.map +1 -0
  618. package/dist/mx/mod.d.ts +10 -0
  619. package/dist/mx/mod.js +14 -0
  620. package/dist/mx/mod.js.map +1 -0
  621. package/dist/mx/rfc.d.ts +16 -0
  622. package/dist/mx/rfc.js +92 -0
  623. package/dist/mx/rfc.js.map +1 -0
  624. package/dist/my/mod.d.ts +8 -0
  625. package/dist/my/mod.js +8 -0
  626. package/dist/my/mod.js.map +1 -0
  627. package/dist/my/nric.d.ts +17 -0
  628. package/dist/my/nric.js +186 -0
  629. package/dist/my/nric.js.map +1 -0
  630. package/dist/ng/mod.d.ts +8 -0
  631. package/dist/ng/mod.js +8 -0
  632. package/dist/ng/mod.js.map +1 -0
  633. package/dist/ng/nin.d.ts +13 -0
  634. package/dist/ng/nin.js +54 -0
  635. package/dist/ng/nin.js.map +1 -0
  636. package/dist/ni/mod.d.ts +8 -0
  637. package/dist/ni/mod.js +8 -0
  638. package/dist/ni/mod.js.map +1 -0
  639. package/dist/ni/ruc.d.ts +23 -0
  640. package/dist/ni/ruc.js +113 -0
  641. package/dist/ni/ruc.js.map +1 -0
  642. package/dist/nl/bsn.d.ts +14 -0
  643. package/dist/nl/bsn.js +70 -0
  644. package/dist/nl/bsn.js.map +1 -0
  645. package/dist/nl/kvk.d.ts +13 -0
  646. package/dist/nl/kvk.js +45 -0
  647. package/dist/nl/kvk.js.map +1 -0
  648. package/dist/nl/mod.d.ts +10 -0
  649. package/dist/nl/mod.js +14 -0
  650. package/dist/nl/mod.js.map +1 -0
  651. package/dist/nl/vat.d.ts +14 -0
  652. package/dist/nl/vat.js +94 -0
  653. package/dist/nl/vat.js.map +1 -0
  654. package/dist/no/fodselsnummer.d.ts +20 -0
  655. package/dist/no/fodselsnummer.js +134 -0
  656. package/dist/no/fodselsnummer.js.map +1 -0
  657. package/dist/no/mod.d.ts +10 -0
  658. package/dist/no/mod.js +14 -0
  659. package/dist/no/mod.js.map +1 -0
  660. package/dist/no/mva.d.ts +14 -0
  661. package/dist/no/mva.js +54 -0
  662. package/dist/no/mva.js.map +1 -0
  663. package/dist/no/orgnr.d.ts +14 -0
  664. package/dist/no/orgnr.js +66 -0
  665. package/dist/no/orgnr.js.map +1 -0
  666. package/dist/nz/ird.d.ts +14 -0
  667. package/dist/nz/ird.js +105 -0
  668. package/dist/nz/ird.js.map +1 -0
  669. package/dist/nz/mod.d.ts +8 -0
  670. package/dist/nz/mod.js +8 -0
  671. package/dist/nz/mod.js.map +1 -0
  672. package/dist/pa/mod.d.ts +8 -0
  673. package/dist/pa/mod.js +8 -0
  674. package/dist/pa/mod.js.map +1 -0
  675. package/dist/pa/ruc.d.ts +23 -0
  676. package/dist/pa/ruc.js +200 -0
  677. package/dist/pa/ruc.js.map +1 -0
  678. package/dist/patterns.d.ts +45 -0
  679. package/dist/patterns.js +123 -0
  680. package/dist/patterns.js.map +1 -0
  681. package/dist/pe/mod.d.ts +8 -0
  682. package/dist/pe/mod.js +8 -0
  683. package/dist/pe/mod.js.map +1 -0
  684. package/dist/pe/ruc.d.ts +19 -0
  685. package/dist/pe/ruc.js +109 -0
  686. package/dist/pe/ruc.js.map +1 -0
  687. package/dist/ph/mod.d.ts +8 -0
  688. package/dist/ph/mod.js +8 -0
  689. package/dist/ph/mod.js.map +1 -0
  690. package/dist/ph/philid.d.ts +13 -0
  691. package/dist/ph/philid.js +60 -0
  692. package/dist/ph/philid.js.map +1 -0
  693. package/dist/pk/cnic.d.ts +13 -0
  694. package/dist/pk/cnic.js +69 -0
  695. package/dist/pk/cnic.js.map +1 -0
  696. package/dist/pk/mod.d.ts +8 -0
  697. package/dist/pk/mod.js +8 -0
  698. package/dist/pk/mod.js.map +1 -0
  699. package/dist/pl/mod.d.ts +10 -0
  700. package/dist/pl/mod.js +14 -0
  701. package/dist/pl/mod.js.map +1 -0
  702. package/dist/pl/nip.d.ts +18 -0
  703. package/dist/pl/nip.js +77 -0
  704. package/dist/pl/nip.js.map +1 -0
  705. package/dist/pl/pesel.d.ts +19 -0
  706. package/dist/pl/pesel.js +109 -0
  707. package/dist/pl/pesel.js.map +1 -0
  708. package/dist/pl/regon.d.ts +14 -0
  709. package/dist/pl/regon.js +85 -0
  710. package/dist/pl/regon.js.map +1 -0
  711. package/dist/pt/cc.d.ts +14 -0
  712. package/dist/pt/cc.js +77 -0
  713. package/dist/pt/cc.js.map +1 -0
  714. package/dist/pt/mod.d.ts +9 -0
  715. package/dist/pt/mod.js +12 -0
  716. package/dist/pt/mod.js.map +1 -0
  717. package/dist/pt/vat.d.ts +14 -0
  718. package/dist/pt/vat.js +73 -0
  719. package/dist/pt/vat.js.map +1 -0
  720. package/dist/ro/cnp.d.ts +19 -0
  721. package/dist/ro/cnp.js +176 -0
  722. package/dist/ro/cnp.js.map +1 -0
  723. package/dist/ro/mod.d.ts +9 -0
  724. package/dist/ro/mod.js +12 -0
  725. package/dist/ro/mod.js.map +1 -0
  726. package/dist/ro/vat.d.ts +14 -0
  727. package/dist/ro/vat.js +76 -0
  728. package/dist/ro/vat.js.map +1 -0
  729. package/dist/rs/mod.d.ts +8 -0
  730. package/dist/rs/mod.js +8 -0
  731. package/dist/rs/mod.js.map +1 -0
  732. package/dist/rs/pib.d.ts +14 -0
  733. package/dist/rs/pib.js +60 -0
  734. package/dist/rs/pib.js.map +1 -0
  735. package/dist/ru/inn.d.ts +14 -0
  736. package/dist/ru/inn.js +103 -0
  737. package/dist/ru/inn.js.map +1 -0
  738. package/dist/ru/mod.d.ts +8 -0
  739. package/dist/ru/mod.js +8 -0
  740. package/dist/ru/mod.js.map +1 -0
  741. package/dist/se/mod.d.ts +10 -0
  742. package/dist/se/mod.js +14 -0
  743. package/dist/se/mod.js.map +1 -0
  744. package/dist/se/orgnr.d.ts +14 -0
  745. package/dist/se/orgnr.js +59 -0
  746. package/dist/se/orgnr.js.map +1 -0
  747. package/dist/se/personnummer.d.ts +23 -0
  748. package/dist/se/personnummer.js +122 -0
  749. package/dist/se/personnummer.js.map +1 -0
  750. package/dist/se/vat.d.ts +14 -0
  751. package/dist/se/vat.js +63 -0
  752. package/dist/se/vat.js.map +1 -0
  753. package/dist/sg/mod.d.ts +8 -0
  754. package/dist/sg/mod.js +8 -0
  755. package/dist/sg/mod.js.map +1 -0
  756. package/dist/sg/uen.d.ts +14 -0
  757. package/dist/sg/uen.js +207 -0
  758. package/dist/sg/uen.js.map +1 -0
  759. package/dist/si/emso.d.ts +19 -0
  760. package/dist/si/emso.js +108 -0
  761. package/dist/si/emso.js.map +1 -0
  762. package/dist/si/mod.d.ts +9 -0
  763. package/dist/si/mod.js +12 -0
  764. package/dist/si/mod.js.map +1 -0
  765. package/dist/si/vat.d.ts +14 -0
  766. package/dist/si/vat.js +74 -0
  767. package/dist/si/vat.js.map +1 -0
  768. package/dist/sk/dic.d.ts +14 -0
  769. package/dist/sk/dic.js +66 -0
  770. package/dist/sk/dic.js.map +1 -0
  771. package/dist/sk/ico.d.ts +10 -0
  772. package/dist/sk/ico.js +30 -0
  773. package/dist/sk/ico.js.map +1 -0
  774. package/dist/sk/mod.d.ts +10 -0
  775. package/dist/sk/mod.js +14 -0
  776. package/dist/sk/mod.js.map +1 -0
  777. package/dist/sk/rc.d.ts +10 -0
  778. package/dist/sk/rc.js +30 -0
  779. package/dist/sk/rc.js.map +1 -0
  780. package/dist/th/mod.d.ts +8 -0
  781. package/dist/th/mod.js +8 -0
  782. package/dist/th/mod.js.map +1 -0
  783. package/dist/th/tin.d.ts +14 -0
  784. package/dist/th/tin.js +63 -0
  785. package/dist/th/tin.js.map +1 -0
  786. package/dist/tr/mod.d.ts +9 -0
  787. package/dist/tr/mod.js +12 -0
  788. package/dist/tr/mod.js.map +1 -0
  789. package/dist/tr/tckimlik.d.ts +15 -0
  790. package/dist/tr/tckimlik.js +79 -0
  791. package/dist/tr/tckimlik.js.map +1 -0
  792. package/dist/tr/vkn.d.ts +15 -0
  793. package/dist/tr/vkn.js +79 -0
  794. package/dist/tr/vkn.js.map +1 -0
  795. package/dist/tw/mod.d.ts +8 -0
  796. package/dist/tw/mod.js +8 -0
  797. package/dist/tw/mod.js.map +1 -0
  798. package/dist/tw/ubn.d.ts +14 -0
  799. package/dist/tw/ubn.js +86 -0
  800. package/dist/tw/ubn.js.map +1 -0
  801. package/dist/types.d.ts +95 -0
  802. package/dist/types.js +1 -0
  803. package/dist/ua/edrpou.d.ts +14 -0
  804. package/dist/ua/edrpou.js +103 -0
  805. package/dist/ua/edrpou.js.map +1 -0
  806. package/dist/ua/mod.d.ts +8 -0
  807. package/dist/ua/mod.js +8 -0
  808. package/dist/ua/mod.js.map +1 -0
  809. package/dist/us/ein.d.ts +13 -0
  810. package/dist/us/ein.js +234 -0
  811. package/dist/us/ein.js.map +1 -0
  812. package/dist/us/itin.d.ts +15 -0
  813. package/dist/us/itin.js +69 -0
  814. package/dist/us/itin.js.map +1 -0
  815. package/dist/us/mod.d.ts +11 -0
  816. package/dist/us/mod.js +16 -0
  817. package/dist/us/mod.js.map +1 -0
  818. package/dist/us/rtn.d.ts +14 -0
  819. package/dist/us/rtn.js +91 -0
  820. package/dist/us/rtn.js.map +1 -0
  821. package/dist/us/ssn.d.ts +13 -0
  822. package/dist/us/ssn.js +77 -0
  823. package/dist/us/ssn.js.map +1 -0
  824. package/dist/uy/mod.d.ts +8 -0
  825. package/dist/uy/mod.js +8 -0
  826. package/dist/uy/mod.js.map +1 -0
  827. package/dist/uy/rut.d.ts +18 -0
  828. package/dist/uy/rut.js +105 -0
  829. package/dist/uy/rut.js.map +1 -0
  830. package/dist/ve/mod.d.ts +8 -0
  831. package/dist/ve/mod.js +8 -0
  832. package/dist/ve/mod.js.map +1 -0
  833. package/dist/ve/rif.d.ts +18 -0
  834. package/dist/ve/rif.js +109 -0
  835. package/dist/ve/rif.js.map +1 -0
  836. package/dist/vn/mod.d.ts +8 -0
  837. package/dist/vn/mod.js +8 -0
  838. package/dist/vn/mod.js.map +1 -0
  839. package/dist/vn/mst.d.ts +14 -0
  840. package/dist/vn/mst.js +82 -0
  841. package/dist/vn/mst.js.map +1 -0
  842. package/dist/za/idnr.d.ts +19 -0
  843. package/dist/za/idnr.js +110 -0
  844. package/dist/za/idnr.js.map +1 -0
  845. package/dist/za/mod.d.ts +8 -0
  846. package/dist/za/mod.js +8 -0
  847. package/dist/za/mod.js.map +1 -0
  848. package/package.json +936 -0
  849. package/src/_checksums/luhn.ts +24 -0
  850. package/src/_checksums/mod1110.ts +24 -0
  851. package/src/_checksums/mod112.ts +40 -0
  852. package/src/_checksums/mod97.ts +28 -0
  853. package/src/_checksums/verhoeff.ts +71 -0
  854. package/src/_checksums/weighted-sum.ts +23 -0
  855. package/src/_util/arabic.ts +48 -0
  856. package/src/_util/clean.ts +86 -0
  857. package/src/_util/date.ts +23 -0
  858. package/src/_util/generate.ts +24 -0
  859. package/src/_util/result.ts +10 -0
  860. package/src/_util/strings.ts +32 -0
  861. package/src/ad/mod.ts +1 -0
  862. package/src/ad/nrt.ts +111 -0
  863. package/src/ae/eid.ts +106 -0
  864. package/src/ae/mod.ts +1 -0
  865. package/src/ai/mod.ts +1 -0
  866. package/src/ai/tin.ts +98 -0
  867. package/src/al/mod.ts +1 -0
  868. package/src/al/nipt.ts +78 -0
  869. package/src/am/mod.ts +1 -0
  870. package/src/am/tin.ts +73 -0
  871. package/src/ar/cbu.ts +106 -0
  872. package/src/ar/cuit.ts +137 -0
  873. package/src/ar/dni.ts +79 -0
  874. package/src/ar/mod.ts +3 -0
  875. package/src/at/businessid.ts +74 -0
  876. package/src/at/mod.ts +4 -0
  877. package/src/at/tin.ts +90 -0
  878. package/src/at/uid.ts +92 -0
  879. package/src/at/vnr.ts +111 -0
  880. package/src/au/abn.ts +85 -0
  881. package/src/au/acn.ts +86 -0
  882. package/src/au/mod.ts +3 -0
  883. package/src/au/tfn.ts +85 -0
  884. package/src/az/mod.ts +1 -0
  885. package/src/az/voen.ts +125 -0
  886. package/src/ba/jmbg.ts +128 -0
  887. package/src/ba/mod.ts +1 -0
  888. package/src/bd/mod.ts +1 -0
  889. package/src/bd/nid.ts +139 -0
  890. package/src/be/bis.ts +105 -0
  891. package/src/be/mod.ts +3 -0
  892. package/src/be/nn.ts +125 -0
  893. package/src/be/vat.ts +107 -0
  894. package/src/bg/egn.ts +155 -0
  895. package/src/bg/mod.ts +3 -0
  896. package/src/bg/pnf.ts +86 -0
  897. package/src/bg/vat.ts +155 -0
  898. package/src/bh/cpr.ts +81 -0
  899. package/src/bh/mod.ts +1 -0
  900. package/src/bic.ts +99 -0
  901. package/src/br/cnpj.ts +152 -0
  902. package/src/br/cpf.ts +114 -0
  903. package/src/br/mod.ts +2 -0
  904. package/src/by/mod.ts +1 -0
  905. package/src/by/unp.ts +153 -0
  906. package/src/bz/mod.ts +1 -0
  907. package/src/bz/tin.ts +107 -0
  908. package/src/ca/bn.ts +107 -0
  909. package/src/ca/mod.ts +2 -0
  910. package/src/ca/sin.ts +91 -0
  911. package/src/ch/mod.ts +3 -0
  912. package/src/ch/ssn.ts +95 -0
  913. package/src/ch/uid.ts +108 -0
  914. package/src/ch/vat.ts +85 -0
  915. package/src/cl/mod.ts +1 -0
  916. package/src/cl/rut.ts +118 -0
  917. package/src/cn/mod.ts +2 -0
  918. package/src/cn/ric.ts +180 -0
  919. package/src/cn/uscc.ts +111 -0
  920. package/src/co/mod.ts +1 -0
  921. package/src/co/nit.ts +108 -0
  922. package/src/cr/cpf.ts +111 -0
  923. package/src/cr/mod.ts +1 -0
  924. package/src/creditcard.ts +190 -0
  925. package/src/cu/mod.ts +1 -0
  926. package/src/cu/ni.ts +125 -0
  927. package/src/cy/mod.ts +1 -0
  928. package/src/cy/vat.ts +130 -0
  929. package/src/cz/dic.ts +135 -0
  930. package/src/cz/ico.ts +82 -0
  931. package/src/cz/mod.ts +3 -0
  932. package/src/cz/rc.ts +190 -0
  933. package/src/de/handelsreg.ts +107 -0
  934. package/src/de/idnr.ts +140 -0
  935. package/src/de/mod.ts +5 -0
  936. package/src/de/stnr.ts +214 -0
  937. package/src/de/svnr.ts +162 -0
  938. package/src/de/vat.ts +98 -0
  939. package/src/dk/cpr.ts +122 -0
  940. package/src/dk/cvr.ts +87 -0
  941. package/src/dk/mod.ts +3 -0
  942. package/src/dk/vat.ts +91 -0
  943. package/src/do/mod.ts +1 -0
  944. package/src/do/rnc.ts +126 -0
  945. package/src/ec/mod.ts +1 -0
  946. package/src/ec/ruc.ts +195 -0
  947. package/src/ee/ik.ts +156 -0
  948. package/src/ee/mod.ts +3 -0
  949. package/src/ee/registrikood.ts +81 -0
  950. package/src/ee/vat.ts +85 -0
  951. package/src/eg/mod.ts +1 -0
  952. package/src/eg/tn.ts +103 -0
  953. package/src/es/cif.ts +105 -0
  954. package/src/es/dni.ts +90 -0
  955. package/src/es/mod.ts +5 -0
  956. package/src/es/nie.ts +102 -0
  957. package/src/es/nss.ts +109 -0
  958. package/src/es/vat.ts +178 -0
  959. package/src/eu/mod.ts +1 -0
  960. package/src/eu/vat.ts +171 -0
  961. package/src/fi/hetu.ts +182 -0
  962. package/src/fi/mod.ts +3 -0
  963. package/src/fi/vat.ts +82 -0
  964. package/src/fi/ytunnus.ts +83 -0
  965. package/src/fr/mod.ts +5 -0
  966. package/src/fr/nif.ts +93 -0
  967. package/src/fr/nir.ts +195 -0
  968. package/src/fr/siren.ts +79 -0
  969. package/src/fr/siret.ts +122 -0
  970. package/src/fr/tva.ts +146 -0
  971. package/src/gb/mod.ts +4 -0
  972. package/src/gb/nino.ts +153 -0
  973. package/src/gb/sedol.ts +137 -0
  974. package/src/gb/utr.ts +81 -0
  975. package/src/gb/vat.ts +158 -0
  976. package/src/ge/mod.ts +1 -0
  977. package/src/ge/pin.ts +71 -0
  978. package/src/gh/mod.ts +1 -0
  979. package/src/gh/tin.ts +100 -0
  980. package/src/gr/amka.ts +104 -0
  981. package/src/gr/mod.ts +2 -0
  982. package/src/gr/vat.ts +96 -0
  983. package/src/gt/mod.ts +1 -0
  984. package/src/gt/nit.ts +116 -0
  985. package/src/hk/hkid.ts +131 -0
  986. package/src/hk/mod.ts +1 -0
  987. package/src/hr/mod.ts +1 -0
  988. package/src/hr/vat.ts +79 -0
  989. package/src/hu/mod.ts +1 -0
  990. package/src/hu/vat.ts +82 -0
  991. package/src/iban.ts +340 -0
  992. package/src/id/mod.ts +1 -0
  993. package/src/id/npwp.ts +187 -0
  994. package/src/ie/mod.ts +2 -0
  995. package/src/ie/pps.ts +105 -0
  996. package/src/ie/vat.ts +138 -0
  997. package/src/il/idnr.ts +87 -0
  998. package/src/il/mod.ts +1 -0
  999. package/src/in/aadhaar.ts +96 -0
  1000. package/src/in/gstin.ts +169 -0
  1001. package/src/in/mod.ts +3 -0
  1002. package/src/in/pan.ts +88 -0
  1003. package/src/index.ts +116 -0
  1004. package/src/iq/mod.ts +1 -0
  1005. package/src/iq/nid.ts +71 -0
  1006. package/src/ir/mod.ts +1 -0
  1007. package/src/ir/nid.ts +120 -0
  1008. package/src/is/kennitala.ts +125 -0
  1009. package/src/is/mod.ts +2 -0
  1010. package/src/is/vsk.ts +63 -0
  1011. package/src/isin.ts +114 -0
  1012. package/src/it/codicefiscale.ts +290 -0
  1013. package/src/it/iva.ts +115 -0
  1014. package/src/it/mod.ts +2 -0
  1015. package/src/jp/cn.ts +91 -0
  1016. package/src/jp/mod.ts +2 -0
  1017. package/src/jp/mynumber.ts +103 -0
  1018. package/src/kr/brn.ts +101 -0
  1019. package/src/kr/mod.ts +2 -0
  1020. package/src/kr/rrn.ts +170 -0
  1021. package/src/kw/civil.ts +144 -0
  1022. package/src/kw/mod.ts +1 -0
  1023. package/src/kz/iin.ts +183 -0
  1024. package/src/kz/mod.ts +1 -0
  1025. package/src/lei.ts +98 -0
  1026. package/src/li/mod.ts +1 -0
  1027. package/src/li/peid.ts +66 -0
  1028. package/src/lk/mod.ts +1 -0
  1029. package/src/lk/nic.ts +210 -0
  1030. package/src/lt/asmens.ts +120 -0
  1031. package/src/lt/mod.ts +2 -0
  1032. package/src/lt/vat.ts +109 -0
  1033. package/src/lu/mod.ts +1 -0
  1034. package/src/lu/vat.ts +80 -0
  1035. package/src/luhn.ts +72 -0
  1036. package/src/lv/mod.ts +1 -0
  1037. package/src/lv/vat.ts +139 -0
  1038. package/src/ma/ice.ts +79 -0
  1039. package/src/ma/mod.ts +1 -0
  1040. package/src/mc/mod.ts +1 -0
  1041. package/src/mc/tva.ts +74 -0
  1042. package/src/md/idno.ts +86 -0
  1043. package/src/md/mod.ts +1 -0
  1044. package/src/me/mod.ts +1 -0
  1045. package/src/me/pib.ts +79 -0
  1046. package/src/mk/edb.ts +91 -0
  1047. package/src/mk/mod.ts +1 -0
  1048. package/src/mt/mod.ts +1 -0
  1049. package/src/mt/vat.ts +88 -0
  1050. package/src/mu/brn.ts +102 -0
  1051. package/src/mu/mod.ts +1 -0
  1052. package/src/mx/clabe.ts +111 -0
  1053. package/src/mx/curp.ts +210 -0
  1054. package/src/mx/mod.ts +3 -0
  1055. package/src/mx/rfc.ts +144 -0
  1056. package/src/my/mod.ts +1 -0
  1057. package/src/my/nric.ts +235 -0
  1058. package/src/ng/mod.ts +1 -0
  1059. package/src/ng/nin.ts +72 -0
  1060. package/src/ni/mod.ts +1 -0
  1061. package/src/ni/ruc.ts +176 -0
  1062. package/src/nl/bsn.ts +87 -0
  1063. package/src/nl/kvk.ts +59 -0
  1064. package/src/nl/mod.ts +3 -0
  1065. package/src/nl/vat.ts +146 -0
  1066. package/src/no/fodselsnummer.ts +192 -0
  1067. package/src/no/mod.ts +3 -0
  1068. package/src/no/mva.ts +73 -0
  1069. package/src/no/orgnr.ts +79 -0
  1070. package/src/nz/ird.ts +128 -0
  1071. package/src/nz/mod.ts +1 -0
  1072. package/src/pa/mod.ts +1 -0
  1073. package/src/pa/ruc.ts +359 -0
  1074. package/src/patterns.ts +252 -0
  1075. package/src/pe/mod.ts +1 -0
  1076. package/src/pe/ruc.ts +121 -0
  1077. package/src/ph/mod.ts +1 -0
  1078. package/src/ph/philid.ts +76 -0
  1079. package/src/pk/cnic.ts +103 -0
  1080. package/src/pk/mod.ts +1 -0
  1081. package/src/pl/mod.ts +3 -0
  1082. package/src/pl/nip.ts +96 -0
  1083. package/src/pl/pesel.ts +153 -0
  1084. package/src/pl/regon.ts +98 -0
  1085. package/src/pt/cc.ts +106 -0
  1086. package/src/pt/mod.ts +2 -0
  1087. package/src/pt/vat.ts +93 -0
  1088. package/src/ro/cnp.ts +171 -0
  1089. package/src/ro/mod.ts +2 -0
  1090. package/src/ro/vat.ts +94 -0
  1091. package/src/rs/mod.ts +1 -0
  1092. package/src/rs/pib.ts +83 -0
  1093. package/src/ru/inn.ts +109 -0
  1094. package/src/ru/mod.ts +1 -0
  1095. package/src/se/mod.ts +3 -0
  1096. package/src/se/orgnr.ts +81 -0
  1097. package/src/se/personnummer.ts +180 -0
  1098. package/src/se/vat.ts +92 -0
  1099. package/src/sg/mod.ts +1 -0
  1100. package/src/sg/uen.ts +267 -0
  1101. package/src/si/emso.ts +152 -0
  1102. package/src/si/mod.ts +2 -0
  1103. package/src/si/vat.ts +108 -0
  1104. package/src/sk/dic.ts +106 -0
  1105. package/src/sk/ico.ts +39 -0
  1106. package/src/sk/mod.ts +3 -0
  1107. package/src/sk/rc.ts +31 -0
  1108. package/src/th/mod.ts +1 -0
  1109. package/src/th/tin.ts +102 -0
  1110. package/src/tr/mod.ts +2 -0
  1111. package/src/tr/tckimlik.ts +111 -0
  1112. package/src/tr/vkn.ts +97 -0
  1113. package/src/tw/mod.ts +1 -0
  1114. package/src/tw/ubn.ts +108 -0
  1115. package/src/types.ts +200 -0
  1116. package/src/ua/edrpou.ts +103 -0
  1117. package/src/ua/mod.ts +1 -0
  1118. package/src/us/ein.ts +257 -0
  1119. package/src/us/itin.ts +126 -0
  1120. package/src/us/mod.ts +4 -0
  1121. package/src/us/rtn.ts +126 -0
  1122. package/src/us/ssn.ts +117 -0
  1123. package/src/uy/mod.ts +1 -0
  1124. package/src/uy/rut.ts +146 -0
  1125. package/src/ve/mod.ts +1 -0
  1126. package/src/ve/rif.ts +140 -0
  1127. package/src/vn/mod.ts +1 -0
  1128. package/src/vn/mst.ts +128 -0
  1129. package/src/za/idnr.ts +157 -0
  1130. package/src/za/mod.ts +1 -0
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import ruc from "./ruc.js";
3
+
4
+ //#region src/ni/mod.d.ts
5
+
6
+ //#endregion
7
+ export { mod_d_exports, ruc };
8
+ //# sourceMappingURL=mod.d.ts.map
package/dist/ni/mod.js ADDED
@@ -0,0 +1,8 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import ruc from "./ruc.js";
3
+ //#region src/ni/mod.ts
4
+ var ni_exports = /* @__PURE__ */ __exportAll({ ruc: () => ruc });
5
+ //#endregion
6
+ export { ni_exports, ruc };
7
+
8
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/ni/mod.ts"],"sourcesContent":["export { default as ruc } from \"./ruc\";\n"],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/ni/ruc.d.ts
4
+
5
+ /**
6
+ * Compact: strip spaces, hyphens, and uppercase.
7
+ */
8
+ declare const compact: (value: string) => string;
9
+ declare const validate: (value: string) => ValidateResult;
10
+ /**
11
+ * Format: insert hyphens as MMM-DDMMYY-NNNNL
12
+ * for natural persons. Legal entities are returned
13
+ * in compact form (JNNNNNNNNNNNNN); no documented
14
+ * segmentation exists for the J-prefix format.
15
+ */
16
+ declare const format: (value: string) => string;
17
+ /** Generate a random valid Nicaraguan RUC (legal entity). */
18
+ declare const generate: () => string;
19
+ /** Nicaragua tax identification number. */
20
+ declare const ruc: Validator;
21
+ //#endregion
22
+ export { compact, ruc as default, format, generate, validate };
23
+ //# sourceMappingURL=ruc.d.ts.map
package/dist/ni/ruc.js ADDED
@@ -0,0 +1,113 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { isdigits } from "../_util/strings.js";
5
+ //#region src/ni/ruc.ts
6
+ /**
7
+ * RUC (Registro Único de Contribuyente, Nicaragua
8
+ * tax number).
9
+ *
10
+ * For natural persons the RUC is the cédula de
11
+ * identidad: 14 characters structured as
12
+ * MMM-DDMMYY-NNNNL where:
13
+ * - MMM = municipality code (001–999)
14
+ * - DDMMYY = birth date
15
+ * - NNNN = sequential number
16
+ * - L = check letter (mod 23, ISO 7064)
17
+ *
18
+ * For legal entities (Personas Jurídicas) the RUC
19
+ * starts with "J" followed by 13 digits. No public
20
+ * check-digit algorithm is documented for the "J"
21
+ * format, so validation is format-only.
22
+ *
23
+ * The check letter for natural persons uses modulo 23
24
+ * with a 23-letter alphabet that excludes I, O, and Z
25
+ * to avoid confusion with digits.
26
+ *
27
+ * @see https://www.dgi.gob.ni/
28
+ */
29
+ /**
30
+ * Check letter alphabet (mod 23). Excludes I, O, Z
31
+ * to prevent transcription errors.
32
+ */
33
+ const CHECK_ALPHABET = "ABCDEFGHJKLMNPQRSTUVWXY";
34
+ /**
35
+ * Compact: strip spaces, hyphens, and uppercase.
36
+ */
37
+ const compact = (value) => clean(value, " -").trim().toUpperCase();
38
+ /**
39
+ * Validate a birth date encoded as DDMMYY.
40
+ * Returns true if the date components are plausible.
41
+ */
42
+ const isValidDate = (ddmmyy) => {
43
+ const day = Number(ddmmyy.slice(0, 2));
44
+ const month = Number(ddmmyy.slice(2, 4));
45
+ if (month < 1 || month > 12) return false;
46
+ if (day < 1 || day > 31) return false;
47
+ return true;
48
+ };
49
+ /**
50
+ * Calculate the check letter for a 13-digit body
51
+ * using modulo 23.
52
+ */
53
+ const calcCheckLetter = (body) => {
54
+ let n = 0n;
55
+ for (const ch of body) n = n * 10n + BigInt(ch);
56
+ return CHECK_ALPHABET[Number(n % 23n)];
57
+ };
58
+ const validate = (value) => {
59
+ const v = compact(value);
60
+ if (v.length !== 14) return err("INVALID_LENGTH", "Nicaragua RUC must be 14 characters");
61
+ if (v[0] === "J") {
62
+ if (!isdigits(v.slice(1))) return err("INVALID_FORMAT", "Nicaragua legal entity RUC must be J followed by 13 digits");
63
+ return {
64
+ valid: true,
65
+ compact: v
66
+ };
67
+ }
68
+ const body = v.slice(0, 13);
69
+ const check = v[13];
70
+ if (!isdigits(body)) return err("INVALID_FORMAT", "Nicaragua RUC body must contain only digits");
71
+ if (!CHECK_ALPHABET.includes(check)) return err("INVALID_FORMAT", "Nicaragua RUC check letter is invalid");
72
+ if (!isValidDate(body.slice(3, 9))) return err("INVALID_COMPONENT", "Nicaragua RUC contains an invalid birth date");
73
+ if (check !== calcCheckLetter(body)) return err("INVALID_CHECKSUM", "Nicaragua RUC check letter does not match");
74
+ return {
75
+ valid: true,
76
+ compact: v
77
+ };
78
+ };
79
+ /**
80
+ * Format: insert hyphens as MMM-DDMMYY-NNNNL
81
+ * for natural persons. Legal entities are returned
82
+ * in compact form (JNNNNNNNNNNNNN); no documented
83
+ * segmentation exists for the J-prefix format.
84
+ */
85
+ const format = (value) => {
86
+ const v = compact(value);
87
+ if (v[0] === "J") return `J-${v.slice(1)}`;
88
+ return `${v.slice(0, 3)}-${v.slice(3, 9)}-${v.slice(9)}`;
89
+ };
90
+ /** Generate a random valid Nicaraguan RUC (legal entity). */
91
+ const generate = () => "J" + randomDigits(13);
92
+ /** Nicaragua tax identification number. */
93
+ const ruc = {
94
+ name: "Tax Identification Number",
95
+ localName: "Registro Único de Contribuyente",
96
+ abbreviation: "RUC",
97
+ aliases: ["RUC"],
98
+ candidatePattern: "[JKME]\\d{13}",
99
+ country: "NI",
100
+ entityType: "any",
101
+ description: "Tax identifier issued by Nicaragua's DGI",
102
+ sourceUrl: "https://www.dgi.gob.ni/",
103
+ lengths: [14],
104
+ examples: ["6071904680001F", "2811505850012D"],
105
+ compact,
106
+ format,
107
+ validate,
108
+ generate
109
+ };
110
+ //#endregion
111
+ export { compact, ruc as default, format, generate, validate };
112
+
113
+ //# sourceMappingURL=ruc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruc.js","names":[],"sources":["../../src/ni/ruc.ts"],"sourcesContent":["/**\n * RUC (Registro Único de Contribuyente, Nicaragua\n * tax number).\n *\n * For natural persons the RUC is the cédula de\n * identidad: 14 characters structured as\n * MMM-DDMMYY-NNNNL where:\n * - MMM = municipality code (001–999)\n * - DDMMYY = birth date\n * - NNNN = sequential number\n * - L = check letter (mod 23, ISO 7064)\n *\n * For legal entities (Personas Jurídicas) the RUC\n * starts with \"J\" followed by 13 digits. No public\n * check-digit algorithm is documented for the \"J\"\n * format, so validation is format-only.\n *\n * The check letter for natural persons uses modulo 23\n * with a 23-letter alphabet that excludes I, O, and Z\n * to avoid confusion with digits.\n *\n * @see https://www.dgi.gob.ni/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\n/**\n * Check letter alphabet (mod 23). Excludes I, O, Z\n * to prevent transcription errors.\n */\nconst CHECK_ALPHABET = \"ABCDEFGHJKLMNPQRSTUVWXY\";\n\n/**\n * Compact: strip spaces, hyphens, and uppercase.\n */\nconst compact = (value: string): string =>\n clean(value, \" -\").trim().toUpperCase();\n\n/**\n * Validate a birth date encoded as DDMMYY.\n * Returns true if the date components are plausible.\n */\nconst isValidDate = (ddmmyy: string): boolean => {\n const day = Number(ddmmyy.slice(0, 2));\n const month = Number(ddmmyy.slice(2, 4));\n\n if (month < 1 || month > 12) return false;\n if (day < 1 || day > 31) return false;\n\n return true;\n};\n\n/**\n * Calculate the check letter for a 13-digit body\n * using modulo 23.\n */\nconst calcCheckLetter = (body: string): string => {\n let n = 0n;\n for (const ch of body) {\n n = n * 10n + BigInt(ch);\n }\n const idx = Number(n % 23n);\n // SAFETY: idx is always 0–22 (mod 23), and\n // CHECK_ALPHABET has exactly 23 characters.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return CHECK_ALPHABET[idx]!;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n\n if (v.length !== 14) {\n return err(\n \"INVALID_LENGTH\",\n \"Nicaragua RUC must be 14 characters\",\n );\n }\n\n // Legal entity: starts with J + 13 digits\n if (v[0] === \"J\") {\n if (!isdigits(v.slice(1))) {\n return err(\n \"INVALID_FORMAT\",\n \"Nicaragua legal entity RUC must be \" +\n \"J followed by 13 digits\",\n );\n }\n return { valid: true, compact: v };\n }\n\n // Natural person: 13 digits + 1 letter\n const body = v.slice(0, 13);\n // SAFETY: length is validated as exactly 14 above.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const check = v[13]!;\n\n if (!isdigits(body)) {\n return err(\n \"INVALID_FORMAT\",\n \"Nicaragua RUC body must contain only digits\",\n );\n }\n\n if (!CHECK_ALPHABET.includes(check)) {\n return err(\n \"INVALID_FORMAT\",\n \"Nicaragua RUC check letter is invalid\",\n );\n }\n\n // Validate date portion (positions 3–8: DDMMYY)\n const datePart = body.slice(3, 9);\n if (!isValidDate(datePart)) {\n return err(\n \"INVALID_COMPONENT\",\n \"Nicaragua RUC contains an invalid \" + \"birth date\",\n );\n }\n\n // Verify check letter\n const expected = calcCheckLetter(body);\n if (check !== expected) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Nicaragua RUC check letter does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\n/**\n * Format: insert hyphens as MMM-DDMMYY-NNNNL\n * for natural persons. Legal entities are returned\n * in compact form (JNNNNNNNNNNNNN); no documented\n * segmentation exists for the J-prefix format.\n */\nconst format = (value: string): string => {\n const v = compact(value);\n if (v[0] === \"J\") {\n return `J-${v.slice(1)}`;\n }\n return (\n `${v.slice(0, 3)}-${v.slice(3, 9)}` + `-${v.slice(9)}`\n );\n};\n\n/** Generate a random valid Nicaraguan RUC (legal entity). */\nconst generate = (): string => \"J\" + randomDigits(13);\n\n/** Nicaragua tax identification number. */\nconst ruc: Validator = {\n name: \"Tax Identification Number\",\n localName: \"Registro Único de Contribuyente\",\n abbreviation: \"RUC\",\n aliases: [\"RUC\"] as const,\n candidatePattern: \"[JKME]\\\\d{13}\",\n country: \"NI\",\n entityType: \"any\",\n description: \"Tax identifier issued by Nicaragua's DGI\",\n sourceUrl: \"https://www.dgi.gob.ni/\",\n lengths: [14] as const,\n examples: [\"6071904680001F\", \"2811505850012D\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default ruc;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAM,iBAAiB;;;;AAKvB,MAAM,WAAW,UACf,MAAM,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa;;;;;AAMzC,MAAM,eAAe,WAA4B;CAC/C,MAAM,MAAM,OAAO,OAAO,MAAM,GAAG,EAAE,CAAC;CACtC,MAAM,QAAQ,OAAO,OAAO,MAAM,GAAG,EAAE,CAAC;AAExC,KAAI,QAAQ,KAAK,QAAQ,GAAI,QAAO;AACpC,KAAI,MAAM,KAAK,MAAM,GAAI,QAAO;AAEhC,QAAO;;;;;;AAOT,MAAM,mBAAmB,SAAyB;CAChD,IAAI,IAAI;AACR,MAAK,MAAM,MAAM,KACf,KAAI,IAAI,MAAM,OAAO,GAAG;AAM1B,QAAO,eAJK,OAAO,IAAI,IAAI;;AAO7B,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AAExB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,sCACD;AAIH,KAAI,EAAE,OAAO,KAAK;AAChB,MAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CACvB,QAAO,IACL,kBACA,6DAED;AAEH,SAAO;GAAE,OAAO;GAAM,SAAS;GAAG;;CAIpC,MAAM,OAAO,EAAE,MAAM,GAAG,GAAG;CAG3B,MAAM,QAAQ,EAAE;AAEhB,KAAI,CAAC,SAAS,KAAK,CACjB,QAAO,IACL,kBACA,8CACD;AAGH,KAAI,CAAC,eAAe,SAAS,MAAM,CACjC,QAAO,IACL,kBACA,wCACD;AAKH,KAAI,CAAC,YADY,KAAK,MAAM,GAAG,EAAE,CACP,CACxB,QAAO,IACL,qBACA,+CACD;AAKH,KAAI,UADa,gBAAgB,KAAK,CAEpC,QAAO,IACL,oBACA,4CACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;;;;;;;AASpC,MAAM,UAAU,UAA0B;CACxC,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,OAAO,IACX,QAAO,KAAK,EAAE,MAAM,EAAE;AAExB,QACE,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAA,GAAS,EAAE,MAAM,EAAE;;;AAKxD,MAAM,iBAAyB,MAAM,aAAa,GAAG;;AAGrD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,MAAM;CAChB,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,aAAa;CACb,WAAW;CACX,SAAS,CAAC,GAAG;CACb,UAAU,CAAC,kBAAkB,iBAAiB;CAC9C;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,14 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/nl/bsn.d.ts
4
+
5
+ declare const compact: (value: string) => string;
6
+ declare const validate: (value: string) => ValidateResult;
7
+ declare const format: (value: string) => string;
8
+ /** Generate a random valid Dutch BSN. */
9
+ declare const generate: () => string;
10
+ /** Dutch Citizen Service Number. */
11
+ declare const bsn: Validator;
12
+ //#endregion
13
+ export { compact, bsn as default, format, generate, validate };
14
+ //# sourceMappingURL=bsn.d.ts.map
package/dist/nl/bsn.js ADDED
@@ -0,0 +1,70 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { isdigits } from "../_util/strings.js";
5
+ import { weightedSum } from "../_checksums/weighted-sum.js";
6
+ //#region src/nl/bsn.ts
7
+ /**
8
+ * BSN (Burgerservicenummer).
9
+ *
10
+ * Dutch citizen service number. 9 digits (zero-padded)
11
+ * with a weighted checksum where the last digit has
12
+ * weight -1.
13
+ *
14
+ * @see https://www.government.nl/topics/personal-data/citizen-service-number-bsn
15
+ */
16
+ const WEIGHTS = [
17
+ 9,
18
+ 8,
19
+ 7,
20
+ 6,
21
+ 5,
22
+ 4,
23
+ 3,
24
+ 2,
25
+ -1
26
+ ];
27
+ const compact = (value) => clean(value, " -.").padStart(9, "0");
28
+ const validate = (value) => {
29
+ const v = compact(value);
30
+ if (v.length !== 9) return err("INVALID_LENGTH", "BSN must be exactly 9 digits");
31
+ if (!isdigits(v)) return err("INVALID_FORMAT", "BSN must contain only digits");
32
+ if (Number(v) === 0) return err("INVALID_FORMAT", "BSN cannot be all zeros");
33
+ if (weightedSum(v, WEIGHTS, 11) !== 0) return err("INVALID_CHECKSUM", "BSN check does not match");
34
+ return {
35
+ valid: true,
36
+ compact: v
37
+ };
38
+ };
39
+ const format = (value) => compact(value);
40
+ /** Generate a random valid Dutch BSN. */
41
+ const generate = () => {
42
+ for (;;) {
43
+ const c = randomDigits(9);
44
+ if (validate(c).valid) return c;
45
+ }
46
+ };
47
+ /** Dutch Citizen Service Number. */
48
+ const bsn = {
49
+ name: "Dutch Citizen Service Number",
50
+ localName: "Burgerservicenummer",
51
+ abbreviation: "BSN",
52
+ aliases: [
53
+ "burgerservicenummer",
54
+ "BSN",
55
+ "sofinummer"
56
+ ],
57
+ candidatePattern: "\\d{9}",
58
+ country: "NL",
59
+ entityType: "person",
60
+ sourceUrl: "https://www.government.nl/topics/personal-data/citizen-service-number-bsn",
61
+ examples: ["111222333"],
62
+ compact,
63
+ format,
64
+ validate,
65
+ generate
66
+ };
67
+ //#endregion
68
+ export { compact, bsn as default, format, generate, validate };
69
+
70
+ //# sourceMappingURL=bsn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bsn.js","names":[],"sources":["../../src/nl/bsn.ts"],"sourcesContent":["/**\n * BSN (Burgerservicenummer).\n *\n * Dutch citizen service number. 9 digits (zero-padded)\n * with a weighted checksum where the last digit has\n * weight -1.\n *\n * @see https://www.government.nl/topics/personal-data/citizen-service-number-bsn\n */\n\nimport { weightedSum } from \"#checksums/weighted-sum\";\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst WEIGHTS = [9, 8, 7, 6, 5, 4, 3, 2, -1] as const;\n\nconst compact = (value: string): string =>\n clean(value, \" -.\").padStart(9, \"0\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 9) {\n return err(\n \"INVALID_LENGTH\",\n \"BSN must be exactly 9 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"BSN must contain only digits\",\n );\n }\n\n if (Number(v) === 0) {\n return err(\"INVALID_FORMAT\", \"BSN cannot be all zeros\");\n }\n\n const sum = weightedSum(v, WEIGHTS, 11);\n if (sum !== 0) {\n return err(\n \"INVALID_CHECKSUM\",\n \"BSN check does not match\",\n );\n }\n\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Generate a random valid Dutch BSN. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9);\n if (validate(c).valid) return c;\n }\n};\n\n/** Dutch Citizen Service Number. */\nconst bsn: Validator = {\n name: \"Dutch Citizen Service Number\",\n localName: \"Burgerservicenummer\",\n abbreviation: \"BSN\",\n aliases: [\n \"burgerservicenummer\",\n \"BSN\",\n \"sofinummer\",\n ] as const,\n candidatePattern: \"\\\\d{9}\",\n country: \"NL\",\n entityType: \"person\",\n sourceUrl:\n \"https://www.government.nl/topics/personal-data/citizen-service-number-bsn\",\n examples: [\"111222333\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default bsn;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAE5C,MAAM,WAAW,UACf,MAAM,OAAO,MAAM,CAAC,SAAS,GAAG,IAAI;AAEtC,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,+BACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,+BACD;AAGH,KAAI,OAAO,EAAE,KAAK,EAChB,QAAO,IAAI,kBAAkB,0BAA0B;AAIzD,KADY,YAAY,GAAG,SAAS,GAAG,KAC3B,EACV,QAAO,IACL,oBACA,2BACD;AAGH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,IAAI,aAAa,EAAE;AACzB,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS;EACP;EACA;EACA;EACD;CACD,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WACE;CACF,UAAU,CAAC,YAAY;CACvB;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,13 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/nl/kvk.d.ts
4
+ /** Generate a random valid Dutch KvK number. */
5
+ declare const generate: () => string;
6
+ declare const compact: (value: string) => string;
7
+ declare const validate: (value: string) => ValidateResult;
8
+ declare const format: (value: string) => string;
9
+ /** Dutch Chamber of Commerce Number. */
10
+ declare const kvk: Validator;
11
+ //#endregion
12
+ export { compact, kvk as default, format, generate, validate };
13
+ //# sourceMappingURL=kvk.d.ts.map
package/dist/nl/kvk.js ADDED
@@ -0,0 +1,45 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { isdigits } from "../_util/strings.js";
5
+ //#region src/nl/kvk.ts
6
+ /**
7
+ * KvK-nummer (Dutch Chamber of Commerce number).
8
+ *
9
+ * 8 digits. Format-only validation; no checksum.
10
+ *
11
+ * @see https://www.kvk.nl/
12
+ */
13
+ /** Generate a random valid Dutch KvK number. */
14
+ const generate = () => randomDigits(8);
15
+ const compact = (value) => clean(value, " -/.");
16
+ const validate = (value) => {
17
+ const v = compact(value);
18
+ if (v.length !== 8) return err("INVALID_LENGTH", "Dutch KvK number must be 8 digits");
19
+ if (!isdigits(v)) return err("INVALID_FORMAT", "Dutch KvK number must contain only digits");
20
+ return {
21
+ valid: true,
22
+ compact: v
23
+ };
24
+ };
25
+ const format = (value) => compact(value);
26
+ /** Dutch Chamber of Commerce Number. */
27
+ const kvk = {
28
+ name: "Dutch Chamber of Commerce Number",
29
+ localName: "KvK-nummer",
30
+ abbreviation: "KvK",
31
+ aliases: ["KVK-nummer", "Kamer van Koophandel"],
32
+ candidatePattern: "\\d{8}",
33
+ country: "NL",
34
+ entityType: "company",
35
+ sourceUrl: "https://www.kvk.nl/",
36
+ examples: ["12345678"],
37
+ compact,
38
+ format,
39
+ validate,
40
+ generate
41
+ };
42
+ //#endregion
43
+ export { compact, kvk as default, format, generate, validate };
44
+
45
+ //# sourceMappingURL=kvk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kvk.js","names":[],"sources":["../../src/nl/kvk.ts"],"sourcesContent":["/** Generate a random valid Dutch KvK number. */\nconst generate = (): string => randomDigits(8);\n\n/**\n * KvK-nummer (Dutch Chamber of Commerce number).\n *\n * 8 digits. Format-only validation; no checksum.\n *\n * @see https://www.kvk.nl/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string =>\n clean(value, \" -/.\");\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 8) {\n return err(\n \"INVALID_LENGTH\",\n \"Dutch KvK number must be 8 digits\",\n );\n }\n if (!isdigits(v)) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch KvK number must contain only digits\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string => compact(value);\n\n/** Dutch Chamber of Commerce Number. */\nconst kvk: Validator = {\n name: \"Dutch Chamber of Commerce Number\",\n localName: \"KvK-nummer\",\n abbreviation: \"KvK\",\n aliases: [\"KVK-nummer\", \"Kamer van Koophandel\"] as const,\n candidatePattern: \"\\\\d{8}\",\n country: \"NL\",\n entityType: \"company\",\n sourceUrl: \"https://www.kvk.nl/\",\n examples: [\"12345678\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default kvk;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;AACA,MAAM,iBAAyB,aAAa,EAAE;AAiB9C,MAAM,WAAW,UACf,MAAM,OAAO,OAAO;AAEtB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,EACf,QAAO,IACL,kBACA,oCACD;AAEH,KAAI,CAAC,SAAS,EAAE,CACd,QAAO,IACL,kBACA,4CACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UAA0B,QAAQ,MAAM;;AAGxD,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,cAAc,uBAAuB;CAC/C,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,WAAW;CACtB;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,10 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import bsn from "./bsn.js";
3
+ import kvk from "./kvk.js";
4
+ import vat from "./vat.js";
5
+
6
+ //#region src/nl/mod.d.ts
7
+
8
+ //#endregion
9
+ export { bsn, kvk, mod_d_exports, vat };
10
+ //# sourceMappingURL=mod.d.ts.map
package/dist/nl/mod.js ADDED
@@ -0,0 +1,14 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ import vat from "./vat.js";
3
+ import bsn from "./bsn.js";
4
+ import kvk from "./kvk.js";
5
+ //#region src/nl/mod.ts
6
+ var nl_exports = /* @__PURE__ */ __exportAll({
7
+ bsn: () => bsn,
8
+ kvk: () => kvk,
9
+ vat: () => vat
10
+ });
11
+ //#endregion
12
+ export { bsn, kvk, nl_exports, vat };
13
+
14
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":[],"sources":["../../src/nl/mod.ts"],"sourcesContent":["export { default as bsn } from \"./bsn\";\nexport { default as kvk } from \"./kvk\";\nexport { default as vat } from \"./vat\";\n"],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/nl/vat.d.ts
4
+
5
+ declare const compact: (value: string) => string;
6
+ declare const validate: (value: string) => ValidateResult;
7
+ declare const format: (value: string) => string;
8
+ /** Generate a random valid Dutch VAT number. */
9
+ declare const generate: () => string;
10
+ /** Dutch VAT Number. */
11
+ declare const vat: Validator;
12
+ //#endregion
13
+ export { compact, vat as default, format, generate, validate };
14
+ //# sourceMappingURL=vat.d.ts.map
package/dist/nl/vat.js ADDED
@@ -0,0 +1,94 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { isdigits } from "../_util/strings.js";
5
+ //#region src/nl/vat.ts
6
+ /**
7
+ * BTW (Dutch VAT number).
8
+ *
9
+ * 12 characters: 9 digits + "B" + 2 digits.
10
+ * Mod 97 check: convert "NL" + number to numeric
11
+ * (N=23, L=21, B=11), mod 97 === 1.
12
+ *
13
+ * @see https://www.vatify.eu/netherlands-vat-number.html
14
+ * @see https://business.gov.nl/regulations/using-checking-vat-numbers/
15
+ */
16
+ const compact = (value) => {
17
+ let v = clean(value, " -/.");
18
+ if (v.startsWith("NL") || v.startsWith("nl")) v = v.slice(2);
19
+ v = v.toUpperCase();
20
+ const bIdx = v.indexOf("B");
21
+ if (bIdx > 0 && bIdx < 9) v = v.slice(0, bIdx).padStart(9, "0") + v.slice(bIdx);
22
+ return v;
23
+ };
24
+ /**
25
+ * Compute mod 97 of a string containing digits and
26
+ * uppercase letters (A=10, B=11, ..., Z=35).
27
+ */
28
+ const mod97 = (value) => {
29
+ let remainder = 0;
30
+ for (const ch of value) {
31
+ const code = ch.charCodeAt(0);
32
+ if (code >= 48 && code <= 57) remainder = (remainder * 10 + (code - 48)) % 97;
33
+ else if (code >= 65 && code <= 90) {
34
+ const num = code - 55;
35
+ remainder = (remainder * 100 + num) % 97;
36
+ }
37
+ }
38
+ return remainder;
39
+ };
40
+ /**
41
+ * Check if a 9-digit string is a valid BSN (Dutch citizen
42
+ * identification number). Weights [9,8,7,6,5,4,3,2,-1],
43
+ * sum % 11 === 0.
44
+ */
45
+ const bsnValid = (num) => {
46
+ if (!isdigits(num) || num.length !== 9) return false;
47
+ if (Number.parseInt(num, 10) <= 0) return false;
48
+ let sum = 0;
49
+ for (let i = 0; i < 8; i++) sum += (9 - i) * Number(num[i]);
50
+ sum -= Number(num[8]);
51
+ return sum % 11 === 0;
52
+ };
53
+ const validate = (value) => {
54
+ const v = compact(value);
55
+ if (v.length !== 12) return err("INVALID_LENGTH", "Dutch VAT number must be 12 characters");
56
+ if (!isdigits(v.slice(0, 9))) return err("INVALID_FORMAT", "Dutch VAT number must start with 9 digits");
57
+ if (v[9] !== "B") return err("INVALID_COMPONENT", "Dutch VAT number digit 10 must be B");
58
+ if (!isdigits(v.slice(10, 12))) return err("INVALID_FORMAT", "Dutch VAT number must end with 2 digits");
59
+ if (Number.parseInt(v.slice(0, 9), 10) <= 0) return err("INVALID_FORMAT", "Dutch VAT number first 9 digits must be > 0");
60
+ if (Number.parseInt(v.slice(10, 12), 10) <= 0) return err("INVALID_FORMAT", "Dutch VAT number last 2 digits must be > 0");
61
+ if (!bsnValid(v.slice(0, 9)) && mod97(`NL${v}`) !== 1) return err("INVALID_CHECKSUM", "Dutch VAT number checksum failed");
62
+ return {
63
+ valid: true,
64
+ compact: v
65
+ };
66
+ };
67
+ const format = (value) => `NL${compact(value)}`;
68
+ /** Generate a random valid Dutch VAT number. */
69
+ const generate = () => {
70
+ for (;;) {
71
+ const c = randomDigits(9) + "B" + randomDigits(2);
72
+ if (validate(c).valid) return c;
73
+ }
74
+ };
75
+ /** Dutch VAT Number. */
76
+ const vat = {
77
+ name: "Dutch VAT Number",
78
+ localName: "BTW-identificatienummer",
79
+ abbreviation: "BTW",
80
+ aliases: ["BTW-nummer", "BTW-id"],
81
+ candidatePattern: "NL\\d{9}B\\d{2}",
82
+ country: "NL",
83
+ entityType: "company",
84
+ sourceUrl: "https://www.belastingdienst.nl/",
85
+ examples: ["123456789B13"],
86
+ compact,
87
+ format,
88
+ validate,
89
+ generate
90
+ };
91
+ //#endregion
92
+ export { compact, vat as default, format, generate, validate };
93
+
94
+ //# sourceMappingURL=vat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vat.js","names":[],"sources":["../../src/nl/vat.ts"],"sourcesContent":["/**\n * BTW (Dutch VAT number).\n *\n * 12 characters: 9 digits + \"B\" + 2 digits.\n * Mod 97 check: convert \"NL\" + number to numeric\n * (N=23, L=21, B=11), mod 97 === 1.\n *\n * @see https://www.vatify.eu/netherlands-vat-number.html\n * @see https://business.gov.nl/regulations/using-checking-vat-numbers/\n */\n\nimport { clean } from \"#util/clean\";\nimport { randomDigits } from \"#util/generate\";\nimport { err } from \"#util/result\";\nimport { isdigits } from \"#util/strings\";\n\nimport type { ValidateResult, Validator } from \"../types\";\n\nconst compact = (value: string): string => {\n let v = clean(value, \" -/.\");\n if (v.startsWith(\"NL\") || v.startsWith(\"nl\")) {\n v = v.slice(2);\n }\n v = v.toUpperCase();\n // Zero-pad numeric part to 9 digits if B is found\n const bIdx = v.indexOf(\"B\");\n if (bIdx > 0 && bIdx < 9) {\n v = v.slice(0, bIdx).padStart(9, \"0\") + v.slice(bIdx);\n }\n return v;\n};\n\n/**\n * Compute mod 97 of a string containing digits and\n * uppercase letters (A=10, B=11, ..., Z=35).\n */\nconst mod97 = (value: string): number => {\n let remainder = 0;\n for (const ch of value) {\n const code = ch.charCodeAt(0);\n if (code >= 48 && code <= 57) {\n // Digit\n remainder = (remainder * 10 + (code - 48)) % 97;\n } else if (code >= 65 && code <= 90) {\n // Letter: two decimal digits (A=10, ..., Z=35)\n const num = code - 55;\n remainder = (remainder * 100 + num) % 97;\n }\n }\n return remainder;\n};\n\n/**\n * Check if a 9-digit string is a valid BSN (Dutch citizen\n * identification number). Weights [9,8,7,6,5,4,3,2,-1],\n * sum % 11 === 0.\n */\nconst bsnValid = (num: string): boolean => {\n if (!isdigits(num) || num.length !== 9) return false;\n if (Number.parseInt(num, 10) <= 0) return false;\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n sum += (9 - i) * Number(num[i]);\n }\n sum -= Number(num[8]);\n return sum % 11 === 0;\n};\n\nconst validate = (value: string): ValidateResult => {\n const v = compact(value);\n if (v.length !== 12) {\n return err(\n \"INVALID_LENGTH\",\n \"Dutch VAT number must be 12 characters\",\n );\n }\n if (!isdigits(v.slice(0, 9))) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number must start with 9 digits\",\n );\n }\n if (v[9] !== \"B\") {\n return err(\n \"INVALID_COMPONENT\",\n \"Dutch VAT number digit 10 must be B\",\n );\n }\n if (!isdigits(v.slice(10, 12))) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number must end with 2 digits\",\n );\n }\n if (Number.parseInt(v.slice(0, 9), 10) <= 0) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number first 9 digits must be > 0\",\n );\n }\n if (Number.parseInt(v.slice(10, 12), 10) <= 0) {\n return err(\n \"INVALID_FORMAT\",\n \"Dutch VAT number last 2 digits must be > 0\",\n );\n }\n // Valid if BSN check passes OR mod 97 check passes\n if (!bsnValid(v.slice(0, 9)) && mod97(`NL${v}`) !== 1) {\n return err(\n \"INVALID_CHECKSUM\",\n \"Dutch VAT number checksum failed\",\n );\n }\n return { valid: true, compact: v };\n};\n\nconst format = (value: string): string =>\n `NL${compact(value)}`;\n\n/** Generate a random valid Dutch VAT number. */\nconst generate = (): string => {\n for (;;) {\n const c = randomDigits(9) + \"B\" + randomDigits(2);\n if (validate(c).valid) return c;\n }\n};\n\n/** Dutch VAT Number. */\nconst vat: Validator = {\n name: \"Dutch VAT Number\",\n localName: \"BTW-identificatienummer\",\n abbreviation: \"BTW\",\n aliases: [\"BTW-nummer\", \"BTW-id\"] as const,\n candidatePattern: \"NL\\\\d{9}B\\\\d{2}\",\n country: \"NL\",\n entityType: \"company\",\n sourceUrl: \"https://www.belastingdienst.nl/\",\n examples: [\"123456789B13\"] as const,\n compact,\n format,\n validate,\n generate,\n};\n\nexport default vat;\nexport { compact, format, validate, generate };\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,WAAW,UAA0B;CACzC,IAAI,IAAI,MAAM,OAAO,OAAO;AAC5B,KAAI,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,CAC1C,KAAI,EAAE,MAAM,EAAE;AAEhB,KAAI,EAAE,aAAa;CAEnB,MAAM,OAAO,EAAE,QAAQ,IAAI;AAC3B,KAAI,OAAO,KAAK,OAAO,EACrB,KAAI,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,MAAM,KAAK;AAEvD,QAAO;;;;;;AAOT,MAAM,SAAS,UAA0B;CACvC,IAAI,YAAY;AAChB,MAAK,MAAM,MAAM,OAAO;EACtB,MAAM,OAAO,GAAG,WAAW,EAAE;AAC7B,MAAI,QAAQ,MAAM,QAAQ,GAExB,cAAa,YAAY,MAAM,OAAO,OAAO;WACpC,QAAQ,MAAM,QAAQ,IAAI;GAEnC,MAAM,MAAM,OAAO;AACnB,gBAAa,YAAY,MAAM,OAAO;;;AAG1C,QAAO;;;;;;;AAQT,MAAM,YAAY,QAAyB;AACzC,KAAI,CAAC,SAAS,IAAI,IAAI,IAAI,WAAW,EAAG,QAAO;AAC/C,KAAI,OAAO,SAAS,KAAK,GAAG,IAAI,EAAG,QAAO;CAC1C,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,SAAQ,IAAI,KAAK,OAAO,IAAI,GAAG;AAEjC,QAAO,OAAO,IAAI,GAAG;AACrB,QAAO,MAAM,OAAO;;AAGtB,MAAM,YAAY,UAAkC;CAClD,MAAM,IAAI,QAAQ,MAAM;AACxB,KAAI,EAAE,WAAW,GACf,QAAO,IACL,kBACA,yCACD;AAEH,KAAI,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,CAC1B,QAAO,IACL,kBACA,4CACD;AAEH,KAAI,EAAE,OAAO,IACX,QAAO,IACL,qBACA,sCACD;AAEH,KAAI,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,CAAC,CAC5B,QAAO,IACL,kBACA,0CACD;AAEH,KAAI,OAAO,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,IAAI,EACxC,QAAO,IACL,kBACA,8CACD;AAEH,KAAI,OAAO,SAAS,EAAE,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAC1C,QAAO,IACL,kBACA,6CACD;AAGH,KAAI,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,MAAM,KAAK,IAAI,KAAK,EAClD,QAAO,IACL,oBACA,mCACD;AAEH,QAAO;EAAE,OAAO;EAAM,SAAS;EAAG;;AAGpC,MAAM,UAAU,UACd,KAAK,QAAQ,MAAM;;AAGrB,MAAM,iBAAyB;AAC7B,UAAS;EACP,MAAM,IAAI,aAAa,EAAE,GAAG,MAAM,aAAa,EAAE;AACjD,MAAI,SAAS,EAAE,CAAC,MAAO,QAAO;;;;AAKlC,MAAM,MAAiB;CACrB,MAAM;CACN,WAAW;CACX,cAAc;CACd,SAAS,CAAC,cAAc,SAAS;CACjC,kBAAkB;CAClB,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU,CAAC,eAAe;CAC1B;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,20 @@
1
+ import { ParsedPersonId, ValidateResult, Validator } from "../types.js";
2
+
3
+ //#region src/no/fodselsnummer.d.ts
4
+
5
+ declare const compact: (value: string) => string;
6
+ declare const validate: (value: string) => ValidateResult;
7
+ declare const format: (value: string) => string;
8
+ /**
9
+ * Extract birth date and gender from a Norwegian
10
+ * birth number. Returns null if the value is not
11
+ * valid.
12
+ */
13
+ declare const parse: (value: string) => ParsedPersonId | null;
14
+ /** Generate a random valid Norwegian birth number. */
15
+ declare const generate: () => string;
16
+ /** Norwegian Birth Number. */
17
+ declare const fodselsnummer: Validator;
18
+ //#endregion
19
+ export { compact, fodselsnummer as default, format, generate, parse, validate };
20
+ //# sourceMappingURL=fodselsnummer.d.ts.map
@@ -0,0 +1,134 @@
1
+ import { clean } from "../_util/clean.js";
2
+ import { randomDigits, randomInt } from "../_util/generate.js";
3
+ import { err } from "../_util/result.js";
4
+ import { isdigits } from "../_util/strings.js";
5
+ import { isValidDate } from "../_util/date.js";
6
+ //#region src/no/fodselsnummer.ts
7
+ /**
8
+ * Fødselsnummer (Norwegian birth number).
9
+ *
10
+ * 11 digits: DDMMYY + 3-digit individual number + 2
11
+ * check digits. Supports D-numbers (day + 40) and
12
+ * H-numbers (month + 40).
13
+ *
14
+ * @see https://www.skatteetaten.no/
15
+ */
16
+ const WEIGHTS_D1 = [
17
+ 3,
18
+ 7,
19
+ 6,
20
+ 1,
21
+ 8,
22
+ 9,
23
+ 4,
24
+ 5,
25
+ 2
26
+ ];
27
+ const WEIGHTS_D2 = [
28
+ 5,
29
+ 4,
30
+ 3,
31
+ 2,
32
+ 7,
33
+ 6,
34
+ 5,
35
+ 4,
36
+ 3,
37
+ 2
38
+ ];
39
+ const compact = (value) => clean(value, " -");
40
+ const getCentury = (yy, individual) => {
41
+ if (individual >= 0 && individual <= 499) return 1900;
42
+ if (individual >= 500 && individual <= 749 && yy >= 54) return 1800;
43
+ if (individual >= 500 && individual <= 999 && yy < 40) return 2e3;
44
+ if (individual >= 900 && individual <= 999 && yy >= 40) return 1900;
45
+ };
46
+ const checkDigit = (v, weights) => {
47
+ let sum = 0;
48
+ for (let i = 0; i < weights.length; i++) sum += Number(v.charAt(i)) * (weights[i] ?? 0);
49
+ const remainder = (11 - sum % 11) % 11;
50
+ if (remainder === 10) return void 0;
51
+ return remainder;
52
+ };
53
+ const validate = (value) => {
54
+ const v = compact(value);
55
+ if (v.length !== 11) return err("INVALID_LENGTH", "Norwegian birth number must be 11 digits");
56
+ if (!isdigits(v)) return err("INVALID_FORMAT", "Norwegian birth number must contain only digits");
57
+ const d1 = checkDigit(v, WEIGHTS_D1);
58
+ if (d1 === void 0 || d1 !== Number(v[9])) return err("INVALID_CHECKSUM", "Norwegian birth number check digit 1 mismatch");
59
+ const d2 = checkDigit(v, WEIGHTS_D2);
60
+ if (d2 === void 0 || d2 !== Number(v[10])) return err("INVALID_CHECKSUM", "Norwegian birth number check digit 2 mismatch");
61
+ let dd = Number(v.slice(0, 2));
62
+ let mm = Number(v.slice(2, 4));
63
+ const yy = Number(v.slice(4, 6));
64
+ const individual = Number(v.slice(6, 9));
65
+ if (dd > 40) dd -= 40;
66
+ if (mm > 40) mm -= 40;
67
+ const century = getCentury(yy, individual);
68
+ if (century === void 0) return err("INVALID_COMPONENT", "Norwegian birth number has invalid individual/century combination");
69
+ const year = century + yy;
70
+ if (!isValidDate(year, mm, dd)) return err("INVALID_COMPONENT", "Norwegian birth number contains an invalid date");
71
+ if (new Date(year, mm - 1, dd) > /* @__PURE__ */ new Date()) return err("INVALID_COMPONENT", "Birth date is in the future");
72
+ return {
73
+ valid: true,
74
+ compact: v
75
+ };
76
+ };
77
+ const format = (value) => {
78
+ const v = compact(value);
79
+ return `${v.slice(0, 6)} ${v.slice(6)}`;
80
+ };
81
+ /**
82
+ * Extract birth date and gender from a Norwegian
83
+ * birth number. Returns null if the value is not
84
+ * valid.
85
+ */
86
+ const parse = (value) => {
87
+ const result = validate(value);
88
+ if (!result.valid) return null;
89
+ const v = result.compact;
90
+ let dd = Number(v.slice(0, 2));
91
+ let mm = Number(v.slice(2, 4));
92
+ const yy = Number(v.slice(4, 6));
93
+ const individual = Number(v.slice(6, 9));
94
+ if (dd > 40) dd -= 40;
95
+ if (mm > 40) mm -= 40;
96
+ const century = getCentury(yy, individual);
97
+ if (century === void 0) return null;
98
+ const year = century + yy;
99
+ return {
100
+ birthDate: new Date(year, mm - 1, dd),
101
+ gender: individual % 2 === 0 ? "female" : "male"
102
+ };
103
+ };
104
+ /** Generate a random valid Norwegian birth number. */
105
+ const generate = () => {
106
+ for (;;) {
107
+ const dd = String(randomInt(1, 28)).padStart(2, "0");
108
+ const mm = String(randomInt(1, 12)).padStart(2, "0");
109
+ const yy = String(randomInt(50, 99)).padStart(2, "0");
110
+ const ind = String(randomInt(0, 499)).padStart(3, "0");
111
+ const c = dd + mm + yy + ind + randomDigits(2);
112
+ if (validate(c).valid) return c;
113
+ }
114
+ };
115
+ /** Norwegian Birth Number. */
116
+ const fodselsnummer = {
117
+ name: "Norwegian Birth Number",
118
+ localName: "Fødselsnummer",
119
+ abbreviation: "Fødselsnr",
120
+ aliases: ["fødselsnummer", "personnummer"],
121
+ candidatePattern: "\\d{11}",
122
+ country: "NO",
123
+ entityType: "person",
124
+ sourceUrl: "https://www.skatteetaten.no/",
125
+ examples: ["15108695088"],
126
+ compact,
127
+ format,
128
+ validate,
129
+ generate
130
+ };
131
+ //#endregion
132
+ export { compact, fodselsnummer as default, format, generate, parse, validate };
133
+
134
+ //# sourceMappingURL=fodselsnummer.js.map