stdnum 1.10.0 → 1.10.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 (489) hide show
  1. package/lib/cjs/no/fodselsnummer.js +2 -2
  2. package/lib/esm/no/fodselsnummer.js +2 -2
  3. package/package.json +5 -2
  4. package/src/ad/index.ts +1 -0
  5. package/src/ad/nrt.spec.ts +36 -0
  6. package/src/ad/nrt.ts +87 -0
  7. package/src/al/index.ts +1 -0
  8. package/src/al/nipt.spec.ts +43 -0
  9. package/src/al/nipt.ts +111 -0
  10. package/src/ar/cbu.spec.ts +28 -0
  11. package/src/ar/cbu.ts +96 -0
  12. package/src/ar/cuit.spec.ts +28 -0
  13. package/src/ar/cuit.ts +102 -0
  14. package/src/ar/dni.spec.ts +22 -0
  15. package/src/ar/dni.ts +72 -0
  16. package/src/ar/index.ts +3 -0
  17. package/src/at/businessid.spec.ts +34 -0
  18. package/src/at/businessid.ts +73 -0
  19. package/src/at/index.ts +4 -0
  20. package/src/at/tin.spec.ts +173 -0
  21. package/src/at/tin.ts +140 -0
  22. package/src/at/uid.spec.ts +44 -0
  23. package/src/at/uid.ts +84 -0
  24. package/src/at/vnr.spec.ts +38 -0
  25. package/src/at/vnr.ts +84 -0
  26. package/src/au/abn.spec.ts +28 -0
  27. package/src/au/abn.ts +78 -0
  28. package/src/au/acn.spec.ts +34 -0
  29. package/src/au/acn.ts +76 -0
  30. package/src/au/index.ts +3 -0
  31. package/src/au/tfn.spec.ts +28 -0
  32. package/src/au/tfn.ts +79 -0
  33. package/src/az/index.ts +2 -0
  34. package/src/az/pin.spec.ts +16 -0
  35. package/src/az/pin.ts +61 -0
  36. package/src/az/tin.spec.ts +28 -0
  37. package/src/az/tin.ts +64 -0
  38. package/src/ba/index.ts +1 -0
  39. package/src/ba/jmbg.spec.ts +28 -0
  40. package/src/ba/jmbg.ts +85 -0
  41. package/src/be/bis.spec.ts +184 -0
  42. package/src/be/bis.ts +85 -0
  43. package/src/be/index.ts +4 -0
  44. package/src/be/insz.spec.ts +51 -0
  45. package/src/be/insz.ts +55 -0
  46. package/src/be/nn.spec.ts +117 -0
  47. package/src/be/nn.ts +77 -0
  48. package/src/be/personIdentifierHelpers.spec.ts +254 -0
  49. package/src/be/personIdentifierHelpers.ts +130 -0
  50. package/src/be/vat.spec.ts +46 -0
  51. package/src/be/vat.ts +84 -0
  52. package/src/bg/egn.spec.ts +28 -0
  53. package/src/bg/egn.ts +75 -0
  54. package/src/bg/index.ts +3 -0
  55. package/src/bg/pnf.spec.ts +28 -0
  56. package/src/bg/pnf.ts +73 -0
  57. package/src/bg/vat.spec.ts +34 -0
  58. package/src/bg/vat.ts +120 -0
  59. package/src/br/cnpj.spec.ts +34 -0
  60. package/src/br/cnpj.ts +89 -0
  61. package/src/br/cpf.spec.ts +34 -0
  62. package/src/br/cpf.ts +87 -0
  63. package/src/br/index.ts +2 -0
  64. package/src/by/index.ts +1 -0
  65. package/src/by/unp.spec.ts +34 -0
  66. package/src/by/unp.ts +108 -0
  67. package/src/bz/index.ts +1 -0
  68. package/src/bz/tin.spec.ts +28 -0
  69. package/src/bz/tin.ts +67 -0
  70. package/src/ca/bn.spec.ts +40 -0
  71. package/src/ca/bn.ts +88 -0
  72. package/src/ca/gst.spec.ts +34 -0
  73. package/src/ca/gst.ts +70 -0
  74. package/src/ca/index.ts +5 -0
  75. package/src/ca/pst.spec.ts +28 -0
  76. package/src/ca/pst.ts +71 -0
  77. package/src/ca/qst.spec.ts +47 -0
  78. package/src/ca/qst.ts +88 -0
  79. package/src/ca/sin.spec.ts +34 -0
  80. package/src/ca/sin.ts +72 -0
  81. package/src/ch/index.ts +3 -0
  82. package/src/ch/ssn.spec.ts +50 -0
  83. package/src/ch/ssn.ts +74 -0
  84. package/src/ch/uid.spec.ts +34 -0
  85. package/src/ch/uid.ts +82 -0
  86. package/src/ch/vat.spec.ts +28 -0
  87. package/src/ch/vat.ts +83 -0
  88. package/src/cl/index.ts +2 -0
  89. package/src/cl/run.ts +13 -0
  90. package/src/cl/rut.spec.ts +50 -0
  91. package/src/cl/rut.ts +97 -0
  92. package/src/cn/index.ts +2 -0
  93. package/src/cn/ric.spec.ts +34 -0
  94. package/src/cn/ric.ts +86 -0
  95. package/src/cn/uscc.spec.ts +34 -0
  96. package/src/cn/uscc.ts +110 -0
  97. package/src/co/index.ts +1 -0
  98. package/src/co/nit.spec.ts +40 -0
  99. package/src/co/nit.ts +85 -0
  100. package/src/cr/cpf.spec.ts +34 -0
  101. package/src/cr/cpf.ts +93 -0
  102. package/src/cr/cpj.spec.ts +28 -0
  103. package/src/cr/cpj.ts +111 -0
  104. package/src/cr/cr.spec.ts +28 -0
  105. package/src/cr/cr.ts +75 -0
  106. package/src/cr/index.ts +3 -0
  107. package/src/cu/index.ts +1 -0
  108. package/src/cu/ni.spec.ts +34 -0
  109. package/src/cu/ni.ts +74 -0
  110. package/src/cy/index.ts +1 -0
  111. package/src/cy/vat.spec.ts +28 -0
  112. package/src/cy/vat.ts +98 -0
  113. package/src/cz/dic.spec.ts +28 -0
  114. package/src/cz/dic.ts +127 -0
  115. package/src/cz/index.ts +2 -0
  116. package/src/cz/rc.spec.ts +44 -0
  117. package/src/cz/rc.ts +95 -0
  118. package/src/de/idnr.spec.ts +34 -0
  119. package/src/de/idnr.ts +91 -0
  120. package/src/de/index.ts +6 -0
  121. package/src/de/passport.spec.ts +31 -0
  122. package/src/de/passport.ts +86 -0
  123. package/src/de/pwnr.spec.ts +62 -0
  124. package/src/de/pwnr.ts +190 -0
  125. package/src/de/stnr.spec.ts +85 -0
  126. package/src/de/stnr.ts +193 -0
  127. package/src/de/svnr.spec.ts +56 -0
  128. package/src/de/svnr.ts +158 -0
  129. package/src/de/vat.spec.ts +28 -0
  130. package/src/de/vat.ts +74 -0
  131. package/src/dk/cpr.spec.ts +34 -0
  132. package/src/dk/cpr.ts +129 -0
  133. package/src/dk/cvr.spec.ts +28 -0
  134. package/src/dk/cvr.ts +81 -0
  135. package/src/dk/index.ts +2 -0
  136. package/src/do/cedula.spec.ts +34 -0
  137. package/src/do/cedula.ts +67 -0
  138. package/src/do/index.ts +3 -0
  139. package/src/do/ncf.spec.ts +34 -0
  140. package/src/do/ncf.ts +133 -0
  141. package/src/do/rnc.spec.ts +40 -0
  142. package/src/do/rnc.ts +74 -0
  143. package/src/dz/index.ts +1 -0
  144. package/src/dz/nif.spec.ts +39 -0
  145. package/src/dz/nif.ts +80 -0
  146. package/src/ec/ci.spec.ts +28 -0
  147. package/src/ec/ci.ts +92 -0
  148. package/src/ec/index.ts +2 -0
  149. package/src/ec/ruc.spec.ts +37 -0
  150. package/src/ec/ruc.ts +117 -0
  151. package/src/ee/ik.spec.ts +28 -0
  152. package/src/ee/ik.ts +114 -0
  153. package/src/ee/index.ts +3 -0
  154. package/src/ee/kmkr.spec.ts +28 -0
  155. package/src/ee/kmkr.ts +76 -0
  156. package/src/ee/registrikood.spec.ts +28 -0
  157. package/src/ee/registrikood.ts +80 -0
  158. package/src/eg/index.ts +1 -0
  159. package/src/eg/tn.spec.ts +44 -0
  160. package/src/eg/tn.ts +96 -0
  161. package/src/es/cif.spec.ts +43 -0
  162. package/src/es/cif.ts +84 -0
  163. package/src/es/dni.spec.ts +28 -0
  164. package/src/es/dni.ts +83 -0
  165. package/src/es/index.ts +5 -0
  166. package/src/es/nie.spec.ts +28 -0
  167. package/src/es/nie.ts +79 -0
  168. package/src/es/nif.spec.ts +52 -0
  169. package/src/es/nif.ts +95 -0
  170. package/src/es/nss.spec.ts +28 -0
  171. package/src/es/nss.ts +132 -0
  172. package/src/exceptions.ts +66 -0
  173. package/src/fi/alv.spec.ts +28 -0
  174. package/src/fi/alv.ts +76 -0
  175. package/src/fi/hetu.spec.ts +37 -0
  176. package/src/fi/hetu.ts +108 -0
  177. package/src/fi/index.ts +3 -0
  178. package/src/fi/ytunnus.spec.ts +28 -0
  179. package/src/fi/ytunnus.ts +49 -0
  180. package/src/fo/index.ts +1 -0
  181. package/src/fo/vn.spec.ts +34 -0
  182. package/src/fo/vn.ts +71 -0
  183. package/src/fr/index.ts +5 -0
  184. package/src/fr/nif.spec.ts +34 -0
  185. package/src/fr/nif.ts +82 -0
  186. package/src/fr/nir.spec.ts +36 -0
  187. package/src/fr/nir.ts +98 -0
  188. package/src/fr/siren.spec.ts +28 -0
  189. package/src/fr/siren.ts +68 -0
  190. package/src/fr/siret.spec.ts +38 -0
  191. package/src/fr/siret.ts +79 -0
  192. package/src/fr/tva.spec.ts +40 -0
  193. package/src/fr/tva.ts +125 -0
  194. package/src/gb/index.ts +3 -0
  195. package/src/gb/nino-prefixes.ts +245 -0
  196. package/src/gb/nino.spec.ts +80 -0
  197. package/src/gb/nino.ts +80 -0
  198. package/src/gb/utr.spec.ts +28 -0
  199. package/src/gb/utr.ts +76 -0
  200. package/src/gb/vat.spec.ts +40 -0
  201. package/src/gb/vat.ts +112 -0
  202. package/src/gen/ean.spec.ts +34 -0
  203. package/src/gen/ean.ts +71 -0
  204. package/src/gen/index.ts +1 -0
  205. package/src/gh/index.ts +1 -0
  206. package/src/gh/tin.spec.ts +42 -0
  207. package/src/gh/tin.ts +93 -0
  208. package/src/gn/index.ts +1 -0
  209. package/src/gn/nifp.spec.ts +40 -0
  210. package/src/gn/nifp.ts +72 -0
  211. package/src/gr/amka.spec.ts +28 -0
  212. package/src/gr/amka.ts +76 -0
  213. package/src/gr/index.ts +2 -0
  214. package/src/gr/vat.spec.ts +34 -0
  215. package/src/gr/vat.ts +84 -0
  216. package/src/gt/cui.spec.ts +34 -0
  217. package/src/gt/cui.ts +110 -0
  218. package/src/gt/index.ts +2 -0
  219. package/src/gt/nit.spec.ts +34 -0
  220. package/src/gt/nit.ts +86 -0
  221. package/src/hk/hkid.spec.ts +52 -0
  222. package/src/hk/hkid.ts +90 -0
  223. package/src/hk/index.ts +1 -0
  224. package/src/hr/index.ts +1 -0
  225. package/src/hr/oib.spec.ts +28 -0
  226. package/src/hr/oib.ts +67 -0
  227. package/src/hu/anum.spec.ts +28 -0
  228. package/src/hu/anum.ts +71 -0
  229. package/src/hu/index.ts +1 -0
  230. package/src/id/index.ts +1 -0
  231. package/src/id/npwp.spec.ts +34 -0
  232. package/src/id/npwp.ts +116 -0
  233. package/src/ie/index.ts +2 -0
  234. package/src/ie/pps.spec.ts +58 -0
  235. package/src/ie/pps.ts +81 -0
  236. package/src/ie/vat.spec.ts +40 -0
  237. package/src/ie/vat.ts +99 -0
  238. package/src/il/hp.spec.ts +38 -0
  239. package/src/il/hp.ts +75 -0
  240. package/src/il/idnr.spec.ts +28 -0
  241. package/src/il/idnr.ts +70 -0
  242. package/src/il/index.ts +2 -0
  243. package/src/in/aadhaar.spec.ts +40 -0
  244. package/src/in/aadhaar.ts +85 -0
  245. package/src/in/epic.spec.ts +34 -0
  246. package/src/in/epic.ts +85 -0
  247. package/src/in/gstin.spec.ts +34 -0
  248. package/src/in/gstin.ts +156 -0
  249. package/src/in/index.ts +4 -0
  250. package/src/in/pan.spec.ts +40 -0
  251. package/src/in/pan.ts +93 -0
  252. package/src/index.ts +404 -0
  253. package/src/is/index.ts +2 -0
  254. package/src/is/kennitala.spec.ts +46 -0
  255. package/src/is/kennitala.ts +80 -0
  256. package/src/is/vsk.spec.ts +22 -0
  257. package/src/is/vsk.ts +60 -0
  258. package/src/it/aic.spec.ts +40 -0
  259. package/src/it/aic.ts +97 -0
  260. package/src/it/codicefiscale.spec.ts +28 -0
  261. package/src/it/codicefiscale.ts +167 -0
  262. package/src/it/index.ts +3 -0
  263. package/src/it/iva.spec.ts +28 -0
  264. package/src/it/iva.ts +65 -0
  265. package/src/jp/cn.spec.ts +28 -0
  266. package/src/jp/cn.ts +77 -0
  267. package/src/jp/index.ts +1 -0
  268. package/src/ke/index.ts +1 -0
  269. package/src/ke/pin.spec.ts +34 -0
  270. package/src/ke/pin.ts +77 -0
  271. package/src/kr/brn.spec.ts +28 -0
  272. package/src/kr/brn.ts +91 -0
  273. package/src/kr/index.ts +2 -0
  274. package/src/kr/rrn.spec.ts +34 -0
  275. package/src/kr/rrn.ts +104 -0
  276. package/src/li/index.ts +1 -0
  277. package/src/li/peid.spec.ts +22 -0
  278. package/src/li/peid.ts +71 -0
  279. package/src/lt/asmens.spec.ts +28 -0
  280. package/src/lt/asmens.ts +73 -0
  281. package/src/lt/index.ts +2 -0
  282. package/src/lt/pvm.spec.ts +34 -0
  283. package/src/lt/pvm.ts +75 -0
  284. package/src/lu/index.ts +1 -0
  285. package/src/lu/tva.spec.ts +28 -0
  286. package/src/lu/tva.ts +70 -0
  287. package/src/lv/index.ts +1 -0
  288. package/src/lv/pvn.spec.ts +44 -0
  289. package/src/lv/pvn.ts +102 -0
  290. package/src/ma/ice.spec.ts +39 -0
  291. package/src/ma/ice.ts +72 -0
  292. package/src/ma/ice9.spec.ts +28 -0
  293. package/src/ma/ice9.ts +62 -0
  294. package/src/ma/index.ts +2 -0
  295. package/src/mc/index.ts +1 -0
  296. package/src/mc/tva.spec.ts +28 -0
  297. package/src/mc/tva.ts +67 -0
  298. package/src/md/idno.spec.ts +28 -0
  299. package/src/md/idno.ts +78 -0
  300. package/src/md/index.ts +1 -0
  301. package/src/me/index.ts +2 -0
  302. package/src/me/jmbg.ts +17 -0
  303. package/src/me/pib.spec.ts +158 -0
  304. package/src/me/pib.ts +77 -0
  305. package/src/mk/edb.spec.ts +50 -0
  306. package/src/mk/edb.ts +88 -0
  307. package/src/mk/index.ts +2 -0
  308. package/src/mk/jmbg.ts +17 -0
  309. package/src/mt/index.ts +1 -0
  310. package/src/mt/vat.spec.ts +28 -0
  311. package/src/mt/vat.ts +69 -0
  312. package/src/mu/index.ts +1 -0
  313. package/src/mu/nid.spec.ts +34 -0
  314. package/src/mu/nid.ts +89 -0
  315. package/src/mx/banks.ts +658 -0
  316. package/src/mx/clabe.spec.ts +68 -0
  317. package/src/mx/clabe.ts +105 -0
  318. package/src/mx/curp.spec.ts +28 -0
  319. package/src/mx/curp.ts +261 -0
  320. package/src/mx/index.ts +3 -0
  321. package/src/mx/rfc.spec.ts +69 -0
  322. package/src/mx/rfc.ts +193 -0
  323. package/src/my/index.ts +1 -0
  324. package/src/my/nric.spec.ts +40 -0
  325. package/src/my/nric.ts +91 -0
  326. package/src/nl/bsn.spec.ts +68 -0
  327. package/src/nl/bsn.ts +81 -0
  328. package/src/nl/btw.spec.ts +40 -0
  329. package/src/nl/btw.ts +95 -0
  330. package/src/nl/index.ts +3 -0
  331. package/src/nl/onderwijsnummer.spec.ts +34 -0
  332. package/src/nl/onderwijsnummer.ts +77 -0
  333. package/src/no/fodselsnummer.spec.ts +56 -0
  334. package/src/no/fodselsnummer.ts +118 -0
  335. package/src/no/index.ts +4 -0
  336. package/src/no/kontonr.spec.ts +34 -0
  337. package/src/no/kontonr.ts +84 -0
  338. package/src/no/mva.spec.ts +28 -0
  339. package/src/no/mva.ts +80 -0
  340. package/src/no/orgnr.spec.ts +28 -0
  341. package/src/no/orgnr.ts +75 -0
  342. package/src/nz/bank.spec.ts +28 -0
  343. package/src/nz/bank.ts +238 -0
  344. package/src/nz/index.ts +2 -0
  345. package/src/nz/ird.spec.ts +34 -0
  346. package/src/nz/ird.ts +102 -0
  347. package/src/pe/ce.spec.ts +46 -0
  348. package/src/pe/ce.ts +61 -0
  349. package/src/pe/cui.spec.ts +28 -0
  350. package/src/pe/cui.ts +85 -0
  351. package/src/pe/index.ts +3 -0
  352. package/src/pe/ruc.spec.ts +46 -0
  353. package/src/pe/ruc.ts +84 -0
  354. package/src/pk/cnic.spec.ts +34 -0
  355. package/src/pk/cnic.ts +97 -0
  356. package/src/pk/index.ts +2 -0
  357. package/src/pk/ntn.spec.ts +22 -0
  358. package/src/pk/ntn.ts +65 -0
  359. package/src/pl/index.ts +3 -0
  360. package/src/pl/nip.spec.ts +34 -0
  361. package/src/pl/nip.ts +74 -0
  362. package/src/pl/pesel.spec.ts +34 -0
  363. package/src/pl/pesel.ts +97 -0
  364. package/src/pl/regon.spec.ts +52 -0
  365. package/src/pl/regon.ts +88 -0
  366. package/src/pt/cc.spec.ts +43 -0
  367. package/src/pt/cc.ts +74 -0
  368. package/src/pt/index.ts +3 -0
  369. package/src/pt/nif.spec.ts +28 -0
  370. package/src/pt/nif.ts +78 -0
  371. package/src/pt/nipc.ts +27 -0
  372. package/src/py/cedula.spec.ts +46 -0
  373. package/src/py/cedula.ts +73 -0
  374. package/src/py/index.ts +2 -0
  375. package/src/py/ruc.spec.ts +40 -0
  376. package/src/py/ruc.ts +93 -0
  377. package/src/ro/cif.spec.ts +40 -0
  378. package/src/ro/cif.ts +62 -0
  379. package/src/ro/cnp.spec.ts +50 -0
  380. package/src/ro/cnp.ts +158 -0
  381. package/src/ro/cui.spec.ts +28 -0
  382. package/src/ro/cui.ts +83 -0
  383. package/src/ro/index.ts +4 -0
  384. package/src/ro/onrc.spec.ts +28 -0
  385. package/src/ro/onrc.ts +109 -0
  386. package/src/rs/index.ts +2 -0
  387. package/src/rs/jmbg.ts +16 -0
  388. package/src/rs/pib.spec.ts +28 -0
  389. package/src/rs/pib.ts +69 -0
  390. package/src/ru/index.ts +1 -0
  391. package/src/ru/inn.spec.ts +32 -0
  392. package/src/ru/inn.ts +106 -0
  393. package/src/se/index.ts +3 -0
  394. package/src/se/orgnr.spec.ts +28 -0
  395. package/src/se/orgnr.ts +68 -0
  396. package/src/se/personnummer.spec.ts +45 -0
  397. package/src/se/personnummer.ts +143 -0
  398. package/src/se/vat.spec.ts +28 -0
  399. package/src/se/vat.ts +73 -0
  400. package/src/sg/index.ts +1 -0
  401. package/src/sg/uen.spec.ts +46 -0
  402. package/src/sg/uen.ts +209 -0
  403. package/src/si/ddv.spec.ts +28 -0
  404. package/src/si/ddv.ts +76 -0
  405. package/src/si/emso.spec.ts +15 -0
  406. package/src/si/emso.ts +27 -0
  407. package/src/si/index.ts +3 -0
  408. package/src/si/jmbg.ts +20 -0
  409. package/src/sk/dph.spec.ts +28 -0
  410. package/src/sk/dph.ts +71 -0
  411. package/src/sk/index.ts +2 -0
  412. package/src/sk/rc.ts +12 -0
  413. package/src/sm/coe.spec.ts +34 -0
  414. package/src/sm/coe.ts +80 -0
  415. package/src/sm/index.ts +1 -0
  416. package/src/sv/index.ts +1 -0
  417. package/src/sv/nit.spec.ts +34 -0
  418. package/src/sv/nit.ts +117 -0
  419. package/src/th/idnr.spec.ts +41 -0
  420. package/src/th/idnr.ts +80 -0
  421. package/src/th/index.ts +3 -0
  422. package/src/th/moa.spec.ts +62 -0
  423. package/src/th/moa.ts +85 -0
  424. package/src/th/tin.spec.ts +77 -0
  425. package/src/th/tin.ts +56 -0
  426. package/src/tn/index.ts +1 -0
  427. package/src/tn/mf.spec.ts +37 -0
  428. package/src/tn/mf.ts +169 -0
  429. package/src/tr/index.ts +2 -0
  430. package/src/tr/tckimlik.spec.ts +40 -0
  431. package/src/tr/tckimlik.ts +87 -0
  432. package/src/tr/vkn.spec.ts +28 -0
  433. package/src/tr/vkn.ts +87 -0
  434. package/src/tw/ban.spec.ts +28 -0
  435. package/src/tw/ban.ts +67 -0
  436. package/src/tw/index.ts +5 -0
  437. package/src/tw/natid.spec.ts +28 -0
  438. package/src/tw/natid.ts +105 -0
  439. package/src/tw/tax_code.spec.ts +34 -0
  440. package/src/tw/tax_code.ts +98 -0
  441. package/src/tw/ubn.spec.ts +28 -0
  442. package/src/tw/ubn.ts +80 -0
  443. package/src/tw/ui.spec.ts +38 -0
  444. package/src/tw/ui.ts +107 -0
  445. package/src/types.ts +82 -0
  446. package/src/ua/edrpou.spec.ts +28 -0
  447. package/src/ua/edrpou.ts +88 -0
  448. package/src/ua/index.ts +2 -0
  449. package/src/ua/rntrc.spec.ts +28 -0
  450. package/src/ua/rntrc.ts +77 -0
  451. package/src/us/ein.spec.ts +28 -0
  452. package/src/us/ein.ts +179 -0
  453. package/src/us/index.ts +2 -0
  454. package/src/us/ssn.spec.ts +28 -0
  455. package/src/us/ssn.ts +117 -0
  456. package/src/util/checksum.spec.ts +70 -0
  457. package/src/util/checksum.ts +258 -0
  458. package/src/util/index.ts +13 -0
  459. package/src/util/isValidDate.spec.ts +49 -0
  460. package/src/util/isValidDate.ts +87 -0
  461. package/src/util/iso7064.spec.ts +17 -0
  462. package/src/util/iso7064.ts +8 -0
  463. package/src/util/pymod.ts +8 -0
  464. package/src/util/strings/char.ts +18 -0
  465. package/src/util/strings/clean.spec.ts +15 -0
  466. package/src/util/strings/clean.ts +305 -0
  467. package/src/util/strings/format.ts +18 -0
  468. package/src/util/strings/index.ts +5 -0
  469. package/src/util/strings/reverseString.ts +3 -0
  470. package/src/util/strings/splitAt.spec.ts +15 -0
  471. package/src/util/strings/splitAt.ts +16 -0
  472. package/src/uy/cedula.spec.ts +28 -0
  473. package/src/uy/cedula.ts +74 -0
  474. package/src/uy/index.ts +3 -0
  475. package/src/uy/nie.spec.ts +28 -0
  476. package/src/uy/nie.ts +84 -0
  477. package/src/uy/rut.spec.ts +34 -0
  478. package/src/uy/rut.ts +99 -0
  479. package/src/ve/index.ts +1 -0
  480. package/src/ve/rif.spec.ts +38 -0
  481. package/src/ve/rif.ts +92 -0
  482. package/src/vn/index.ts +1 -0
  483. package/src/vn/mst.spec.ts +40 -0
  484. package/src/vn/mst.ts +100 -0
  485. package/src/za/idnr.spec.ts +28 -0
  486. package/src/za/idnr.ts +84 -0
  487. package/src/za/index.ts +2 -0
  488. package/src/za/tin.spec.ts +28 -0
  489. package/src/za/tin.ts +75 -0
