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/fr/nif.ts ADDED
@@ -0,0 +1,82 @@
1
+ /**
2
+ * NIF (Numéro d'Immatriculation Fiscale, French tax identification number).
3
+ *
4
+ * The NIF (Numéro d'Immatriculation Fiscale, Numéro d'Identité Fiscale or
5
+ * Numéro d'Identification Fiscale) also known as numéro fiscal de référence or
6
+ * SPI (Simplification des Procédures d'Identification) is a 13-digit number
7
+ * issued by the French tax authorities to people for tax reporting purposes.
8
+ *
9
+ * Source
10
+ * https://ec.europa.eu/taxation_customs/tin/tinByCountry.html
11
+ * https://fr.wikipedia.org/wiki/Numéro_d%27Immatriculation_Fiscale#France
12
+ *
13
+ * PERSON
14
+ */
15
+
16
+ import * as exceptions from '../exceptions';
17
+ import { strings } from '../util';
18
+ import { Validator, ValidateReturn } from '../types';
19
+
20
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
21
+ return strings.cleanUnicode(input, ' ');
22
+ }
23
+
24
+ const impl: Validator = {
25
+ name: 'French Tax Identification Number',
26
+ localName: "Numéro d'Immatriculation Fiscale",
27
+ abbreviation: 'NIF',
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 strings.splitAt(value, 2, 4, 7, 10).join(' ');
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 !== 13) {
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 [prefix, check] = strings.splitAt(value, 10);
58
+ const pvalue = parseInt(prefix, 10);
59
+
60
+ if (!'0123'.includes(value[0])) {
61
+ return { isValid: false, error: new exceptions.InvalidComponent() };
62
+ }
63
+ // A zero value is not a valid value
64
+ if (pvalue === 0) {
65
+ return { isValid: false, error: new exceptions.InvalidComponent() };
66
+ }
67
+
68
+ if (String(pvalue % 511).padStart(3, '0') !== check) {
69
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
70
+ }
71
+
72
+ return {
73
+ isValid: true,
74
+ compact: value,
75
+ isIndividual: true,
76
+ isCompany: false,
77
+ };
78
+ },
79
+ };
80
+
81
+ export const { name, localName, abbreviation, validate, format, compact } =
82
+ impl;
@@ -0,0 +1,36 @@
1
+ import { validate, format } from './nir';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('fr/nir', () => {
5
+ it('format:295109912611193', () => {
6
+ const result = format('295109912611193');
7
+
8
+ expect(result).toEqual('2 95 10 99 126 111 93');
9
+ });
10
+
11
+ test.each(['186022A21532523', '2 95 10 99 126 111 93'])(
12
+ 'validate-list:%s',
13
+ value => {
14
+ const result = validate(value);
15
+ expect(result.isValid).toEqual(true);
16
+ },
17
+ );
18
+
19
+ it('validate:2 95 10 99 126 111 93', () => {
20
+ const result = validate('2 95 10 99 126 111 93');
21
+
22
+ expect(result.isValid && result.compact).toEqual('295109912611193');
23
+ });
24
+
25
+ it('validate:12345678', () => {
26
+ const result = validate('12345678');
27
+
28
+ expect(result.error).toBeInstanceOf(InvalidLength);
29
+ });
30
+
31
+ it('validate:295109912611199', () => {
32
+ const result = validate('295109912611199');
33
+
34
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
35
+ });
36
+ });
package/src/fr/nir.ts ADDED
@@ -0,0 +1,98 @@
1
+ /**
2
+ * NIR (French personal identification number).
3
+ *
4
+ * The NIR (Numero d'Inscription au Repertoire national d'identification des
5
+ * personnes physiques) is used to identify persons in France. It is popularly
6
+ * known as the "social security number" and sometimes referred to as an INSEE
7
+ * number. All persons born in France are registered in the Repertoire national
8
+ * d'identification des personnes physiques (RNIPP) and assigned a NIR.
9
+ *
10
+ * The number consists of 15 digits: the first digit indicates the gender,
11
+ * followed by 2 digits for the year or birth, 2 for the month of birth, 5 for
12
+ * the location of birth (COG), 3 for a serial and 2 check digits.
13
+ *
14
+ * More information:
15
+ * https://www.insee.fr/en/metadonnees/definition/c1409
16
+ * https://en.wikipedia.org/wiki/INSEE_code
17
+ * http://resoo.org/docs/_docs/regles-numero-insee.pdf
18
+ * https://fr.wikipedia.org/wiki/Numéro_de_sécurité_sociale_en_France
19
+ * https://xml.insee.fr/schema/nir.html
20
+ *
21
+ * 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 impl: Validator = {
33
+ name: 'French Personal Identification Number',
34
+ localName: 'Numéro d’Inscription au RNIPP',
35
+ abbreviation: 'NIR',
36
+ compact(input: string): string {
37
+ const [value, err] = clean(input);
38
+
39
+ if (err) {
40
+ throw err;
41
+ }
42
+
43
+ return value;
44
+ },
45
+
46
+ format(input: string): string {
47
+ const [value] = clean(input);
48
+
49
+ return strings.splitAt(value, 1, 3, 5, 7, 10, 13).join(' ');
50
+ },
51
+
52
+ validate(input: string): ValidateReturn {
53
+ const [value, error] = clean(input);
54
+
55
+ if (error) {
56
+ return { isValid: false, error };
57
+ }
58
+ if (value.length !== 15) {
59
+ return { isValid: false, error: new exceptions.InvalidLength() };
60
+ }
61
+
62
+ const [pre, dept, post, check] = strings.splitAt(value, 5, 7, 13);
63
+
64
+ if (
65
+ !strings.isdigits(pre) ||
66
+ !strings.isdigits(post) ||
67
+ !strings.isdigits(check)
68
+ ) {
69
+ return { isValid: false, error: new exceptions.InvalidFormat() };
70
+ }
71
+ let add = '';
72
+ if (dept === '2A') {
73
+ add = '19';
74
+ } else if (dept === '2B') {
75
+ add = '18';
76
+ } else if (strings.isdigits(dept)) {
77
+ add = dept;
78
+ } else {
79
+ return { isValid: false, error: new exceptions.InvalidComponent() };
80
+ }
81
+
82
+ const sum = parseInt(`${pre}${add}${post}`, 10) % 97;
83
+
84
+ if (String(97 - sum).padStart(2, '0') !== check) {
85
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
86
+ }
87
+
88
+ return {
89
+ isValid: true,
90
+ compact: value,
91
+ isIndividual: true,
92
+ isCompany: false,
93
+ };
94
+ },
95
+ };
96
+
97
+ export const { name, localName, abbreviation, validate, format, compact } =
98
+ impl;
@@ -0,0 +1,28 @@
1
+ import { validate, format } from './siren';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('fr/siren', () => {
5
+ it('format:552 008 443', () => {
6
+ const result = format('552008443');
7
+
8
+ expect(result).toEqual('552 008 443');
9
+ });
10
+
11
+ it('validate:552 008 443', () => {
12
+ const result = validate('552 008 443');
13
+
14
+ expect(result.isValid && result.compact).toEqual('552008443');
15
+ });
16
+
17
+ it('validate:12345678', () => {
18
+ const result = validate('12345678');
19
+
20
+ expect(result.error).toBeInstanceOf(InvalidLength);
21
+ });
22
+
23
+ it('validate:552 008 442', () => {
24
+ const result = validate('552 008 442');
25
+
26
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
27
+ });
28
+ });
@@ -0,0 +1,68 @@
1
+ /**
2
+ * SIREN (a French company identification number).
3
+ *
4
+ * The SIREN (Système d'Identification du Répertoire des Entreprises) is a 9
5
+ * digit number used to identify French companies. The Luhn checksum is used
6
+ * to validate the numbers.
7
+ *
8
+ * ENTITY
9
+ */
10
+
11
+ import * as exceptions from '../exceptions';
12
+ import { strings } from '../util';
13
+ import { Validator, ValidateReturn } from '../types';
14
+ import { luhnChecksumValidate } from '../util/checksum';
15
+
16
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
17
+ return strings.cleanUnicode(input, ' .');
18
+ }
19
+
20
+ const impl: Validator = {
21
+ name: 'French Company Identification Number',
22
+ localName: "Système d'Identification du Répertoire des Entreprises",
23
+ abbreviation: 'SIREN',
24
+
25
+ compact(input: string): string {
26
+ const [value, err] = clean(input);
27
+
28
+ if (err) {
29
+ throw err;
30
+ }
31
+
32
+ return value;
33
+ },
34
+
35
+ format(input: string): string {
36
+ const [value] = clean(input);
37
+
38
+ return strings.splitAt(value, 3, 6).join(' ');
39
+ },
40
+
41
+ validate(input: string): ValidateReturn {
42
+ const [value, error] = clean(input);
43
+
44
+ if (error) {
45
+ return { isValid: false, error };
46
+ }
47
+ if (value.length !== 9) {
48
+ return { isValid: false, error: new exceptions.InvalidLength() };
49
+ }
50
+ if (!strings.isdigits(value)) {
51
+ return { isValid: false, error: new exceptions.InvalidFormat() };
52
+ }
53
+
54
+ if (!luhnChecksumValidate(value)) {
55
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
56
+ }
57
+
58
+ return {
59
+ isValid: true,
60
+ compact: value,
61
+ isIndividual: false,
62
+ isCompany: true,
63
+ };
64
+ },
65
+ };
66
+
67
+ export const { name, localName, abbreviation, validate, format, compact } =
68
+ impl;
@@ -0,0 +1,38 @@
1
+ import { validate, format } from './siret';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('fr/siret', () => {
5
+ it('format:552 008443', () => {
6
+ const result = format('73282932000074');
7
+
8
+ expect(result).toEqual('732 829 320 00074');
9
+ });
10
+
11
+ test.each([
12
+ '73282932000074',
13
+ '356 000 000 09075',
14
+ '35600000000048',
15
+ '35600000049837',
16
+ ])('validate:%s', value => {
17
+ const result = validate(value);
18
+
19
+ expect(result.isValid).toEqual(true);
20
+ });
21
+ // it('validate:73282932000074', () => {
22
+ // const result = validate('73282932000074');
23
+
24
+ // expect(result.isValid && result.compact).toEqual('73282932000074');
25
+ // });
26
+
27
+ it('validate:12345678', () => {
28
+ const result = validate('12345678');
29
+
30
+ expect(result.error).toBeInstanceOf(InvalidLength);
31
+ });
32
+
33
+ test.each(['35600000049838', '73282932000075'])('validate:%s', value => {
34
+ const result = validate(value);
35
+
36
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
37
+ });
38
+ });
@@ -0,0 +1,79 @@
1
+ /**
2
+ * SIRET (a French company establishment identification number).
3
+ *
4
+ * The SIRET (Système d'Identification du Répertoire des Établissements)
5
+ * is a 14 digit number used to identify French companies' establishments
6
+ * and facilities. The Luhn checksum is used to validate the numbers (except
7
+ * for La Poste).
8
+ *
9
+ * Sources:
10
+ * https://fr.wikipedia.org/wiki/Système_d'identification_du_répertoire_des_établissements
11
+ *
12
+ * ENTITY
13
+ */
14
+
15
+ import * as exceptions from '../exceptions';
16
+ import { strings } from '../util';
17
+ import { Validator, ValidateReturn } from '../types';
18
+ import { luhnChecksumValidate, weightedSum } from '../util/checksum';
19
+
20
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
21
+ return strings.cleanUnicode(input, ' -/');
22
+ }
23
+
24
+ const impl: Validator = {
25
+ name: 'French Company Establishment Identification Number',
26
+ localName: "Système d'Identification du Répertoire des Établissements",
27
+ abbreviation: 'SIRET',
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 strings.splitAt(value, 3, 6, 9).join(' ');
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 !== 14) {
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
+ if (value.startsWith('356000000') && value !== '35600000000048') {
58
+ const sum = weightedSum(value, {
59
+ weights: [1],
60
+ modulus: 5,
61
+ });
62
+ if (sum !== 0) {
63
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
64
+ }
65
+ } else if (!luhnChecksumValidate(value)) {
66
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
67
+ }
68
+
69
+ return {
70
+ isValid: true,
71
+ compact: value,
72
+ isIndividual: false,
73
+ isCompany: true,
74
+ };
75
+ },
76
+ };
77
+
78
+ export const { name, localName, abbreviation, validate, format, compact } =
79
+ impl;
@@ -0,0 +1,40 @@
1
+ import { validate, format } from './tva';
2
+ import { InvalidLength, InvalidChecksum } from '../exceptions';
3
+
4
+ describe('fr/tva', () => {
5
+ it('format:Fr 40 303 265045', () => {
6
+ const result = format('Fr 40 303 265045');
7
+
8
+ expect(result).toEqual('40 303 265 045');
9
+ });
10
+
11
+ it('validate:Fr 40 303 265 045', () => {
12
+ const result = validate('Fr 40 303 265 045');
13
+
14
+ expect(result.isValid && result.compact).toEqual('40303265045');
15
+ });
16
+
17
+ test.each([
18
+ '40303265045',
19
+ '23334175221',
20
+ 'K7399859412',
21
+ '4Z123456782',
22
+ 'FR84323140392',
23
+ ])('validate:%s', value => {
24
+ const result = validate(value);
25
+
26
+ expect(result.isValid).toEqual(true);
27
+ });
28
+
29
+ it('validate:12345678', () => {
30
+ const result = validate('12345678');
31
+
32
+ expect(result.error).toBeInstanceOf(InvalidLength);
33
+ });
34
+
35
+ it('validate:84 323 140 391', () => {
36
+ const result = validate('84 323 140 391');
37
+
38
+ expect(result.error).toBeInstanceOf(InvalidChecksum);
39
+ });
40
+ });
package/src/fr/tva.ts ADDED
@@ -0,0 +1,125 @@
1
+ /**
2
+ * n° TVA (taxe sur la valeur ajoutée, French VAT number).
3
+ *
4
+ * The n° TVA (Numéro d'identification à la taxe sur la valeur ajoutée) is the
5
+ * SIREN (Système d’Identification du Répertoire des Entreprises) prefixed by
6
+ * two digits. In old style numbers the two digits are numeric, with new
7
+ * style numbers at least one is a alphabetic.
8
+ *
9
+ * Source:
10
+ * https://wiki.scn.sap.com/wiki/display/CRM/France
11
+ *
12
+ * ENTITY
13
+ */
14
+
15
+ import * as exceptions from '../exceptions';
16
+ import { strings } from '../util';
17
+ import { Validator, ValidateReturn } from '../types';
18
+ import * as siren from './siren';
19
+
20
+ function clean(input: string): ReturnType<typeof strings.cleanUnicode> {
21
+ const [value, err] = strings.cleanUnicode(input, ' -.');
22
+
23
+ if (err !== null) {
24
+ return [value, err];
25
+ }
26
+ if (value.startsWith('FR')) {
27
+ return [value.substr(2), null];
28
+ }
29
+
30
+ return [value, null];
31
+ }
32
+
33
+ // the valid characters for the first two digits (O and I are missing)
34
+ const alphabet = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ';
35
+
36
+ const impl: Validator = {
37
+ name: 'French VAT Number',
38
+ localName: "Numéro d'Identification à la Taxe sur la Valeur Ajoutée",
39
+ abbreviation: 'n°TVA',
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 strings.splitAt(value, 2, 5, 8).join(' ');
54
+ },
55
+
56
+ validate(input: string): ValidateReturn {
57
+ const [value, error] = clean(input);
58
+
59
+ if (error) {
60
+ return { isValid: false, error };
61
+ }
62
+ if (value.length !== 11) {
63
+ return { isValid: false, error: new exceptions.InvalidLength() };
64
+ }
65
+ const [check, back] = strings.splitAt(value, 2);
66
+ if (!alphabet.includes(check[0]) || !alphabet.includes(check[1])) {
67
+ return { isValid: false, error: new exceptions.InvalidFormat() };
68
+ }
69
+ if (!strings.isdigits(back)) {
70
+ return { isValid: false, error: new exceptions.InvalidFormat() };
71
+ }
72
+ // numbers from Monaco are valid TVA but not SIREN
73
+ if (value.substring(2, 5) !== '000') {
74
+ const r = siren.validate(value.substr(2));
75
+ if (!r.isValid) {
76
+ return r;
77
+ }
78
+ }
79
+
80
+ if (strings.isdigits(check)) {
81
+ const sum = (12 + 3 * (parseInt(back, 10) % 97)) % 97;
82
+
83
+ if (String(sum) !== check) {
84
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
85
+ }
86
+ } else {
87
+ // const FACTORS = {
88
+ // 1: [24, 10],
89
+ // 0: [34, 100],
90
+ // };
91
+ // const factors = FACTORS[strings.isdigits(check[0]) ? 1 : 0];
92
+
93
+ // const cvalue =
94
+ // alphabet.indexOf(check[0]) * factors[0] +
95
+ // alphabet.indexOf(check[1]) -
96
+ // factors[1];
97
+
98
+ const c0 = alphabet.indexOf(check[0]);
99
+ const c1 = alphabet.indexOf(check[1]);
100
+
101
+ let cvalue;
102
+ if (c0 < 10) {
103
+ cvalue = c0 * 24 + c1 - 10;
104
+ } else {
105
+ cvalue = c0 * 34 + c1 - 100;
106
+ }
107
+
108
+ const sum = (parseInt(back, 10) + 1 + Math.floor(cvalue / 11)) % 11;
109
+ const digit = cvalue % 11;
110
+ if (sum !== digit) {
111
+ return { isValid: false, error: new exceptions.InvalidChecksum() };
112
+ }
113
+ }
114
+
115
+ return {
116
+ isValid: true,
117
+ compact: value,
118
+ isIndividual: false,
119
+ isCompany: true,
120
+ };
121
+ },
122
+ };
123
+
124
+ export const { name, localName, abbreviation, validate, format, compact } =
125
+ impl;
@@ -0,0 +1,3 @@
1
+ export * as nino from './nino';
2
+ export * as utr from './utr';
3
+ export * as vat from './vat';