stdnum 1.10.0 → 1.10.2

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 (496) hide show
  1. package/README.md +1 -0
  2. package/lib/cjs/in/gstin.js +3 -3
  3. package/lib/cjs/no/fodselsnummer.js +2 -2
  4. package/lib/cjs/tw/natid.js +8 -5
  5. package/lib/cjs/tw/ui.js +8 -5
  6. package/lib/esm/in/gstin.js +3 -3
  7. package/lib/esm/no/fodselsnummer.js +2 -2
  8. package/lib/esm/tw/natid.js +8 -5
  9. package/lib/esm/tw/ui.js +8 -5
  10. package/package.json +5 -2
  11. package/src/ad/index.ts +1 -0
  12. package/src/ad/nrt.spec.ts +36 -0
  13. package/src/ad/nrt.ts +87 -0
  14. package/src/al/index.ts +1 -0
  15. package/src/al/nipt.spec.ts +43 -0
  16. package/src/al/nipt.ts +111 -0
  17. package/src/ar/cbu.spec.ts +28 -0
  18. package/src/ar/cbu.ts +96 -0
  19. package/src/ar/cuit.spec.ts +28 -0
  20. package/src/ar/cuit.ts +102 -0
  21. package/src/ar/dni.spec.ts +22 -0
  22. package/src/ar/dni.ts +72 -0
  23. package/src/ar/index.ts +3 -0
  24. package/src/at/businessid.spec.ts +34 -0
  25. package/src/at/businessid.ts +73 -0
  26. package/src/at/index.ts +4 -0
  27. package/src/at/tin.spec.ts +173 -0
  28. package/src/at/tin.ts +140 -0
  29. package/src/at/uid.spec.ts +44 -0
  30. package/src/at/uid.ts +84 -0
  31. package/src/at/vnr.spec.ts +38 -0
  32. package/src/at/vnr.ts +84 -0
  33. package/src/au/abn.spec.ts +28 -0
  34. package/src/au/abn.ts +78 -0
  35. package/src/au/acn.spec.ts +34 -0
  36. package/src/au/acn.ts +76 -0
  37. package/src/au/index.ts +3 -0
  38. package/src/au/tfn.spec.ts +28 -0
  39. package/src/au/tfn.ts +79 -0
  40. package/src/az/index.ts +2 -0
  41. package/src/az/pin.spec.ts +16 -0
  42. package/src/az/pin.ts +61 -0
  43. package/src/az/tin.spec.ts +28 -0
  44. package/src/az/tin.ts +64 -0
  45. package/src/ba/index.ts +1 -0
  46. package/src/ba/jmbg.spec.ts +28 -0
  47. package/src/ba/jmbg.ts +85 -0
  48. package/src/be/bis.spec.ts +184 -0
  49. package/src/be/bis.ts +85 -0
  50. package/src/be/index.ts +4 -0
  51. package/src/be/insz.spec.ts +51 -0
  52. package/src/be/insz.ts +55 -0
  53. package/src/be/nn.spec.ts +117 -0
  54. package/src/be/nn.ts +77 -0
  55. package/src/be/personIdentifierHelpers.spec.ts +254 -0
  56. package/src/be/personIdentifierHelpers.ts +130 -0
  57. package/src/be/vat.spec.ts +46 -0
  58. package/src/be/vat.ts +84 -0
  59. package/src/bg/egn.spec.ts +28 -0
  60. package/src/bg/egn.ts +75 -0
  61. package/src/bg/index.ts +3 -0
  62. package/src/bg/pnf.spec.ts +28 -0
  63. package/src/bg/pnf.ts +73 -0
  64. package/src/bg/vat.spec.ts +34 -0
  65. package/src/bg/vat.ts +120 -0
  66. package/src/br/cnpj.spec.ts +34 -0
  67. package/src/br/cnpj.ts +89 -0
  68. package/src/br/cpf.spec.ts +34 -0
  69. package/src/br/cpf.ts +87 -0
  70. package/src/br/index.ts +2 -0
  71. package/src/by/index.ts +1 -0
  72. package/src/by/unp.spec.ts +34 -0
  73. package/src/by/unp.ts +108 -0
  74. package/src/bz/index.ts +1 -0
  75. package/src/bz/tin.spec.ts +28 -0
  76. package/src/bz/tin.ts +67 -0
  77. package/src/ca/bn.spec.ts +40 -0
  78. package/src/ca/bn.ts +88 -0
  79. package/src/ca/gst.spec.ts +34 -0
  80. package/src/ca/gst.ts +70 -0
  81. package/src/ca/index.ts +5 -0
  82. package/src/ca/pst.spec.ts +28 -0
  83. package/src/ca/pst.ts +71 -0
  84. package/src/ca/qst.spec.ts +47 -0
  85. package/src/ca/qst.ts +88 -0
  86. package/src/ca/sin.spec.ts +34 -0
  87. package/src/ca/sin.ts +72 -0
  88. package/src/ch/index.ts +3 -0
  89. package/src/ch/ssn.spec.ts +50 -0
  90. package/src/ch/ssn.ts +74 -0
  91. package/src/ch/uid.spec.ts +34 -0
  92. package/src/ch/uid.ts +82 -0
  93. package/src/ch/vat.spec.ts +28 -0
  94. package/src/ch/vat.ts +83 -0
  95. package/src/cl/index.ts +2 -0
  96. package/src/cl/run.ts +13 -0
  97. package/src/cl/rut.spec.ts +50 -0
  98. package/src/cl/rut.ts +97 -0
  99. package/src/cn/index.ts +2 -0
  100. package/src/cn/ric.spec.ts +34 -0
  101. package/src/cn/ric.ts +86 -0
  102. package/src/cn/uscc.spec.ts +34 -0
  103. package/src/cn/uscc.ts +110 -0
  104. package/src/co/index.ts +1 -0
  105. package/src/co/nit.spec.ts +40 -0
  106. package/src/co/nit.ts +85 -0
  107. package/src/cr/cpf.spec.ts +34 -0
  108. package/src/cr/cpf.ts +93 -0
  109. package/src/cr/cpj.spec.ts +28 -0
  110. package/src/cr/cpj.ts +111 -0
  111. package/src/cr/cr.spec.ts +28 -0
  112. package/src/cr/cr.ts +75 -0
  113. package/src/cr/index.ts +3 -0
  114. package/src/cu/index.ts +1 -0
  115. package/src/cu/ni.spec.ts +34 -0
  116. package/src/cu/ni.ts +74 -0
  117. package/src/cy/index.ts +1 -0
  118. package/src/cy/vat.spec.ts +28 -0
  119. package/src/cy/vat.ts +98 -0
  120. package/src/cz/dic.spec.ts +28 -0
  121. package/src/cz/dic.ts +127 -0
  122. package/src/cz/index.ts +2 -0
  123. package/src/cz/rc.spec.ts +44 -0
  124. package/src/cz/rc.ts +95 -0
  125. package/src/de/idnr.spec.ts +34 -0
  126. package/src/de/idnr.ts +91 -0
  127. package/src/de/index.ts +6 -0
  128. package/src/de/passport.spec.ts +31 -0
  129. package/src/de/passport.ts +86 -0
  130. package/src/de/pwnr.spec.ts +62 -0
  131. package/src/de/pwnr.ts +190 -0
  132. package/src/de/stnr.spec.ts +85 -0
  133. package/src/de/stnr.ts +193 -0
  134. package/src/de/svnr.spec.ts +56 -0
  135. package/src/de/svnr.ts +158 -0
  136. package/src/de/vat.spec.ts +28 -0
  137. package/src/de/vat.ts +74 -0
  138. package/src/dk/cpr.spec.ts +34 -0
  139. package/src/dk/cpr.ts +129 -0
  140. package/src/dk/cvr.spec.ts +28 -0
  141. package/src/dk/cvr.ts +81 -0
  142. package/src/dk/index.ts +2 -0
  143. package/src/do/cedula.spec.ts +34 -0
  144. package/src/do/cedula.ts +67 -0
  145. package/src/do/index.ts +3 -0
  146. package/src/do/ncf.spec.ts +34 -0
  147. package/src/do/ncf.ts +133 -0
  148. package/src/do/rnc.spec.ts +40 -0
  149. package/src/do/rnc.ts +74 -0
  150. package/src/dz/index.ts +1 -0
  151. package/src/dz/nif.spec.ts +39 -0
  152. package/src/dz/nif.ts +80 -0
  153. package/src/ec/ci.spec.ts +28 -0
  154. package/src/ec/ci.ts +92 -0
  155. package/src/ec/index.ts +2 -0
  156. package/src/ec/ruc.spec.ts +37 -0
  157. package/src/ec/ruc.ts +117 -0
  158. package/src/ee/ik.spec.ts +28 -0
  159. package/src/ee/ik.ts +114 -0
  160. package/src/ee/index.ts +3 -0
  161. package/src/ee/kmkr.spec.ts +28 -0
  162. package/src/ee/kmkr.ts +76 -0
  163. package/src/ee/registrikood.spec.ts +28 -0
  164. package/src/ee/registrikood.ts +80 -0
  165. package/src/eg/index.ts +1 -0
  166. package/src/eg/tn.spec.ts +44 -0
  167. package/src/eg/tn.ts +96 -0
  168. package/src/es/cif.spec.ts +43 -0
  169. package/src/es/cif.ts +84 -0
  170. package/src/es/dni.spec.ts +28 -0
  171. package/src/es/dni.ts +83 -0
  172. package/src/es/index.ts +5 -0
  173. package/src/es/nie.spec.ts +28 -0
  174. package/src/es/nie.ts +79 -0
  175. package/src/es/nif.spec.ts +52 -0
  176. package/src/es/nif.ts +95 -0
  177. package/src/es/nss.spec.ts +28 -0
  178. package/src/es/nss.ts +132 -0
  179. package/src/exceptions.ts +66 -0
  180. package/src/fi/alv.spec.ts +28 -0
  181. package/src/fi/alv.ts +76 -0
  182. package/src/fi/hetu.spec.ts +37 -0
  183. package/src/fi/hetu.ts +108 -0
  184. package/src/fi/index.ts +3 -0
  185. package/src/fi/ytunnus.spec.ts +28 -0
  186. package/src/fi/ytunnus.ts +49 -0
  187. package/src/fo/index.ts +1 -0
  188. package/src/fo/vn.spec.ts +34 -0
  189. package/src/fo/vn.ts +71 -0
  190. package/src/fr/index.ts +5 -0
  191. package/src/fr/nif.spec.ts +34 -0
  192. package/src/fr/nif.ts +82 -0
  193. package/src/fr/nir.spec.ts +36 -0
  194. package/src/fr/nir.ts +98 -0
  195. package/src/fr/siren.spec.ts +28 -0
  196. package/src/fr/siren.ts +68 -0
  197. package/src/fr/siret.spec.ts +38 -0
  198. package/src/fr/siret.ts +79 -0
  199. package/src/fr/tva.spec.ts +40 -0
  200. package/src/fr/tva.ts +125 -0
  201. package/src/gb/index.ts +3 -0
  202. package/src/gb/nino-prefixes.ts +245 -0
  203. package/src/gb/nino.spec.ts +80 -0
  204. package/src/gb/nino.ts +80 -0
  205. package/src/gb/utr.spec.ts +28 -0
  206. package/src/gb/utr.ts +76 -0
  207. package/src/gb/vat.spec.ts +40 -0
  208. package/src/gb/vat.ts +112 -0
  209. package/src/gen/ean.spec.ts +34 -0
  210. package/src/gen/ean.ts +71 -0
  211. package/src/gen/index.ts +1 -0
  212. package/src/gh/index.ts +1 -0
  213. package/src/gh/tin.spec.ts +42 -0
  214. package/src/gh/tin.ts +93 -0
  215. package/src/gn/index.ts +1 -0
  216. package/src/gn/nifp.spec.ts +40 -0
  217. package/src/gn/nifp.ts +72 -0
  218. package/src/gr/amka.spec.ts +28 -0
  219. package/src/gr/amka.ts +76 -0
  220. package/src/gr/index.ts +2 -0
  221. package/src/gr/vat.spec.ts +34 -0
  222. package/src/gr/vat.ts +84 -0
  223. package/src/gt/cui.spec.ts +34 -0
  224. package/src/gt/cui.ts +110 -0
  225. package/src/gt/index.ts +2 -0
  226. package/src/gt/nit.spec.ts +34 -0
  227. package/src/gt/nit.ts +86 -0
  228. package/src/hk/hkid.spec.ts +52 -0
  229. package/src/hk/hkid.ts +90 -0
  230. package/src/hk/index.ts +1 -0
  231. package/src/hr/index.ts +1 -0
  232. package/src/hr/oib.spec.ts +28 -0
  233. package/src/hr/oib.ts +67 -0
  234. package/src/hu/anum.spec.ts +28 -0
  235. package/src/hu/anum.ts +71 -0
  236. package/src/hu/index.ts +1 -0
  237. package/src/id/index.ts +1 -0
  238. package/src/id/npwp.spec.ts +34 -0
  239. package/src/id/npwp.ts +116 -0
  240. package/src/ie/index.ts +2 -0
  241. package/src/ie/pps.spec.ts +58 -0
  242. package/src/ie/pps.ts +81 -0
  243. package/src/ie/vat.spec.ts +40 -0
  244. package/src/ie/vat.ts +99 -0
  245. package/src/il/hp.spec.ts +38 -0
  246. package/src/il/hp.ts +75 -0
  247. package/src/il/idnr.spec.ts +28 -0
  248. package/src/il/idnr.ts +70 -0
  249. package/src/il/index.ts +2 -0
  250. package/src/in/aadhaar.spec.ts +40 -0
  251. package/src/in/aadhaar.ts +85 -0
  252. package/src/in/epic.spec.ts +34 -0
  253. package/src/in/epic.ts +85 -0
  254. package/src/in/gstin.spec.ts +34 -0
  255. package/src/in/gstin.ts +156 -0
  256. package/src/in/index.ts +4 -0
  257. package/src/in/pan.spec.ts +40 -0
  258. package/src/in/pan.ts +93 -0
  259. package/src/index.ts +404 -0
  260. package/src/is/index.ts +2 -0
  261. package/src/is/kennitala.spec.ts +46 -0
  262. package/src/is/kennitala.ts +80 -0
  263. package/src/is/vsk.spec.ts +22 -0
  264. package/src/is/vsk.ts +60 -0
  265. package/src/it/aic.spec.ts +40 -0
  266. package/src/it/aic.ts +97 -0
  267. package/src/it/codicefiscale.spec.ts +28 -0
  268. package/src/it/codicefiscale.ts +167 -0
  269. package/src/it/index.ts +3 -0
  270. package/src/it/iva.spec.ts +28 -0
  271. package/src/it/iva.ts +65 -0
  272. package/src/jp/cn.spec.ts +28 -0
  273. package/src/jp/cn.ts +77 -0
  274. package/src/jp/index.ts +1 -0
  275. package/src/ke/index.ts +1 -0
  276. package/src/ke/pin.spec.ts +34 -0
  277. package/src/ke/pin.ts +77 -0
  278. package/src/kr/brn.spec.ts +28 -0
  279. package/src/kr/brn.ts +91 -0
  280. package/src/kr/index.ts +2 -0
  281. package/src/kr/rrn.spec.ts +34 -0
  282. package/src/kr/rrn.ts +104 -0
  283. package/src/li/index.ts +1 -0
  284. package/src/li/peid.spec.ts +22 -0
  285. package/src/li/peid.ts +71 -0
  286. package/src/lt/asmens.spec.ts +28 -0
  287. package/src/lt/asmens.ts +73 -0
  288. package/src/lt/index.ts +2 -0
  289. package/src/lt/pvm.spec.ts +34 -0
  290. package/src/lt/pvm.ts +75 -0
  291. package/src/lu/index.ts +1 -0
  292. package/src/lu/tva.spec.ts +28 -0
  293. package/src/lu/tva.ts +70 -0
  294. package/src/lv/index.ts +1 -0
  295. package/src/lv/pvn.spec.ts +44 -0
  296. package/src/lv/pvn.ts +102 -0
  297. package/src/ma/ice.spec.ts +39 -0
  298. package/src/ma/ice.ts +72 -0
  299. package/src/ma/ice9.spec.ts +28 -0
  300. package/src/ma/ice9.ts +62 -0
  301. package/src/ma/index.ts +2 -0
  302. package/src/mc/index.ts +1 -0
  303. package/src/mc/tva.spec.ts +28 -0
  304. package/src/mc/tva.ts +67 -0
  305. package/src/md/idno.spec.ts +28 -0
  306. package/src/md/idno.ts +78 -0
  307. package/src/md/index.ts +1 -0
  308. package/src/me/index.ts +2 -0
  309. package/src/me/jmbg.ts +17 -0
  310. package/src/me/pib.spec.ts +158 -0
  311. package/src/me/pib.ts +77 -0
  312. package/src/mk/edb.spec.ts +50 -0
  313. package/src/mk/edb.ts +88 -0
  314. package/src/mk/index.ts +2 -0
  315. package/src/mk/jmbg.ts +17 -0
  316. package/src/mt/index.ts +1 -0
  317. package/src/mt/vat.spec.ts +28 -0
  318. package/src/mt/vat.ts +69 -0
  319. package/src/mu/index.ts +1 -0
  320. package/src/mu/nid.spec.ts +34 -0
  321. package/src/mu/nid.ts +89 -0
  322. package/src/mx/banks.ts +658 -0
  323. package/src/mx/clabe.spec.ts +68 -0
  324. package/src/mx/clabe.ts +105 -0
  325. package/src/mx/curp.spec.ts +28 -0
  326. package/src/mx/curp.ts +261 -0
  327. package/src/mx/index.ts +3 -0
  328. package/src/mx/rfc.spec.ts +69 -0
  329. package/src/mx/rfc.ts +193 -0
  330. package/src/my/index.ts +1 -0
  331. package/src/my/nric.spec.ts +40 -0
  332. package/src/my/nric.ts +91 -0
  333. package/src/nl/bsn.spec.ts +68 -0
  334. package/src/nl/bsn.ts +81 -0
  335. package/src/nl/btw.spec.ts +40 -0
  336. package/src/nl/btw.ts +95 -0
  337. package/src/nl/index.ts +3 -0
  338. package/src/nl/onderwijsnummer.spec.ts +34 -0
  339. package/src/nl/onderwijsnummer.ts +77 -0
  340. package/src/no/fodselsnummer.spec.ts +56 -0
  341. package/src/no/fodselsnummer.ts +118 -0
  342. package/src/no/index.ts +4 -0
  343. package/src/no/kontonr.spec.ts +34 -0
  344. package/src/no/kontonr.ts +84 -0
  345. package/src/no/mva.spec.ts +28 -0
  346. package/src/no/mva.ts +80 -0
  347. package/src/no/orgnr.spec.ts +28 -0
  348. package/src/no/orgnr.ts +75 -0
  349. package/src/nz/bank.spec.ts +28 -0
  350. package/src/nz/bank.ts +238 -0
  351. package/src/nz/index.ts +2 -0
  352. package/src/nz/ird.spec.ts +34 -0
  353. package/src/nz/ird.ts +102 -0
  354. package/src/pe/ce.spec.ts +46 -0
  355. package/src/pe/ce.ts +61 -0
  356. package/src/pe/cui.spec.ts +28 -0
  357. package/src/pe/cui.ts +85 -0
  358. package/src/pe/index.ts +3 -0
  359. package/src/pe/ruc.spec.ts +46 -0
  360. package/src/pe/ruc.ts +84 -0
  361. package/src/pk/cnic.spec.ts +34 -0
  362. package/src/pk/cnic.ts +97 -0
  363. package/src/pk/index.ts +2 -0
  364. package/src/pk/ntn.spec.ts +22 -0
  365. package/src/pk/ntn.ts +65 -0
  366. package/src/pl/index.ts +3 -0
  367. package/src/pl/nip.spec.ts +34 -0
  368. package/src/pl/nip.ts +74 -0
  369. package/src/pl/pesel.spec.ts +34 -0
  370. package/src/pl/pesel.ts +97 -0
  371. package/src/pl/regon.spec.ts +52 -0
  372. package/src/pl/regon.ts +88 -0
  373. package/src/pt/cc.spec.ts +43 -0
  374. package/src/pt/cc.ts +74 -0
  375. package/src/pt/index.ts +3 -0
  376. package/src/pt/nif.spec.ts +28 -0
  377. package/src/pt/nif.ts +78 -0
  378. package/src/pt/nipc.ts +27 -0
  379. package/src/py/cedula.spec.ts +46 -0
  380. package/src/py/cedula.ts +73 -0
  381. package/src/py/index.ts +2 -0
  382. package/src/py/ruc.spec.ts +40 -0
  383. package/src/py/ruc.ts +93 -0
  384. package/src/ro/cif.spec.ts +40 -0
  385. package/src/ro/cif.ts +62 -0
  386. package/src/ro/cnp.spec.ts +50 -0
  387. package/src/ro/cnp.ts +158 -0
  388. package/src/ro/cui.spec.ts +28 -0
  389. package/src/ro/cui.ts +83 -0
  390. package/src/ro/index.ts +4 -0
  391. package/src/ro/onrc.spec.ts +28 -0
  392. package/src/ro/onrc.ts +109 -0
  393. package/src/rs/index.ts +2 -0
  394. package/src/rs/jmbg.ts +16 -0
  395. package/src/rs/pib.spec.ts +28 -0
  396. package/src/rs/pib.ts +69 -0
  397. package/src/ru/index.ts +1 -0
  398. package/src/ru/inn.spec.ts +32 -0
  399. package/src/ru/inn.ts +106 -0
  400. package/src/se/index.ts +3 -0
  401. package/src/se/orgnr.spec.ts +28 -0
  402. package/src/se/orgnr.ts +68 -0
  403. package/src/se/personnummer.spec.ts +45 -0
  404. package/src/se/personnummer.ts +143 -0
  405. package/src/se/vat.spec.ts +28 -0
  406. package/src/se/vat.ts +73 -0
  407. package/src/sg/index.ts +1 -0
  408. package/src/sg/uen.spec.ts +46 -0
  409. package/src/sg/uen.ts +209 -0
  410. package/src/si/ddv.spec.ts +28 -0
  411. package/src/si/ddv.ts +76 -0
  412. package/src/si/emso.spec.ts +15 -0
  413. package/src/si/emso.ts +27 -0
  414. package/src/si/index.ts +3 -0
  415. package/src/si/jmbg.ts +20 -0
  416. package/src/sk/dph.spec.ts +28 -0
  417. package/src/sk/dph.ts +71 -0
  418. package/src/sk/index.ts +2 -0
  419. package/src/sk/rc.ts +12 -0
  420. package/src/sm/coe.spec.ts +34 -0
  421. package/src/sm/coe.ts +80 -0
  422. package/src/sm/index.ts +1 -0
  423. package/src/sv/index.ts +1 -0
  424. package/src/sv/nit.spec.ts +34 -0
  425. package/src/sv/nit.ts +117 -0
  426. package/src/th/idnr.spec.ts +41 -0
  427. package/src/th/idnr.ts +80 -0
  428. package/src/th/index.ts +3 -0
  429. package/src/th/moa.spec.ts +62 -0
  430. package/src/th/moa.ts +85 -0
  431. package/src/th/tin.spec.ts +77 -0
  432. package/src/th/tin.ts +56 -0
  433. package/src/tn/index.ts +1 -0
  434. package/src/tn/mf.spec.ts +37 -0
  435. package/src/tn/mf.ts +169 -0
  436. package/src/tr/index.ts +2 -0
  437. package/src/tr/tckimlik.spec.ts +40 -0
  438. package/src/tr/tckimlik.ts +87 -0
  439. package/src/tr/vkn.spec.ts +28 -0
  440. package/src/tr/vkn.ts +87 -0
  441. package/src/tw/ban.spec.ts +28 -0
  442. package/src/tw/ban.ts +67 -0
  443. package/src/tw/index.ts +5 -0
  444. package/src/tw/natid.spec.ts +41 -0
  445. package/src/tw/natid.ts +109 -0
  446. package/src/tw/tax_code.spec.ts +34 -0
  447. package/src/tw/tax_code.ts +98 -0
  448. package/src/tw/ubn.spec.ts +28 -0
  449. package/src/tw/ubn.ts +80 -0
  450. package/src/tw/ui.spec.ts +49 -0
  451. package/src/tw/ui.ts +111 -0
  452. package/src/types.ts +82 -0
  453. package/src/ua/edrpou.spec.ts +28 -0
  454. package/src/ua/edrpou.ts +88 -0
  455. package/src/ua/index.ts +2 -0
  456. package/src/ua/rntrc.spec.ts +28 -0
  457. package/src/ua/rntrc.ts +77 -0
  458. package/src/us/ein.spec.ts +28 -0
  459. package/src/us/ein.ts +179 -0
  460. package/src/us/index.ts +2 -0
  461. package/src/us/ssn.spec.ts +28 -0
  462. package/src/us/ssn.ts +117 -0
  463. package/src/util/checksum.spec.ts +70 -0
  464. package/src/util/checksum.ts +258 -0
  465. package/src/util/index.ts +13 -0
  466. package/src/util/isValidDate.spec.ts +49 -0
  467. package/src/util/isValidDate.ts +87 -0
  468. package/src/util/iso7064.spec.ts +17 -0
  469. package/src/util/iso7064.ts +8 -0
  470. package/src/util/pymod.ts +8 -0
  471. package/src/util/strings/char.ts +18 -0
  472. package/src/util/strings/clean.spec.ts +15 -0
  473. package/src/util/strings/clean.ts +305 -0
  474. package/src/util/strings/format.ts +18 -0
  475. package/src/util/strings/index.ts +5 -0
  476. package/src/util/strings/reverseString.ts +3 -0
  477. package/src/util/strings/splitAt.spec.ts +15 -0
  478. package/src/util/strings/splitAt.ts +16 -0
  479. package/src/uy/cedula.spec.ts +28 -0
  480. package/src/uy/cedula.ts +74 -0
  481. package/src/uy/index.ts +3 -0
  482. package/src/uy/nie.spec.ts +28 -0
  483. package/src/uy/nie.ts +84 -0
  484. package/src/uy/rut.spec.ts +34 -0
  485. package/src/uy/rut.ts +99 -0
  486. package/src/ve/index.ts +1 -0
  487. package/src/ve/rif.spec.ts +38 -0
  488. package/src/ve/rif.ts +92 -0
  489. package/src/vn/index.ts +1 -0
  490. package/src/vn/mst.spec.ts +40 -0
  491. package/src/vn/mst.ts +100 -0
  492. package/src/za/idnr.spec.ts +28 -0
  493. package/src/za/idnr.ts +84 -0
  494. package/src/za/index.ts +2 -0
  495. package/src/za/tin.spec.ts +28 -0
  496. package/src/za/tin.ts +75 -0
