id.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. describe('id', function() {
  2. beforeEach(function() {
  3. $([
  4. '<form class="form-horizontal" id="idForm">',
  5. '<div class="form-group">',
  6. '<select class="form-control" name="country">',
  7. '<option value="BA">Bosnia and Herzegovina</option>',
  8. '<option value="BG">Bulgaria</option>',
  9. '<option value="BR">Brazil</option>',
  10. '<option value="CH">Switzerland</option>',
  11. '<option value="CL">Chile</option>',
  12. '<option value="CN">China</option>',
  13. '<option value="CZ">Czech</option>',
  14. '<option value="DK">Denmark</option>',
  15. '<option value="EE">Estonia</option>',
  16. '<option value="ES">Spain</option>',
  17. '<option value="FI">Finland</option>',
  18. '<option value="HR">Croatia</option>',
  19. '<option value="IE">Ireland</option>',
  20. '<option value="IS">Iceland</option>',
  21. '<option value="LT">Lithuania</option>',
  22. '<option value="LV">Latvia</option>',
  23. '<option value="ME">Montenegro</option>',
  24. '<option value="MK">Macedonia</option>',
  25. '<option value="NL">Netherlands</option>',
  26. '<option value="RO">Romania</option>',
  27. '<option value="RS">Serbia</option>',
  28. '<option value="SE">Sweden</option>',
  29. '<option value="SI">Slovenia</option>',
  30. '<option value="SK">Slovakia</option>',
  31. '<option value="SM">San Marino</option>',
  32. '<option value="TH">Thailand</option>',
  33. '<option value="ZA">South Africa</option>',
  34. '</select>',
  35. '</div>',
  36. '<div class="form-group">',
  37. '<input class="form-control" type="text" name="id" data-bv-id />',
  38. '</div>',
  39. '</form>'
  40. ].join('\n')).appendTo('body');
  41. $('#idForm').bootstrapValidator();
  42. /**
  43. * @type {BootstrapValidator}
  44. */
  45. this.bv = $('#idForm').data('bootstrapValidator');
  46. this.$country = this.bv.getFieldElements('country');
  47. this.$id = this.bv.getFieldElements('id');
  48. });
  49. afterEach(function() {
  50. $('#idForm').bootstrapValidator('destroy').remove();
  51. });
  52. it('dynamic country', function() {
  53. this.$id.attr('data-bv-id-country', 'country');
  54. this.bv.destroy();
  55. this.bv = $('#idForm').bootstrapValidator().data('bootstrapValidator');
  56. this.$country.val('BG');
  57. this.$id.val('7552010005');
  58. this.bv.validate();
  59. expect(this.bv.isValid()).toBeTruthy();
  60. this.bv.resetForm();
  61. this.$country.val('BR');
  62. this.$id.val('231.002.999-00');
  63. this.bv.validate();
  64. expect(this.bv.isValid()).toEqual(false);
  65. });
  66. it('Bulgarian national identification number (EGN)', function() {
  67. this.bv.updateOption('id', 'id', 'country', 'BG');
  68. // Valid samples
  69. var validSamples = ['7523169263', '8032056031', '803205 603 1', '8001010008', '7501020018', '7552010005', '7542011030'];
  70. for (var i in validSamples) {
  71. this.bv.resetForm();
  72. this.$id.val(validSamples[i]);
  73. this.bv.validate();
  74. expect(this.bv.isValid()).toBeTruthy();
  75. }
  76. // Invalid samples
  77. var invalidSamples = ['8019010008'];
  78. for (i in invalidSamples) {
  79. this.bv.resetForm();
  80. this.$id.val(invalidSamples[i]);
  81. this.bv.validate();
  82. expect(this.bv.isValid()).toEqual(false);
  83. }
  84. });
  85. it('Brazilian national identification number (CPF)', function() {
  86. this.bv.updateOption('id', 'id', 'country', 'BR');
  87. // Valid samples
  88. var validSamples = ['39053344705', '390.533.447-05', '111.444.777-35'];
  89. for (var i in validSamples) {
  90. this.bv.resetForm();
  91. this.$id.val(validSamples[i]);
  92. this.bv.validate();
  93. expect(this.bv.isValid()).toBeTruthy();
  94. }
  95. // Invalid samples
  96. var invalidSamples = ['231.002.999-00'];
  97. for (i in invalidSamples) {
  98. this.bv.resetForm();
  99. this.$id.val(invalidSamples[i]);
  100. this.bv.validate();
  101. expect(this.bv.isValid()).toEqual(false);
  102. }
  103. });
  104. it('Swiss Social Security Number (AHV-Nr/No AVS)', function() {
  105. this.bv.updateOption('id', 'id', 'country', 'CH');
  106. // Valid samples
  107. var validSamples = ['756.1234.5678.95', '7561234567895'];
  108. for (var i in validSamples) {
  109. this.bv.resetForm();
  110. this.$id.val(validSamples[i]);
  111. this.bv.validate();
  112. expect(this.bv.isValid()).toBeTruthy();
  113. }
  114. });
  115. it('Chilean national identification number (RUN/RUT)', function() {
  116. this.bv.updateOption('id', 'id', 'country', 'CL');
  117. // Valid samples
  118. var validSamples = ['76086428-5', '22060449-7', '12531909-2','12937893-K','12937893-k'];
  119. for (var i in validSamples) {
  120. this.bv.resetForm();
  121. this.$id.val(validSamples[i]);
  122. this.bv.validate();
  123. expect(this.bv.isValid()).toBeTruthy();
  124. }
  125. });
  126. // #793
  127. it('Chinese citizen identification number', function() {
  128. this.bv.updateOption('id', 'id', 'country', 'CN');
  129. // Valid samples
  130. var validSamples = ['450202201409072332', '22011219930407001X', '110108601017023'];
  131. for (var i in validSamples) {
  132. this.bv.resetForm();
  133. this.$id.val(validSamples[i]);
  134. this.bv.validate();
  135. expect(this.bv.isValid()).toBeTruthy();
  136. }
  137. // Invalid samples
  138. var invalidSamples = ['999999199304070016', '220112190002290016', '220112199304070019', '999999601017023', '110108999999023'];
  139. for (i in invalidSamples) {
  140. this.bv.resetForm();
  141. this.$id.val(invalidSamples[i]);
  142. this.bv.validate();
  143. expect(this.bv.isValid()).toEqual(false);
  144. }
  145. });
  146. it('Czech national identification number (RC)', function() {
  147. this.bv.updateOption('id', 'id', 'country', 'CZ');
  148. // Valid samples
  149. var validSamples = ['7103192745', '991231123'];
  150. for (var i in validSamples) {
  151. this.bv.resetForm();
  152. this.$id.val(validSamples[i]);
  153. this.bv.validate();
  154. expect(this.bv.isValid()).toBeTruthy();
  155. }
  156. // Invalid samples
  157. var invalidSamples = ['1103492745', '590312123'];
  158. for (i in invalidSamples) {
  159. this.bv.resetForm();
  160. this.$id.val(invalidSamples[i]);
  161. this.bv.validate();
  162. expect(this.bv.isValid()).toEqual(false);
  163. }
  164. });
  165. it('Danish Personal Identification number (CPR)', function() {
  166. this.bv.updateOption('id', 'id', 'country', 'DK');
  167. // Valid samples
  168. var validSamples = ['2110625629', '211062-5629'];
  169. for (var i in validSamples) {
  170. this.bv.resetForm();
  171. this.$id.val(validSamples[i]);
  172. this.bv.validate();
  173. expect(this.bv.isValid()).toBeTruthy();
  174. }
  175. // Invalid samples
  176. var invalidSamples = ['511062-5629'];
  177. for (i in invalidSamples) {
  178. this.bv.resetForm();
  179. this.$id.val(invalidSamples[i]);
  180. this.bv.validate();
  181. expect(this.bv.isValid()).toEqual(false);
  182. }
  183. });
  184. it('Estonian Personal Identification Code (isikukood)', function() {
  185. this.bv.updateOption('id', 'id', 'country', 'EE');
  186. // Valid samples
  187. var validSamples = ['37605030299'];
  188. for (var i in validSamples) {
  189. this.bv.resetForm();
  190. this.$id.val(validSamples[i]);
  191. this.bv.validate();
  192. expect(this.bv.isValid()).toBeTruthy();
  193. }
  194. });
  195. it('Spanish personal identity code (DNI/NIE)', function() {
  196. this.bv.updateOption('id', 'id', 'country', 'ES');
  197. // Valid samples
  198. var validSamples = ['54362315K', '54362315-K', 'X2482300W', 'X-2482300W', 'X-2482300-W'];
  199. for (var i in validSamples) {
  200. this.bv.resetForm();
  201. this.$id.val(validSamples[i]);
  202. this.bv.validate();
  203. expect(this.bv.isValid()).toBeTruthy();
  204. }
  205. // Invalid samples
  206. var invalidSamples = ['54362315Z', 'X-2482300A'];
  207. for (i in invalidSamples) {
  208. this.bv.resetForm();
  209. this.$id.val(invalidSamples[i]);
  210. this.bv.validate();
  211. expect(this.bv.isValid()).toEqual(false);
  212. }
  213. });
  214. it('Finnish Personal Identity Code (HETU)', function() {
  215. this.bv.updateOption('id', 'id', 'country', 'FI');
  216. // Valid samples
  217. var validSamples = ['311280-888Y', '131052-308T'];
  218. for (var i in validSamples) {
  219. this.bv.resetForm();
  220. this.$id.val(validSamples[i]);
  221. this.bv.validate();
  222. expect(this.bv.isValid()).toBeTruthy();
  223. }
  224. // Invalid samples
  225. var invalidSamples = ['131052-308U', '310252-308Y'];
  226. for (i in invalidSamples) {
  227. this.bv.resetForm();
  228. this.$id.val(invalidSamples[i]);
  229. this.bv.validate();
  230. expect(this.bv.isValid()).toEqual(false);
  231. }
  232. });
  233. it('Croatian personal identification number (OIB)', function() {
  234. this.bv.updateOption('id', 'id', 'country', 'HR');
  235. // Valid samples
  236. var validSamples = ['33392005961'];
  237. for (var i in validSamples) {
  238. this.bv.resetForm();
  239. this.$id.val(validSamples[i]);
  240. this.bv.validate();
  241. expect(this.bv.isValid()).toBeTruthy();
  242. }
  243. // Invalid samples
  244. var invalidSamples = ['33392005962'];
  245. for (i in invalidSamples) {
  246. this.bv.resetForm();
  247. this.$id.val(invalidSamples[i]);
  248. this.bv.validate();
  249. expect(this.bv.isValid()).toEqual(false);
  250. }
  251. });
  252. it('Irish Personal Public Service Number (PPS)', function() {
  253. this.bv.updateOption('id', 'id', 'country', 'IE');
  254. // Valid samples
  255. var validSamples = ['6433435F', '6433435FT', '6433435FW', '6433435OA', '6433435IH', '1234567TW', '1234567FA'];
  256. for (var i in validSamples) {
  257. this.bv.resetForm();
  258. this.$id.val(validSamples[i]);
  259. this.bv.validate();
  260. expect(this.bv.isValid()).toBeTruthy();
  261. }
  262. // Invalid samples
  263. var invalidSamples = ['6433435E', '6433435VH'];
  264. for (i in invalidSamples) {
  265. this.bv.resetForm();
  266. this.$id.val(invalidSamples[i]);
  267. this.bv.validate();
  268. expect(this.bv.isValid()).toEqual(false);
  269. }
  270. });
  271. it('Iceland national identification number (Kennitala)', function() {
  272. this.bv.updateOption('id', 'id', 'country', 'IS');
  273. // Valid samples
  274. var validSamples = ['120174-3399', '1201743399', '0902862349'];
  275. for (var i in validSamples) {
  276. this.bv.resetForm();
  277. this.$id.val(validSamples[i]);
  278. this.bv.validate();
  279. expect(this.bv.isValid()).toBeTruthy();
  280. }
  281. });
  282. it('Lithuanian Personal Code (Asmens kodas)', function() {
  283. this.bv.updateOption('id', 'id', 'country', 'LT');
  284. // Valid samples
  285. var validSamples = ['38703181745'];
  286. for (var i in validSamples) {
  287. this.bv.resetForm();
  288. this.$id.val(validSamples[i]);
  289. this.bv.validate();
  290. expect(this.bv.isValid()).toBeTruthy();
  291. }
  292. // Invalid samples
  293. var invalidSamples = ['38703181746', '78703181745', '38703421745'];
  294. for (i in invalidSamples) {
  295. this.bv.resetForm();
  296. this.$id.val(invalidSamples[i]);
  297. this.bv.validate();
  298. expect(this.bv.isValid()).toEqual(false);
  299. }
  300. });
  301. it('Latvian Personal Code (Personas kods)', function() {
  302. this.bv.updateOption('id', 'id', 'country', 'LV');
  303. // Valid samples
  304. var validSamples = ['161175-19997', '16117519997'];
  305. for (var i in validSamples) {
  306. this.bv.resetForm();
  307. this.$id.val(validSamples[i]);
  308. this.bv.validate();
  309. expect(this.bv.isValid()).toBeTruthy();
  310. }
  311. // Invalid samples
  312. var invalidSamples = ['161375-19997'];
  313. for (i in invalidSamples) {
  314. this.bv.resetForm();
  315. this.$id.val(invalidSamples[i]);
  316. this.bv.validate();
  317. expect(this.bv.isValid()).toEqual(false);
  318. }
  319. });
  320. it('Dutch national identification number (BSN)', function() {
  321. this.bv.updateOption('id', 'id', 'country', 'NL');
  322. // Valid samples
  323. var validSamples = ['111222333', '941331490', '9413.31.490'];
  324. for (var i in validSamples) {
  325. this.bv.resetForm();
  326. this.$id.val(validSamples[i]);
  327. this.bv.validate();
  328. expect(this.bv.isValid()).toBeTruthy();
  329. }
  330. // Invalid samples
  331. var invalidSamples = ['111252333'];
  332. for (i in invalidSamples) {
  333. this.bv.resetForm();
  334. this.$id.val(invalidSamples[i]);
  335. this.bv.validate();
  336. expect(this.bv.isValid()).toEqual(false);
  337. }
  338. });
  339. it('Romanian numerical personal code (CNP)', function() {
  340. this.bv.updateOption('id', 'id', 'country', 'RO');
  341. // Valid samples
  342. var validSamples = ['1630615123457', '1800101221144'];
  343. for (var i in validSamples) {
  344. this.bv.resetForm();
  345. this.$id.val(validSamples[i]);
  346. this.bv.validate();
  347. expect(this.bv.isValid()).toBeTruthy();
  348. }
  349. // Invalid samples
  350. var invalidSamples = ['8800101221144', '1632215123457', '1630615123458'];
  351. for (i in invalidSamples) {
  352. this.bv.resetForm();
  353. this.$id.val(invalidSamples[i]);
  354. this.bv.validate();
  355. expect(this.bv.isValid()).toEqual(false);
  356. }
  357. });
  358. it('Swedish personal identity number (personnummer)', function() {
  359. this.bv.updateOption('id', 'id', 'country', 'SE');
  360. // Valid samples
  361. var validSamples = ['8112289874', '811228-9874', '811228+9874'];
  362. for (var i in validSamples) {
  363. this.bv.resetForm();
  364. this.$id.val(validSamples[i]);
  365. this.bv.validate();
  366. expect(this.bv.isValid()).toBeTruthy();
  367. }
  368. // Invalid samples
  369. var invalidSamples = ['811228-9873'];
  370. for (i in invalidSamples) {
  371. this.bv.resetForm();
  372. this.$id.val(invalidSamples[i]);
  373. this.bv.validate();
  374. expect(this.bv.isValid()).toEqual(false);
  375. }
  376. });
  377. it('Slovak national identifier number (RC)', function() {
  378. this.bv.updateOption('id', 'id', 'country', 'SK');
  379. // Valid samples
  380. var validSamples = ['7103192745', '991231123'];
  381. for (var i in validSamples) {
  382. this.bv.resetForm();
  383. this.$id.val(validSamples[i]);
  384. this.bv.validate();
  385. expect(this.bv.isValid()).toBeTruthy();
  386. }
  387. // Invalid samples
  388. var invalidSamples = ['7103192746', '1103492745'];
  389. for (i in invalidSamples) {
  390. this.bv.resetForm();
  391. this.$id.val(invalidSamples[i]);
  392. this.bv.validate();
  393. expect(this.bv.isValid()).toEqual(false);
  394. }
  395. });
  396. it('South African ID', function() {
  397. this.bv.updateOption('id', 'id', 'country', 'ZA');
  398. // Valid samples
  399. var validSamples = ['8001015009087'];
  400. for (var i in validSamples) {
  401. this.bv.resetForm();
  402. this.$id.val(validSamples[i]);
  403. this.bv.validate();
  404. expect(this.bv.isValid()).toBeTruthy();
  405. }
  406. // Invalid samples
  407. var invalidSamples = ['8001015009287', '8001015009086'];
  408. for (i in invalidSamples) {
  409. this.bv.resetForm();
  410. this.$id.val(invalidSamples[i]);
  411. this.bv.validate();
  412. expect(this.bv.isValid()).toEqual(false);
  413. }
  414. });
  415. it('Thailand citizen number', function() {
  416. this.bv.updateOption('id', 'id', 'country', 'TH');
  417. // Valid samples
  418. var validSamples = ['7145620509547', '3688699975685', '2368719339716'];
  419. for (var i in validSamples) {
  420. this.bv.resetForm();
  421. this.$id.val(validSamples[i]);
  422. this.bv.validate();
  423. expect(this.bv.isValid()).toBeTruthy();
  424. }
  425. // Invalid samples
  426. var invalidSamples = ['1100800092310'];
  427. for (i in invalidSamples) {
  428. this.bv.resetForm();
  429. this.$id.val(invalidSamples[i]);
  430. this.bv.validate();
  431. expect(this.bv.isValid()).toEqual(false);
  432. }
  433. });
  434. });