package/src/cn/uscc.ts ADDED
@@ -0,0 +1,110 @@
1
+ /**
2
+ * USCC (Unified Social Credit Code, 统一社会信用代码, China tax number).
3
+ *
4
+ * This number consists of 18 digits or uppercase English letters (excluding the
5
+ * letters I, O, Z, S, V). The number is comprised of several parts:
6
+ *
7
+ * Digit 1 represents the registering authority,
8
+ * Digit 2 represents the registered entity type,
9
+ * Digits 3 through 8 represent the registering region code,
10
+ * Digits 9 through 17 represent the organisation code,
11
+ * Digit 18 is a check digit (either a number or letter).
12
+ *
13
+ * The registering authority digit most often is a 9, which represents the State
14
+ * Administration for Industry and Commerce (SAIC) as the registering authority.
15
+ *
16
+ * The registered entity type indicates the type of business (or entity). The
17
+ * most common entity types in China are:
18
+ *
19
+ * Wholly Foreign-Owned Enterprises (WFOE): 外商独资企业
20
+ * Joint Ventures (JV): 合资
21
+ * Representative Office: 代表处
22
+ * State-Owned Enterprise (SOE): 国有企业
23
+ * Private Enterprise: 民营企业
24
+ * Individually-Owned: 个体户
25
+ *
26
+ * The registering region code, sometimes referred to as the "administrative
27
+ * division code", is a string of six numbers that indicates where the company
28
+ * is registered. It roughly follows the organisation of the official Chinese
29
+ * regions.
30
+ *
31
+ * The organisation code comes directly from the China Organization Code
32
+ * certificate, an alternative document to the China Business License. It can
33
+ * contain letters or digits.
34
+ *
35
+ * SOURCES
36
+ * https://zh.wikipedia.org/wiki/统一社会信用代码
37
+ * https://zh.wikipedia.org/wiki/校验码
38
+ * https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/China-TIN.pdf
39
+ *
40
+ * ENTITY
41
+ */
42
+
43
+ import * as exceptions from '../exceptions';
44
+ import { strings, weightedSum } from '../util';
45
+ import { Validator, ValidateReturn } from '../types';
46
+
47
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
48
+ return strings.cleanUnicode(input, ' -');
49
+ }
50
+
51
+ const alphabet = '0123456789ABCDEFGHJKLMNPQRTUWXY';
52
+
53
+ const impl: Validator = {
54
+ name: 'Chinese Unified Social Credit Code',
55
+ localName: '统一社会信用代码',
56
+ abbreviation: 'USCC',
57
+ compact(input: string): string {
58
+ const [value, err] = clean(input);
59
+
60
+ if (err) {
61
+ throw err;
62
+ }
63
+
64
+ return value;
65
+ },
66
+
67
+ format(input: string): string {
68
+ const [value] = clean(input);
69
+
70
+ return value;
71
+ },
72
+
73
+ validate(input: string): ValidateReturn {
74
+ const [value, error] = clean(input);
75
+
76
+ if (error) {
77
+ return { isValid: false, error };
78
+ }
79
+ if (value.length !== 18) {
80
+ return { isValid: false, error: new exceptions.InvalidLength() };
81
+ }
82
+ const [front, back, check] = strings.splitAt(value, 8, 17);
83
+ if (!strings.isdigits(front)) {
84
+ return { isValid: false, error: new exceptions.InvalidFormat() };
85
+ }
86
+ if (back.split('').some(v => !alphabet.includes(v))) {
87
+ return { isValid: false, error: new exceptions.InvalidFormat() };
88
+ }
89
+
90
+ const digit = weightedSum(value.substr(0, 17), {
91
+ weights: [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28],
92
+ modulus: 31,
93
+ alphabet,
94
+ });
95
+
96
+ if (alphabet[31 - digit] !== check) {
97
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
98
+ }
99
+
100
+ return {
101
+ isValid: true,
102
+ compact: value,
103
+ isIndividual: false,
104
+ isCompany: true,
105
+ };
106
+ },
107
+ };
108
+
109
+ export const { name, localName, abbreviation, validate, format, compact } =
110
+ impl;
@@ -0,0 +1 @@
1
+ export * as nit from './nit';
@@ -0,0 +1,40 @@
1
+ import { validate, format } from './nit';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('co/nit', () => {
5
+ it('format:213.123.4321', () => {
6
+ const result = format('213.123.4321');
7
+
8
+ expect(result).toEqual('213.123.432-1');
9
+ });
10
+
11
+ it('validate:213.123.432-1', () => {
12
+ const result = validate('213.123.432-1');
13
+
14
+ expect(result.isValid && result.compact).toEqual('2131234321');
15
+ });
16
+
17
+ it('validate:10184648519', () => {
18
+ const result = validate('10184648519');
19
+
20
+ expect(result.isValid && result.compact).toEqual('10184648519');
21
+ });
22
+
23
+ it('validate:900544472-2', () => {
24
+ const result = validate('900544472-2');
25
+
26
+ expect(result.isValid && result.compact).toEqual('9005444722');
27
+ });
28
+
29
+ it('validate:21312', () => {
30
+ const result = validate('21312');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+
35
+ it('validate:2131234325', () => {
36
+ const result = validate('2131234325');
37
+
38
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
39
+ });
40
+ });
package/src/co/nit.ts ADDED
@@ -0,0 +1,85 @@
1
+ /**
2
+ *
3
+ * Columbian Número de Identificación Tributaria
4
+ *
5
+ * The Tax Identification Number (NIT) is a unique Colombian number, assigned by the DIAN (Dirección
6
+ * de Impuestos y Aduanas Nacionales de Colombia) when the entity is registered in the
7
+ * RUT (Registro Único Tributario).
8
+ *
9
+ * Sources:
10
+ * https://es.wikipedia.org/wiki/N%C3%BAmero_de_Identificaci%C3%B3n_Tributaria
11
+ *
12
+ * PERSON/ENTITY
13
+ */
14
+
15
+ import * as exceptions from '../exceptions';
16
+ import { strings, weightedSum } from '../util';
17
+ import { Validator, ValidateReturn } from '../types';
18
+
19
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
20
+ return strings.cleanUnicode(input, ',.- ');
21
+ }
22
+
23
+ const impl: Validator = {
24
+ name: 'Colombian Tax Identification Number',
25
+ localName: 'Número de Identificación Tributaria',
26
+ abbreviation: 'NIT',
27
+
28
+ compact(input: string): string {
29
+ const [value, err] = clean(input);
30
+
31
+ if (err) {
32
+ throw err;
33
+ }
34
+
35
+ return value.toLocaleUpperCase();
36
+ },
37
+
38
+ format(input: string): string {
39
+ const [value] = clean(input);
40
+
41
+ const [p1, p2, p3, p4] = strings.splitAt(value, 3, 6, 9);
42
+
43
+ return `${p1}.${p2}.${p3}-${p4}`;
44
+ },
45
+
46
+ /**
47
+ * This checks the length, formatting and other contraints. It does not check
48
+ * for control letter.
49
+ */
50
+ validate(input: string): ValidateReturn {
51
+ const [value, error] = clean(input);
52
+
53
+ if (error) {
54
+ return { isValid: false, error };
55
+ }
56
+ if (value.length < 8 || value.length > 16) {
57
+ return { isValid: false, error: new exceptions.InvalidLength() };
58
+ }
59
+ if (!strings.isdigits(value)) {
60
+ return { isValid: false, error: new exceptions.InvalidComponent() };
61
+ }
62
+
63
+ const [front, check] = strings.splitAt(value, -1);
64
+ const sum = weightedSum(front, {
65
+ weights: [3, 7, 13, 17, 19, 23, 29, 37, 41, 43, 47, 53, 59, 67, 71],
66
+ reverse: true,
67
+ modulus: 11,
68
+ });
69
+
70
+ const digit = '01987654321'[sum];
71
+ if (check !== digit) {
72
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
73
+ }
74
+
75
+ return {
76
+ isValid: true,
77
+ compact: value,
78
+ isIndividual: true,
79
+ isCompany: true,
80
+ };
81
+ },
82
+ };
83
+
84
+ export const { name, localName, abbreviation, validate, format, compact } =
85
+ impl;
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './cpf';
2
+ import { InvalidLength, InvalidComponent } from '../exceptions';
3
+
4
+ describe('cr/cpf', () => {
5
+ it('format:701610395', () => {
6
+ const result = format('701610395');
7
+
8
+ expect(result).toEqual('07-0161-0395');
9
+ });
10
+
11
+ it('format:1-613-584', () => {
12
+ const result = format('1-613-584');
13
+
14
+ expect(result).toEqual('01-0613-0584');
15
+ });
16
+
17
+ it('validate:3-0455-0175', () => {
18
+ const result = validate('3-0455-0175');
19
+
20
+ expect(result.isValid && result.compact).toEqual('0304550175');
21
+ });
22
+
23
+ it('validate:30-1234-1234', () => {
24
+ const result = validate('30-1234-1234');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidComponent);
27
+ });
28
+
29
+ it('validate:12345678', () => {
30
+ const result = validate('12345678');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+ });
package/src/cr/cpf.ts ADDED
@@ -0,0 +1,93 @@
1
+ /**
2
+ * CPF (Cédula de Persona Física, Costa Rica physical person ID number).
3
+ *
4
+ * The Cédula de Persona Física (CPF), also known as Cédula de Identidad is an
5
+ * identifier of physical persons.
6
+ *
7
+ * The number consists of 10 digits in the form 0P-TTTT-AAAA where P represents
8
+ * the province, TTTT represents the volume (tomo) padded with zeroes on the
9
+ * left, and AAAA represents the entry (asiento) also padded with zeroes on the
10
+ * left.
11
+ *
12
+ * It seems to be usual for the leading zeroes in each of the three parts to be
13
+ * omitted.
14
+ *
15
+ * Source
16
+ * https://www.hacienda.go.cr/consultapagos/ayuda_cedulas.htm
17
+ * https://www.procomer.com/downloads/quiero/guia_solicitud_vuce.pdf (page 11)
18
+ * https://www.hacienda.go.cr/ATV/frmConsultaSituTributaria.aspx
19
+ *
20
+ * PERSON
21
+ */
22
+
23
+ import * as exceptions from '../exceptions';
24
+ import { strings } from '../util';
25
+ import { Validator, ValidateReturn } from '../types';
26
+
27
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
28
+ const [value, err] = strings.cleanUnicode(input, ' ');
29
+ if (err) {
30
+ return [value, err];
31
+ }
32
+ const parts = value.split('-');
33
+ if (parts.length === 3) {
34
+ parts[0] = parts[0].padStart(2, '0');
35
+ parts[1] = parts[1].padStart(4, '0');
36
+ parts[2] = parts[2].padStart(4, '0');
37
+ }
38
+ const number = parts.join('');
39
+
40
+ if (number.length !== 10 && number.length !== 9) {
41
+ return ['', new exceptions.InvalidLength()];
42
+ }
43
+
44
+ return [number.padStart(10, '0'), err];
45
+ }
46
+
47
+ const impl: Validator = {
48
+ name: 'Costa Rica Physical Person ID Number',
49
+ localName: 'Cédula de Persona Física',
50
+ abbreviation: 'CPF',
51
+ compact(input: string): string {
52
+ const [value, err] = clean(input);
53
+
54
+ if (err) {
55
+ throw err;
56
+ }
57
+
58
+ return value;
59
+ },
60
+
61
+ format(input: string): string {
62
+ const [value] = clean(input);
63
+
64
+ return strings.splitAt(value, 2, 6).join('-');
65
+ },
66
+
67
+ validate(input: string): ValidateReturn {
68
+ const [value, error] = clean(input);
69
+
70
+ if (error) {
71
+ return { isValid: false, error };
72
+ }
73
+ if (value.length !== 10) {
74
+ return { isValid: false, error: new exceptions.InvalidLength() };
75
+ }
76
+ if (!strings.isdigits(value)) {
77
+ return { isValid: false, error: new exceptions.InvalidFormat() };
78
+ }
79
+ if (value[0] !== '0') {
80
+ return { isValid: false, error: new exceptions.InvalidComponent() };
81
+ }
82
+
83
+ return {
84
+ isValid: true,
85
+ compact: value,
86
+ isIndividual: true,
87
+ isCompany: false,
88
+ };
89
+ },
90
+ };
91
+
92
+ export const { name, localName, abbreviation, validate, format, compact } =
93
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './cpj';
2
+ import { InvalidLength, InvalidComponent } from '../exceptions';
3
+
4
+ describe('cr/cpj', () => {
5
+ it('format:4 000 042138', () => {
6
+ const result = format('4 000 042138');
7
+
8
+ expect(result).toEqual('4-000-042138');
9
+ });
10
+
11
+ it('validate:3-101-999999', () => {
12
+ const result = validate('3-101-999999');
13
+
14
+ expect(result.isValid && result.compact).toEqual('3101999999');
15
+ });
16
+
17
+ it('validate:310132541', () => {
18
+ const result = validate('310132541');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:3-534-123559', () => {
24
+ const result = validate('3-534-123559');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidComponent);
27
+ });
28
+ });
package/src/cr/cpj.ts ADDED
@@ -0,0 +1,111 @@
1
+ /**
2
+ * CPJ (Cédula de Persona Jurídica, Costa Rica tax number).
3
+ *
4
+ * The Cédula de Persona Jurídica (CPJ) is an identifier of legal entities for
5
+ * tax purposes.
6
+ *
7
+ * This number consists of 10 digits, the first indicates the class of juridical
8
+ * person, followed by a 3 digit sequence number identifying the type of
9
+ * juridical person, followed by 6 digits sequence number assigned by Registro
10
+ * Nacional de la República de Costa Rica.
11
+ *
12
+ * Source
13
+ * https://www.hacienda.go.cr/consultapagos/ayuda_cedulas.htm
14
+ * https://www.procomer.com/downloads/quiero/guia_solicitud_vuce.pdf (page 11)
15
+ * http://www.registronacional.go.cr/personas_juridicas/documentos/Consultas/Listado%20de%20Clases%20y%20Tipos%20Cedulas%20Juridicas.pdf
16
+ * https://www.hacienda.go.cr/ATV/frmConsultaSituTributaria.aspx
17
+ *
18
+ * ENTITY
19
+ */
20
+
21
+ import * as exceptions from '../exceptions';
22
+ import { strings } from '../util';
23
+ import { Validator, ValidateReturn } from '../types';
24
+
25
+ const classTypes: Record<string, string[]> = {
26
+ '2': ['100', '200', '300', '400'],
27
+ '3': [
28
+ '002',
29
+ '003',
30
+ '004',
31
+ '005',
32
+ '006',
33
+ '007',
34
+ '008',
35
+ '009',
36
+ '010',
37
+ '011',
38
+ '012',
39
+ '013',
40
+ '014',
41
+ '101',
42
+ '102',
43
+ '103',
44
+ '104',
45
+ '105',
46
+ '106',
47
+ '107',
48
+ '108',
49
+ '109',
50
+ '110',
51
+ ],
52
+ '4': ['000'],
53
+ '5': ['001'],
54
+ };
55
+
56
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
57
+ return strings.cleanUnicode(input, ' -');
58
+ }
59
+
60
+ const impl: Validator = {
61
+ name: 'Costa Rica Tax Number',
62
+ localName: 'Cédula de Persona Jurídica',
63
+ abbreviation: 'CPJ',
64
+ compact(input: string): string {
65
+ const [value, err] = clean(input);
66
+
67
+ if (err) {
68
+ throw err;
69
+ }
70
+
71
+ return value;
72
+ },
73
+
74
+ format(input: string): string {
75
+ const [value] = clean(input);
76
+
77
+ return strings.splitAt(value, 1, 4).join('-');
78
+ },
79
+
80
+ validate(input: string): ValidateReturn {
81
+ const [value, error] = clean(input);
82
+
83
+ if (error) {
84
+ return { isValid: false, error };
85
+ }
86
+ if (value.length !== 10) {
87
+ return { isValid: false, error: new exceptions.InvalidLength() };
88
+ }
89
+ if (!strings.isdigits(value)) {
90
+ return { isValid: false, error: new exceptions.InvalidFormat() };
91
+ }
92
+
93
+ const items = classTypes[value[0]];
94
+ if (!items) {
95
+ return { isValid: false, error: new exceptions.InvalidComponent() };
96
+ }
97
+ if (!items.includes(value.substr(1, 3))) {
98
+ return { isValid: false, error: new exceptions.InvalidComponent() };
99
+ }
100
+
101
+ return {
102
+ isValid: true,
103
+ compact: value,
104
+ isIndividual: false,
105
+ isCompany: true,
106
+ };
107
+ },
108
+ };
109
+
110
+ export const { name, localName, abbreviation, validate, format, compact } =
111
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './cr';
2
+ import { InvalidLength, InvalidComponent } from '../exceptions';
3
+
4
+ describe('cr/cr', () => {
5
+ it('format:122200569906', () => {
6
+ const result = format('122200569906');
7
+
8
+ expect(result).toEqual('122200569906');
9
+ });
10
+
11
+ it('validate:155812994816', () => {
12
+ const result = validate('155812994816');
13
+
14
+ expect(result.isValid && result.compact).toEqual('155812994816');
15
+ });
16
+
17
+ it('validate:12345678', () => {
18
+ const result = validate('12345678');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:300123456789', () => {
24
+ const result = validate('300123456789');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidComponent);
27
+ });
28
+ });
package/src/cr/cr.ts ADDED
@@ -0,0 +1,75 @@
1
+ /**
2
+ * CR (Cédula de Residencia, Costa Rica foreigners ID number).
3
+ *
4
+ * The Cédula de Residencia (CR), also know as DIMEX or Documento de
5
+ * Identificación Migratorio para Extranjeros, is an identifier of foreigners in
6
+ * Costa Rica.
7
+ *
8
+ * This number consists of 11 or 12 digits in the form 1NNN-CC...C-EE...E where
9
+ * NNN represents the code of the country the foreigner comes from as specified
10
+ * by Costa Rica's Dirección General de Migración y Extranjería, CC...C is a
11
+ * sequence telling how many Cédula de Residencia have been issued in total and
12
+ * EE...E is a sequence telling how many Cédula de Residencia have been issued
13
+ * for that particular foreign country.
14
+ *
15
+ * Source
16
+ * https://www.hacienda.go.cr/consultapagos/ayuda_cedulas.htm
17
+ *
18
+ * PERSON
19
+ */
20
+
21
+ import * as exceptions from '../exceptions';
22
+ import { strings } from '../util';
23
+ import { Validator, ValidateReturn } from '../types';
24
+
25
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
26
+ return strings.cleanUnicode(input, ' -');
27
+ }
28
+
29
+ const impl: Validator = {
30
+ name: 'Costa Rica Foreigners ID Number',
31
+ localName: 'Cédula de Residencia',
32
+ abbreviation: 'CR',
33
+ compact(input: string): string {
34
+ const [value, err] = clean(input);
35
+
36
+ if (err) {
37
+ throw err;
38
+ }
39
+
40
+ return value;
41
+ },
42
+
43
+ format(input: string): string {
44
+ const [value] = clean(input);
45
+
46
+ return value;
47
+ },
48
+
49
+ validate(input: string): ValidateReturn {
50
+ const [value, error] = clean(input);
51
+
52
+ if (error) {
53
+ return { isValid: false, error };
54
+ }
55
+ if (value.length !== 12) {
56
+ return { isValid: false, error: new exceptions.InvalidLength() };
57
+ }
58
+ if (!strings.isdigits(value)) {
59
+ return { isValid: false, error: new exceptions.InvalidFormat() };
60
+ }
61
+ if (value[0] !== '1') {
62
+ return { isValid: false, error: new exceptions.InvalidComponent() };
63
+ }
64
+
65
+ return {
66
+ isValid: true,
67
+ compact: value,
68
+ isIndividual: true,
69
+ isCompany: false,
70
+ };
71
+ },
72
+ };
73
+
74
+ export const { name, localName, abbreviation, validate, format, compact } =
75
+ impl;
@@ -0,0 +1,3 @@
1
+ export * as cpf from './cpf';
2
+ export * as cpj from './cpj';
3
+ export * as cr from './cr';
@@ -0,0 +1 @@
1
+ export * as ni from './ni';
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './ni';
2
+ import { InvalidLength, InvalidComponent, InvalidFormat } from '../exceptions';
3
+
4
+ describe('cu/ni', () => {
5
+ it('format:91021027775', () => {
6
+ const result = format('91021027775');
7
+
8
+ expect(result).toEqual('91021027775');
9
+ });
10
+
11
+ it('validate:91021027775', () => {
12
+ const result = validate('91021027775');
13
+
14
+ expect(result.isValid && result.compact).toEqual('91021027775');
15
+ });
16
+
17
+ it('validate:91221027775', () => {
18
+ const result = validate('91221027775');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidComponent);
21
+ });
22
+
23
+ it('validate:12345678', () => {
24
+ const result = validate('12345678');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+
29
+ it('validate:9102102777A', () => {
30
+ const result = validate('9102102777A');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidFormat);
33
+ });
34
+ });