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/tr/vkn.ts ADDED
@@ -0,0 +1,87 @@
1
+ /**
2
+ * VKN (Vergi Kimlik Numarası, Turkish tax identification number).
3
+ *
4
+ * The Vergi Kimlik Numarası is the Turkish tax identification number used for
5
+ * businesses. The number consists of 10 digits where the first digit is derived
6
+ * from the company name.
7
+ *
8
+ * Source:
9
+ * https://www.turkiye.gov.tr/gib-intvrg-vergi-kimlik-numarasi-dogrulama
10
+ *
11
+ * ENTITY
12
+ */
13
+
14
+ import * as exceptions from '../exceptions';
15
+ import { strings } from '../util';
16
+ import { Validator, ValidateReturn } from '../types';
17
+
18
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
19
+ return strings.cleanUnicode(input, '');
20
+ }
21
+
22
+ const impl: Validator = {
23
+ name: 'Turkish Tax Identification Number',
24
+ localName: 'Vergi Kimlik Numarası',
25
+ abbreviation: 'VKN',
26
+ compact(input: string): string {
27
+ const [value, err] = clean(input);
28
+
29
+ if (err) {
30
+ throw err;
31
+ }
32
+
33
+ return value;
34
+ },
35
+
36
+ format(input: string): string {
37
+ const [value] = clean(input);
38
+
39
+ return value;
40
+ },
41
+
42
+ validate(input: string): ValidateReturn {
43
+ const [value, error] = clean(input);
44
+
45
+ if (error) {
46
+ return { isValid: false, error };
47
+ }
48
+ if (value.length !== 10) {
49
+ return { isValid: false, error: new exceptions.InvalidLength() };
50
+ }
51
+ if (!strings.isdigits(value)) {
52
+ return { isValid: false, error: new exceptions.InvalidFormat() };
53
+ }
54
+
55
+ const [front, check] = strings.splitAt(value, -1);
56
+
57
+ const sum = front
58
+ .split('')
59
+ .map((v, i) => (parseInt(v, 10) + 9 - i) % 10)
60
+ .map((v, i) => {
61
+ if (v === 0) {
62
+ return v;
63
+ }
64
+
65
+ return (v * 2 ** (9 - i)) % 9 || 9;
66
+ })
67
+ .reduce((acc, v) => (acc + v) % 10);
68
+
69
+ // (acc, v, idx) => acc + (v === 9 ? v : (v * 2 ** (9 - idx)) % 9),
70
+ // 10,
71
+ // );
72
+
73
+ if (String((10 - sum) % 10) !== check) {
74
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
75
+ }
76
+
77
+ return {
78
+ isValid: true,
79
+ compact: value,
80
+ isIndividual: false,
81
+ isCompany: true,
82
+ };
83
+ },
84
+ };
85
+
86
+ export const { name, localName, abbreviation, validate, format, compact } =
87
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './ban';
2
+ import { InvalidLength, InvalidFormat } from '../exceptions';
3
+
4
+ describe('tw/ban', () => {
5
+ it('format:0050150 3', () => {
6
+ const result = format('0050150 3');
7
+
8
+ expect(result).toEqual('00501503');
9
+ });
10
+
11
+ it('validate:00501503', () => {
12
+ const result = validate('00501503');
13
+
14
+ expect(result.isValid && result.compact).toEqual('00501503');
15
+ });
16
+
17
+ it('validate:12345', () => {
18
+ const result = validate('12345');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:12345AAA', () => {
24
+ const result = validate('12345AAA');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidFormat);
27
+ });
28
+ });
package/src/tw/ban.ts ADDED
@@ -0,0 +1,67 @@
1
+ /**
2
+ * BAN
3
+ *
4
+ * The BAN of a business entity is shown on the company registration certificate or
5
+ * business registration certificate. For non-profit organizations, the BAN is shown
6
+ * on the BAN-issuance notification.
7
+ *
8
+ * Sources:
9
+ * https://www.mof.gov.tw/Eng/download/16968
10
+ *
11
+ * ENTITY
12
+ */
13
+
14
+ import { ValidateReturn } from '../types';
15
+ import * as exceptions from '../exceptions';
16
+ import { strings } from '../util';
17
+
18
+ function clean(input: string) {
19
+ return strings.cleanUnicode(input, ' -');
20
+ }
21
+
22
+ const impl = {
23
+ abbreviation: 'BAN',
24
+ name: 'Taiwanese Unified Business Number',
25
+ localName: '統一編號',
26
+
27
+ compact(input: string): string {
28
+ const [value, err] = clean(input);
29
+
30
+ if (err) {
31
+ throw err;
32
+ }
33
+
34
+ return value;
35
+ },
36
+
37
+ format(input: string): string {
38
+ const [value] = clean(input);
39
+
40
+ return value;
41
+ },
42
+
43
+ validate(input: string): ValidateReturn {
44
+ const [value, error] = clean(input);
45
+
46
+ if (error) {
47
+ return { isValid: false, error };
48
+ }
49
+ if (value.length !== 8) {
50
+ return { isValid: false, error: new exceptions.InvalidLength() };
51
+ }
52
+ if (!strings.isdigits(value)) {
53
+ return { isValid: false, error: new exceptions.InvalidFormat() };
54
+ }
55
+
56
+ return {
57
+ isValid: true,
58
+ compact: value,
59
+ isIndividual: false,
60
+ isCompany: true,
61
+ };
62
+ },
63
+ };
64
+
65
+ export const { name, localName, abbreviation, validate, format, compact } =
66
+ impl;
67
+ export default impl;
@@ -0,0 +1,5 @@
1
+ export * as ubn from './ubn';
2
+ export * as ban from './ban';
3
+ export * as natid from './natid';
4
+ export * as ui from './ui';
5
+ export * as tax_code from './tax_code';
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './natid';
2
+ import { InvalidLength, InvalidComponent } from '../exceptions';
3
+
4
+ describe('tw/natid', () => {
5
+ it('format:0050150 3', () => {
6
+ const result = format('005-0150 3');
7
+
8
+ expect(result).toEqual('00501503');
9
+ });
10
+
11
+ it('validate:A200501503', () => {
12
+ const result = validate('A200501503');
13
+
14
+ expect(result.isValid && result.compact).toEqual('A200501503');
15
+ });
16
+
17
+ it('validate:12345', () => {
18
+ const result = validate('12345');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:12345AAAA', () => {
24
+ const result = validate('12345AAA1A');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidComponent);
27
+ });
28
+ });
@@ -0,0 +1,105 @@
1
+ /**
2
+ * National ID Card Number
3
+ *
4
+ * The National ID Card Number is shown on the ID card of the R.O.C., the
5
+ * household certificate, and the passport.
6
+ *
7
+ * A ten-digit code with the first an alphabetic letter followed by a
8
+ * nine-digit numeric string. The alphabetic letter is the area code
9
+ * of the municipality/county/city in which the individual applies
10
+ * for household registration. The leading number represents gender:
11
+ * “1” for males and “2” for females. The last number is a check
12
+ * digit.
13
+ *
14
+ * Note: NATID and UI only differ by gender coding
15
+ *
16
+ * Sources:
17
+ * https://www.mof.gov.tw/Eng/download/16968
18
+ * https://en.wikipedia.org/wiki/National_identification_card_(Taiwan)
19
+ *
20
+ * PERSON
21
+ */
22
+
23
+ import { ValidateReturn } from '../types';
24
+ import * as exceptions from '../exceptions';
25
+ import { strings, weightedSum } from '../util';
26
+
27
+ function clean(input: string) {
28
+ return strings.cleanUnicode(input, ' -');
29
+ }
30
+
31
+ // ID Encoding alphabet
32
+ //
33
+ // A: 10 B: 11 C: 12 D: 13 E: 14 F: 15 G: 16 H: 17 I: 34
34
+ // J: 18 K: 19 L: 20 M: 21 N: 22 O: 35 P: 23 Q: 24 R: 25
35
+ // S: 26 T: 27 U: 28 V: 29 W: 32 X: 30 Y: 31 Z: 33
36
+ //
37
+ export const ALPHABET = '0123456789ABCDEFGHJKLMNPQRSTUVXYWZIO';
38
+
39
+ const impl = {
40
+ localName: '中華民國國民身分證',
41
+ abbreviation: 'NATID',
42
+ name: 'National ID Number',
43
+
44
+ compact(input: string): string {
45
+ const [value, err] = clean(input);
46
+
47
+ if (err) {
48
+ throw err;
49
+ }
50
+
51
+ return value;
52
+ },
53
+
54
+ format(input: string): string {
55
+ const [value] = clean(input);
56
+
57
+ return value;
58
+ },
59
+
60
+ validate(input: string): ValidateReturn {
61
+ const [value, error] = clean(input);
62
+
63
+ if (error) {
64
+ return { isValid: false, error };
65
+ }
66
+ if (value.length !== 10) {
67
+ return { isValid: false, error: new exceptions.InvalidLength() };
68
+ }
69
+
70
+ const [issuer, gender, code, check] = strings.splitAt(value, 1, 2, 9);
71
+
72
+ if (!strings.isalpha(issuer)) {
73
+ return { isValid: false, error: new exceptions.InvalidComponent() };
74
+ }
75
+ if (!['1', '2'].includes(gender)) {
76
+ return { isValid: false, error: new exceptions.InvalidComponent() };
77
+ }
78
+ if (!strings.isdigits(code)) {
79
+ return { isValid: false, error: new exceptions.InvalidComponent() };
80
+ }
81
+ if (!strings.isdigits(check)) {
82
+ return { isValid: false, error: new exceptions.InvalidComponent() };
83
+ }
84
+
85
+ const sum = weightedSum(value, {
86
+ weights: [1, 9, 8, 7, 6, 5, 4, 3, 2, 1],
87
+ alphabet: ALPHABET,
88
+ modulus: 10,
89
+ });
90
+ if (sum % 10 !== 0) {
91
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
92
+ }
93
+
94
+ return {
95
+ isValid: true,
96
+ compact: value,
97
+ isIndividual: true,
98
+ isCompany: false,
99
+ };
100
+ },
101
+ };
102
+
103
+ export const { name, localName, abbreviation, validate, format, compact } =
104
+ impl;
105
+ export default impl;
@@ -0,0 +1,34 @@
1
+ import { validate, format } from './tax_code';
2
+ import { InvalidLength, InvalidFormat } from '../exceptions';
3
+
4
+ describe('tw/tax_code', () => {
5
+ it('format:0050150 3', () => {
6
+ const result = format('0050150 3');
7
+
8
+ expect(result).toEqual('00501503');
9
+ });
10
+
11
+ test.each(['9000503', '2000 05 03 AA'])('validate:%s', value => {
12
+ const result = validate(value);
13
+
14
+ expect(result.isValid).toEqual(true);
15
+ });
16
+
17
+ it('validate:9 00 05 15', () => {
18
+ const result = validate('9 00 05 15');
19
+
20
+ expect(result.isValid && result.compact).toEqual('9000515');
21
+ });
22
+
23
+ it('validate:12345', () => {
24
+ const result = validate('12345');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidLength);
27
+ });
28
+
29
+ it('validate:12345AA', () => {
30
+ const result = validate('12345AA');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidFormat);
33
+ });
34
+ });
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Tax Code
3
+ *
4
+ * Individual taxpayers who have neither National ID Card Number nor UI Number
5
+ * (usually because they were not physically present or only stayed for a short
6
+ * period of time in the R.O.C.) may produce Tax Codes themselves as their TINs
7
+ * by reference to the coding princip
8
+ *
9
+ * Tax Code
10
+ * (1) For individuals of Mainland China area: a seven-digit code that begins with 9
11
+ * followed by the last two numbers of the individuals’ birth year and the four
12
+ * numbers of the individuals’ birth month and day (mmdd).
13
+ * (2) For individuals other than the ones indicated in (1): a ten-digit code that
14
+ * begins with the individuals’ date of birth (yyyymmdd), followed by the first
15
+ * two alphabetic letters of the individuals’ name on the passport.
16
+ *
17
+ * Sources:
18
+ * https://www.mof.gov.tw/Eng/download/16968
19
+ *
20
+ * PERSON
21
+ */
22
+
23
+ import { ValidateReturn } from '../types';
24
+ import * as exceptions from '../exceptions';
25
+ import {
26
+ isValidDateCompactYYMMDD,
27
+ isValidDateCompactYYYYMMDD,
28
+ strings,
29
+ } from '../util';
30
+
31
+ function clean(input: string) {
32
+ return strings.cleanUnicode(input, ' -');
33
+ }
34
+
35
+ const impl = {
36
+ abbreviation: '',
37
+ localName: '',
38
+ name: 'Tax Code',
39
+
40
+ compact(input: string): string {
41
+ const [value, err] = clean(input);
42
+
43
+ if (err) {
44
+ throw err;
45
+ }
46
+
47
+ return value;
48
+ },
49
+
50
+ format(input: string): string {
51
+ const [value] = clean(input);
52
+
53
+ return value;
54
+ },
55
+
56
+ validate(input: string): ValidateReturn {
57
+ const [value, error] = clean(input);
58
+
59
+ if (error) {
60
+ return { isValid: false, error };
61
+ }
62
+
63
+ if (value.length !== 10 && value.length !== 7) {
64
+ return { isValid: false, error: new exceptions.InvalidLength() };
65
+ }
66
+ if (value.length === 7) {
67
+ const [lead, yymmdd] = strings.splitAt(value, 1);
68
+ if (lead !== '9') {
69
+ return { isValid: false, error: new exceptions.InvalidFormat() };
70
+ }
71
+ if (!strings.isdigits(yymmdd)) {
72
+ return { isValid: false, error: new exceptions.InvalidFormat() };
73
+ }
74
+ if (!isValidDateCompactYYMMDD(yymmdd, true)) {
75
+ return { isValid: false, error: new exceptions.InvalidComponent() };
76
+ }
77
+ } else {
78
+ const [yyyymmdd, name] = strings.splitAt(value, 8);
79
+ if (!isValidDateCompactYYYYMMDD(yyyymmdd, true)) {
80
+ return { isValid: false, error: new exceptions.InvalidComponent() };
81
+ }
82
+ if (!/^[A-Z]+$/i.test(name)) {
83
+ return { isValid: false, error: new exceptions.InvalidComponent() };
84
+ }
85
+ }
86
+
87
+ return {
88
+ isValid: true,
89
+ compact: value,
90
+ isIndividual: true,
91
+ isCompany: false,
92
+ };
93
+ },
94
+ };
95
+
96
+ export const { name, localName, abbreviation, validate, format, compact } =
97
+ impl;
98
+ export default impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './ubn';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('tw/ubn', () => {
5
+ it('format:0050150 3', () => {
6
+ const result = format('0050150 3');
7
+
8
+ expect(result).toEqual('00501503');
9
+ });
10
+
11
+ it('validate:00501503', () => {
12
+ const result = validate('00501503');
13
+
14
+ expect(result.isValid && result.compact).toEqual('00501503');
15
+ });
16
+
17
+ it('validate:12345', () => {
18
+ const result = validate('12345');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:00501502', () => {
24
+ const result = validate('00501502');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
package/src/tw/ubn.ts ADDED
@@ -0,0 +1,80 @@
1
+ /**
2
+ * UBN (Unified Business Number, 統一編號, Taiwanese tax number).
3
+ *
4
+ * The Unified Business Number (UBN, 統一編號) is the number assigned to businesses
5
+ * within Taiwan for tax (VAT) purposes. The number consists of 8 digits, the
6
+ * last being a check digit.
7
+ *
8
+ * Source
9
+ * https://zh.wikipedia.org/wiki/統一編號
10
+ * https://findbiz.nat.gov.tw/fts/query/QueryBar/queryInit.do?request_locale=en
11
+ *
12
+ * ENTITY
13
+ */
14
+
15
+ import * as exceptions from '../exceptions';
16
+ import { strings } 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: 'Taiwanese Business Administration Number',
25
+ localName: '',
26
+ abbreviation: 'UBN',
27
+
28
+ compact(input: string): string {
29
+ const [value, err] = clean(input);
30
+
31
+ if (err) {
32
+ throw err;
33
+ }
34
+
35
+ return value;
36
+ },
37
+
38
+ format(input: string): string {
39
+ const [value] = clean(input);
40
+
41
+ return value;
42
+ },
43
+
44
+ validate(input: string): ValidateReturn {
45
+ const [value, error] = clean(input);
46
+
47
+ if (error) {
48
+ return { isValid: false, error };
49
+ }
50
+ if (value.length !== 8) {
51
+ return { isValid: false, error: new exceptions.InvalidLength() };
52
+ }
53
+ if (!strings.isdigits(value)) {
54
+ return { isValid: false, error: new exceptions.InvalidFormat() };
55
+ }
56
+
57
+ const weights = [1, 2, 1, 2, 1, 2, 4, 1];
58
+
59
+ const digits = weights
60
+ .map((w, idx) => String(parseInt(value[idx], 10) * w))
61
+ .join('');
62
+ const sum = digits
63
+ .split('')
64
+ .reduce((acc, d) => (acc + parseInt(d, 10)) % 10, 0);
65
+
66
+ if (!(sum === 0 || (sum === 9 && value[6] === '7'))) {
67
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
68
+ }
69
+
70
+ return {
71
+ isValid: true,
72
+ compact: value,
73
+ isIndividual: false,
74
+ isCompany: true,
75
+ };
76
+ },
77
+ };
78
+
79
+ export const { name, localName, abbreviation, validate, format, compact } =
80
+ impl;
@@ -0,0 +1,38 @@
1
+ import { validate, format } from './ui';
2
+ import {
3
+ InvalidLength,
4
+ InvalidComponent,
5
+ InvalidChecksum,
6
+ } from '../exceptions';
7
+
8
+ describe('tw/ui', () => {
9
+ it('format:00501-50 3', () => {
10
+ const result = format('00501-50 3');
11
+
12
+ expect(result).toEqual('00501503');
13
+ });
14
+
15
+ it('validate:A800501509', () => {
16
+ const result = validate('A800501509');
17
+
18
+ expect(result.isValid && result.compact).toEqual('A800501509');
19
+ });
20
+
21
+ it('validate:A800501508', () => {
22
+ const result = validate('A800501508');
23
+
24
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
25
+ });
26
+
27
+ it('validate:12345', () => {
28
+ const result = validate('12345');
29
+
30
+ expect(result.error).toBeInstanceOf(InvalidLength);
31
+ });
32
+
33
+ it('validate:A700501503', () => {
34
+ const result = validate('A700501503');
35
+
36
+ expect(result.error).toBeInstanceOf(InvalidComponent);
37
+ });
38
+ });