package/src/dk/cvr.ts ADDED
@@ -0,0 +1,81 @@
1
+ /**
2
+ * CVR (Momsregistreringsnummer, Danish VAT number).
3
+ *
4
+ * The CVR (Momsregistreringsnummer, VAT) is an 8 digit number with a
5
+ * straightforward check mechanism
6
+ *
7
+ * ENTITY
8
+ */
9
+
10
+ import * as exceptions from '../exceptions';
11
+ import { strings } from '../util';
12
+ import { Validator, ValidateReturn } from '../types';
13
+ import { weightedSum } from '../util/checksum';
14
+
15
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
16
+ const [value, err] = strings.cleanUnicode(input, ' -');
17
+ if (err !== null) {
18
+ return [value, err];
19
+ }
20
+ if (value.startsWith('DK')) {
21
+ return [value.substr(2), null];
22
+ }
23
+
24
+ return [value, null];
25
+ }
26
+
27
+ const impl: Validator = {
28
+ name: 'Danish VAT Number',
29
+ localName: 'Momsregistreringsnummer',
30
+ abbreviation: 'CVR',
31
+
32
+ compact(input: string): string {
33
+ const [value, err] = clean(input);
34
+
35
+ if (err) {
36
+ throw err;
37
+ }
38
+
39
+ return value;
40
+ },
41
+
42
+ format(input: string): string {
43
+ const [value] = clean(input);
44
+
45
+ return value;
46
+ },
47
+
48
+ validate(input: string): ValidateReturn {
49
+ const [value, error] = clean(input);
50
+
51
+ if (error) {
52
+ return { isValid: false, error };
53
+ }
54
+ if (value.length !== 8) {
55
+ return { isValid: false, error: new exceptions.InvalidLength() };
56
+ }
57
+ if (!strings.isdigits(value)) {
58
+ return { isValid: false, error: new exceptions.InvalidFormat() };
59
+ }
60
+
61
+ const [front, check] = strings.splitAt(value, -1);
62
+
63
+ const sum = weightedSum(front, {
64
+ modulus: 11,
65
+ weights: [2, 7, 6, 5, 4, 3, 2, 1],
66
+ });
67
+ if (String((11 - sum) % 10) !== check) {
68
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
69
+ }
70
+
71
+ return {
72
+ isValid: true,
73
+ compact: value,
74
+ isIndividual: false,
75
+ isCompany: true,
76
+ };
77
+ },
78
+ };
79
+
80
+ export const { name, localName, abbreviation, validate, format, compact } =
81
+ impl;
@@ -0,0 +1,2 @@
1
+ export * as cpr from './cpr';
2
+ export * as cvr from './cvr';
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './cedula';
2
+ import { InvalidLength, InvalidFormat, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('do/cedula', () => {
5
+ it('format:00113918205', () => {
6
+ const result = format('00113918205');
7
+
8
+ expect(result).toEqual('001-1391820-5');
9
+ });
10
+
11
+ it('validate:00113918205', () => {
12
+ const result = validate('00113918205');
13
+
14
+ expect(result.isValid && result.compact).toEqual('00113918205');
15
+ });
16
+
17
+ it('validate:0011391820Q', () => {
18
+ const result = validate('0011391820Q');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidFormat);
21
+ });
22
+
23
+ it('validate:001139182', () => {
24
+ const result = validate('001139182');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+
29
+ it('validate:00113918204', () => {
30
+ const result = validate('00113918204');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
33
+ });
34
+ });
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Cedula (Dominican Republic national identification number).
3
+ *
4
+ * A cedula is is an 11-digit number issues by the Dominican Republic government
5
+ * to citizens or residents for identification purposes.
6
+ *
7
+ * Source
8
+ *
9
+ * VAT PERSON
10
+ */
11
+
12
+ import * as exceptions from '../exceptions';
13
+ import { strings } from '../util';
14
+ import { Validator, ValidateReturn } from '../types';
15
+ import { luhnChecksumValidate } from '../util/checksum';
16
+
17
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
18
+ return strings.cleanUnicode(input, ' -');
19
+ }
20
+
21
+ const impl: Validator = {
22
+ name: 'Dominican Republic National Identification Number',
23
+ localName: 'Cedula',
24
+ compact(input: string): string {
25
+ const [value, err] = clean(input);
26
+
27
+ if (err) {
28
+ throw err;
29
+ }
30
+
31
+ return value;
32
+ },
33
+
34
+ format(input: string): string {
35
+ const [value] = clean(input);
36
+
37
+ return strings.splitAt(value, 3, 10).join('-');
38
+ },
39
+
40
+ validate(input: string): ValidateReturn {
41
+ const [value, error] = clean(input);
42
+
43
+ if (error) {
44
+ return { isValid: false, error };
45
+ }
46
+ if (value.length !== 11) {
47
+ return { isValid: false, error: new exceptions.InvalidLength() };
48
+ }
49
+ if (!strings.isdigits(value.substr(1))) {
50
+ return { isValid: false, error: new exceptions.InvalidFormat() };
51
+ }
52
+
53
+ if (!luhnChecksumValidate(value)) {
54
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
55
+ }
56
+
57
+ return {
58
+ isValid: true,
59
+ compact: value,
60
+ isIndividual: true,
61
+ isCompany: false,
62
+ };
63
+ },
64
+ };
65
+
66
+ export const { name, localName, abbreviation, validate, format, compact } =
67
+ impl;
@@ -0,0 +1,3 @@
1
+ export * as cedula from './cedula';
2
+ export * as ncf from './ncf';
3
+ export * as rnc from './rnc';
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './ncf';
2
+ import { InvalidLength, InvalidComponent } from '../exceptions';
3
+
4
+ describe('do/ncf', () => {
5
+ it('format:E31 000000 0005', () => {
6
+ const result = format('E31 000000 0005');
7
+
8
+ expect(result).toEqual('E310000000005');
9
+ });
10
+
11
+ it('validate:E310000000005', () => {
12
+ const result = validate('E310000000005');
13
+
14
+ expect(result.isValid && result.compact).toEqual('E310000000005');
15
+ });
16
+
17
+ it('validate:B0100000005', () => {
18
+ const result = validate('B0100000005');
19
+
20
+ expect(result.isValid && result.compact).toEqual('B0100000005');
21
+ });
22
+
23
+ it('validate:Z0100000005', () => {
24
+ const result = validate('Z0100000005');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidComponent);
27
+ });
28
+
29
+ it('validate:Z0100', () => {
30
+ const result = validate('Z0100');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+ });
package/src/do/ncf.ts ADDED
@@ -0,0 +1,133 @@
1
+ /**
2
+ * NCF (Números de Comprobante Fiscal, Dominican Republic receipt number).
3
+ *
4
+ * The NCF is used to number invoices and other documents for the purpose of tax
5
+ * filing. The e-CF (Comprobante Fiscal Electrónico) is used together with a
6
+ * digital certificate for the same purpose. The number is either 19, 11 or 13
7
+ * (e-CF) digits long.
8
+ *
9
+ * The 19 digit number starts wit a letter (A or P) to indicate that the number
10
+ * was assigned by the taxpayer or the DGII, followed a 2-digit business unit
11
+ * number, a 3-digit location number, a 3-digit mechanism identifier, a 2-digit
12
+ * document type and a 8-digit serial number.
13
+ *
14
+ * The 11 digit number always starts with a B followed a 2-digit document type
15
+ * and a 7-digit serial number.
16
+ *
17
+ * The 13 digit e-CF starts with an E followed a 2-digit document type and an
18
+ * 8-digit serial number.
19
+ *
20
+ * Source
21
+ * https://www.dgii.gov.do/
22
+ * https://dgii.gov.do/workshopProveedoresTI-eCE/Documents/Norma05-19.pdf
23
+ * https://dgii.gov.do/cicloContribuyente/facturacion/comprobantesFiscales/Paginas/tiposComprobantes.aspx
24
+ *
25
+ * VAT ENTITY
26
+ */
27
+
28
+ import * as exceptions from '../exceptions';
29
+ import { strings } from '../util';
30
+ import { Validator, ValidateReturn } from '../types';
31
+
32
+ const ncfTypes = [
33
+ '01', // invoices for fiscal declaration (or tax reporting)
34
+ '02', // invoices for final consumer
35
+ '03', // debit note
36
+ '04', // credit note (refunds)
37
+ '11', // informal supplier invoices (purchases)
38
+ '12', // single income invoices
39
+ '13', // minor expenses invoices (purchases)
40
+ '14', // invoices for special customers (tourists, free zones)
41
+ '15', // invoices for the government
42
+ '16', // invoices for export
43
+ '17', // invoices for payments abroad
44
+ ];
45
+
46
+ const ecfTypes = [
47
+ '31', // invoices for fiscal declaration (or tax reporting)
48
+ '32', // invoices for final consumer
49
+ '33', // debit note
50
+ '34', // credit note (refunds)
51
+ '41', // supplier invoices (purchases)
52
+ '43', // minor expenses invoices (purchases)
53
+ '44', // invoices for special customers (tourists, free zones)
54
+ '45', // invoices for the government
55
+ '46', // invoices for exports
56
+ '47', // invoices for foreign payments
57
+ ];
58
+
59
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
60
+ return strings.cleanUnicode(input, ' ');
61
+ }
62
+
63
+ const impl: Validator = {
64
+ name: 'Dominican Republic Receipt Number',
65
+ localName: 'Números de Comprobante Fiscal',
66
+ abbreviation: 'NCF',
67
+ compact(input: string): string {
68
+ const [value, err] = clean(input);
69
+
70
+ if (err) {
71
+ throw err;
72
+ }
73
+
74
+ return value;
75
+ },
76
+
77
+ format(input: string): string {
78
+ const [value] = clean(input);
79
+
80
+ return value;
81
+ },
82
+
83
+ validate(input: string): ValidateReturn {
84
+ const [value, error] = clean(input);
85
+
86
+ if (error) {
87
+ return { isValid: false, error };
88
+ }
89
+ if (value.length === 13) {
90
+ if (!value.startsWith('E')) {
91
+ return { isValid: false, error: new exceptions.InvalidComponent() };
92
+ }
93
+ if (!strings.isdigits(value.substr(1))) {
94
+ return { isValid: false, error: new exceptions.InvalidComponent() };
95
+ }
96
+ if (!ecfTypes.includes(value.substr(1, 2))) {
97
+ return { isValid: false, error: new exceptions.InvalidComponent() };
98
+ }
99
+ } else if (value.length === 11) {
100
+ if (!value.startsWith('B')) {
101
+ return { isValid: false, error: new exceptions.InvalidComponent() };
102
+ }
103
+ if (!strings.isdigits(value.substr(1))) {
104
+ return { isValid: false, error: new exceptions.InvalidComponent() };
105
+ }
106
+ if (!ncfTypes.includes(value.substr(1, 2))) {
107
+ return { isValid: false, error: new exceptions.InvalidComponent() };
108
+ }
109
+ } else if (value.length === 19) {
110
+ if (!value.startsWith('AP')) {
111
+ return { isValid: false, error: new exceptions.InvalidComponent() };
112
+ }
113
+ if (!strings.isdigits(value.substr(2))) {
114
+ return { isValid: false, error: new exceptions.InvalidComponent() };
115
+ }
116
+ if (!ncfTypes.includes(value.substr(9, 2))) {
117
+ return { isValid: false, error: new exceptions.InvalidComponent() };
118
+ }
119
+ } else {
120
+ return { isValid: false, error: new exceptions.InvalidLength() };
121
+ }
122
+
123
+ return {
124
+ isValid: true,
125
+ compact: value,
126
+ isIndividual: false,
127
+ isCompany: true,
128
+ };
129
+ },
130
+ };
131
+
132
+ export const { name, localName, abbreviation, validate, format, compact } =
133
+ impl;
@@ -0,0 +1,40 @@
1
+ import { validate, format } from './rnc';
2
+ import { InvalidLength, InvalidChecksum, InvalidFormat } from '../exceptions';
3
+
4
+ describe('do/rnc', () => {
5
+ it('format:101850043', () => {
6
+ const result = format('101850043');
7
+
8
+ expect(result).toEqual('1-01-85004-3');
9
+ });
10
+
11
+ it('validate:1-01-85004-3', () => {
12
+ const result = validate('1-01-85004-3');
13
+
14
+ expect(result.isValid && result.compact).toEqual('101850043');
15
+ });
16
+
17
+ it('validate:401505967', () => {
18
+ const result = validate('401505967');
19
+
20
+ expect(result.isValid && result.compact).toEqual('401505967');
21
+ });
22
+
23
+ it('validate:1018A0043', () => {
24
+ const result = validate('1018A0043');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidFormat);
27
+ });
28
+
29
+ it('validate:10185004', () => {
30
+ const result = validate('10185004');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+
35
+ it('validate:101850042', () => {
36
+ const result = validate('101850042');
37
+
38
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
39
+ });
40
+ });
package/src/do/rnc.ts ADDED
@@ -0,0 +1,74 @@
1
+ /**
2
+ * RNC (Registro Nacional del Contribuyente, Dominican Republic tax number).
3
+ *
4
+ * The RNC is the Dominican Republic taxpayer registration number for
5
+ * institutions. The number consists of 9 digits.
6
+ *
7
+ * Source
8
+ *
9
+ * TAX ENTITY
10
+ */
11
+
12
+ import * as exceptions from '../exceptions';
13
+ import { strings, weightedSum } from '../util';
14
+ import { Validator, ValidateReturn } from '../types';
15
+
16
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
17
+ return strings.cleanUnicode(input, ' -');
18
+ }
19
+
20
+ const impl: Validator = {
21
+ name: 'Dominican Republic Tax Number',
22
+ localName: 'Registro Nacional del Contribuyente',
23
+ abbreviation: 'RNC',
24
+ compact(input: string): string {
25
+ const [value, err] = clean(input);
26
+
27
+ if (err) {
28
+ throw err;
29
+ }
30
+
31
+ return value;
32
+ },
33
+
34
+ format(input: string): string {
35
+ const [value] = clean(input);
36
+
37
+ return strings.splitAt(value, 1, 3, -1).join('-');
38
+ },
39
+
40
+ validate(input: string): ValidateReturn {
41
+ const [value, error] = clean(input);
42
+
43
+ if (error) {
44
+ return { isValid: false, error };
45
+ }
46
+ if (value.length !== 9) {
47
+ return { isValid: false, error: new exceptions.InvalidLength() };
48
+ }
49
+ if (!strings.isdigits(value)) {
50
+ return { isValid: false, error: new exceptions.InvalidFormat() };
51
+ }
52
+
53
+ const [front, check] = strings.splitAt(value, 8);
54
+
55
+ const sum = weightedSum(front, {
56
+ weights: [7, 9, 8, 6, 5, 4, 3, 2],
57
+ modulus: 11,
58
+ });
59
+
60
+ if (String(((10 - sum) % 9) + 1) !== check) {
61
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
62
+ }
63
+
64
+ return {
65
+ isValid: true,
66
+ compact: value,
67
+ isIndividual: false,
68
+ isCompany: true,
69
+ };
70
+ },
71
+ };
72
+
73
+ export const { name, localName, abbreviation, validate, format, compact } =
74
+ impl;
@@ -0,0 +1 @@
1
+ export * as nif from './nif';
@@ -0,0 +1,39 @@
1
+ import { validate, format } from './nif';
2
+ import { InvalidLength, InvalidFormat } from '../exceptions';
3
+
4
+ describe('dz/nif', () => {
5
+ it('format:000 216 001 808 337 13010', () => {
6
+ const result = format('000 216 001 808 337 13010');
7
+
8
+ expect(result).toEqual('00021600180833713010');
9
+ });
10
+
11
+ it('fvalidate:000 216 001 808 337 13010', () => {
12
+ const result = validate('000 216 001 808 337 13010');
13
+
14
+ expect(result.isValid && result.compact).toEqual('00021600180833713010');
15
+ });
16
+
17
+ test.each([
18
+ '416001000000007',
19
+ '408 020 000 150 039',
20
+ '41201600000606600001',
21
+ '000 216 001 808 337 13010',
22
+ ])('validate:%s', value => {
23
+ const result = validate(value);
24
+
25
+ expect(result.isValid).toEqual(true);
26
+ });
27
+
28
+ it('validate:X1600100000000V', () => {
29
+ const result = validate('X1600100000000V');
30
+
31
+ expect(result.error).toBeInstanceOf(InvalidFormat);
32
+ });
33
+
34
+ it('validate:41600100000000', () => {
35
+ const result = validate('41600100000000');
36
+
37
+ expect(result.error).toBeInstanceOf(InvalidLength);
38
+ });
39
+ });
package/src/dz/nif.ts ADDED
@@ -0,0 +1,80 @@
1
+ /**
2
+ * NIF, sometimes N.I.F. (Numéro d'Identification Fiscale, Algeria tax number).
3
+ *
4
+ * The NIF was adopted by the Algerian tax authorities on 2006, replacing the NIS
5
+ * number.
6
+ *
7
+ * The NIF applies to physical persons, legal persons, legal entities,
8
+ * administrative entities, local branches for foreign companies, associations,
9
+ * professional organisations, etc.
10
+ *
11
+ * The NIF consists of 15 digits, but sometimes it can be 20 digits long in order
12
+ * to represent branches or secondary establishments.
13
+ *
14
+ * Source
15
+ * http://www.jecreemonentreprise.dz/index.php?option=com_content&view=article&id=612&Itemid=463&lang=fr
16
+ * https://www.mf.gov.dz/index.php/fr/fiscalite
17
+ * https://cnrcinfo.cnrc.dz/numero-didentification-fiscale-nif/
18
+ * https://nifenligne.mfdgi.gov.dz/
19
+ * http://nif.mfdgi.gov.dz/nif.asp
20
+ *
21
+ * ENTITY/PERSON
22
+ */
23
+
24
+ import * as exceptions from '../exceptions';
25
+ import { strings } from '../util';
26
+ import { Validator, ValidateReturn } from '../types';
27
+
28
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
29
+ return strings.cleanUnicode(input, ' -');
30
+ }
31
+
32
+ // const validRe = /^[PCGQV]{1}00[A-Z0-9]{8}$/;
33
+
34
+ // const ALPHABET = '0123456789X';
35
+
36
+ const impl: Validator = {
37
+ name: 'Algeria tax number',
38
+ localName: "Numéro d'Identification Fiscale",
39
+ abbreviation: 'NIF',
40
+
41
+ compact(input: string): string {
42
+ const [value, err] = clean(input);
43
+
44
+ if (err) {
45
+ throw err;
46
+ }
47
+
48
+ return value;
49
+ },
50
+
51
+ format(input: string): string {
52
+ const [value] = clean(input);
53
+
54
+ return value;
55
+ },
56
+
57
+ validate(input: string): ValidateReturn {
58
+ const [value, error] = clean(input);
59
+
60
+ if (error) {
61
+ return { isValid: false, error };
62
+ }
63
+ if (value.length !== 15 && value.length !== 20) {
64
+ return { isValid: false, error: new exceptions.InvalidLength() };
65
+ }
66
+ if (!strings.isdigits(value)) {
67
+ return { isValid: false, error: new exceptions.InvalidFormat() };
68
+ }
69
+
70
+ return {
71
+ isValid: true,
72
+ compact: value,
73
+ isIndividual: false,
74
+ isCompany: false,
75
+ };
76
+ },
77
+ };
78
+
79
+ export const { name, localName, abbreviation, validate, format, compact } =
80
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './ci';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('ec/ci', () => {
5
+ it('format:1714307103', () => {
6
+ const result = format('1714307103');
7
+
8
+ expect(result).toEqual('171430710-3');
9
+ });
10
+
11
+ it('validate:171430710-3', () => {
12
+ const result = validate('171430710-3');
13
+
14
+ expect(result.isValid && result.compact).toEqual('1714307103');
15
+ });
16
+
17
+ it('validate:171430710', () => {
18
+ const result = validate('171430710');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:1714307104', () => {
24
+ const result = validate('1714307104');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });