Browse Source

#232, #426: Add test suite for the id validator

nghuuphuoc 11 years ago
parent
commit
f01c95e203
3 changed files with 814 additions and 0 deletions
  1. 1 0
      CHANGELOG.md
  2. 407 0
      test/spec.js
  3. 406 0
      test/spec/validator/id.js

+ 1 - 0
CHANGELOG.md

@@ -48,6 +48,7 @@ __Improvements__
 * [#416](https://github.com/nghuuphuoc/bootstrapvalidator/issues/416), [#448](https://github.com/nghuuphuoc/bootstrapvalidator/pull/448): Add ```updateOption()``` method for updating the particular validator option, thanks to [@AlaskanShade](https://github.com/AlaskanShade)
 * [#420](https://github.com/nghuuphuoc/bootstrapvalidator/issues/420): Enable/disable particular validator
 * [#422](https://github.com/nghuuphuoc/bootstrapvalidator/issues/422): Exclude particular field by ```excluded``` option or ```data-bv-excluded``` attribute
+* [#426](https://github.com/nghuuphuoc/bootstrapvalidator/issues/426): Add test suite
 * [#431](https://github.com/nghuuphuoc/bootstrapvalidator/issues/431): Add built time to the build file
 * [#432](https://github.com/nghuuphuoc/bootstrapvalidator/issues/432): Define the callback via ```data-bv-callback-callback``` attribute
 * [#447](https://github.com/nghuuphuoc/bootstrapvalidator/pull/447): [zipCode validator](http://bootstrapvalidator.com/validators/zipCode/) allow to set the country code via another field or callback, thanks to [@AlaskanShade](https://github.com/AlaskanShade)

+ 407 - 0
test/spec.js

@@ -2140,6 +2140,413 @@ describe('iban', function() {
     });
 });
 
+describe('id', function() {
+    beforeEach(function () {
+        var html = [
+            '<form class="form-horizontal" id="idForm">',
+                '<div class="form-group">',
+                    '<input type="text" name="id" data-bv-id />',
+                '</div>',
+            '</form>',
+        ].join('\n');
+
+        $(html).appendTo('body');
+        $('#idForm').bootstrapValidator();
+
+        /**
+         * @type {BootstrapValidator}
+         */
+        this.bv  = $('#idForm').data('bootstrapValidator');
+        this.$id = this.bv.getFieldElements('id');
+    });
+
+    afterEach(function () {
+        $('#idForm').bootstrapValidator('destroy').remove();
+    });
+
+    it('Bulgarian national identification number (EGN)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'BG');
+
+        // Valid samples
+        var validSamples = ['7523169263', '8032056031', '803205 603 1', '8001010008', '7501020018', '7552010005', '7542011030'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['8019010008'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Brazilian national identification number (CPF)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'BR');
+
+        // Valid samples
+        var validSamples = ['39053344705', '390.533.447-05', '111.444.777-35'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['231.002.999-00'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Swiss Social Security Number (AHV-Nr/No AVS)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'CH');
+
+        // Valid samples
+        var validSamples = ['756.1234.5678.95', '7561234567895'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+    });
+
+    it('Chilean national identification number (RUN/RUT)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'CL');
+
+        // Valid samples
+        var validSamples = ['76086428-5', '22060449-7', '12531909-2'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+    });
+
+    it('Czech national identification number (RC)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'CZ');
+
+        // Valid samples
+        var validSamples = ['7103192745', '991231123'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['1103492745', '590312123'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Danish Personal Identification number (CPR)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'DK');
+
+        // Valid samples
+        var validSamples = ['2110625629', '211062-5629'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['511062-5629'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Estonian Personal Identification Code (isikukood)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'EE');
+
+        // Valid samples
+        var validSamples = ['37605030299'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+    });
+
+    it('Spanish personal identity code (DNI/NIE)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'ES');
+
+        // Valid samples
+        var validSamples = ['54362315K', '54362315-K', 'X2482300W', 'X-2482300W', 'X-2482300-W'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['54362315Z', 'X-2482300A'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Finnish Personal Identity Code (HETU)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'FI');
+
+        // Valid samples
+        var validSamples = ['311280-888Y', '131052-308T'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['131052-308U', '310252-308Y'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Croatian personal identification number (OIB)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'HR');
+
+        // Valid samples
+        var validSamples = ['33392005961'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['33392005962'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Irish Personal Public Service Number (PPS)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'IE');
+
+        // Valid samples
+        var validSamples = ['6433435F', '6433435FT', '6433435FW', '6433435OA', '6433435IH', '1234567TW', '1234567FA'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['6433435E', '6433435VH'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Iceland national identification number (Kennitala)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'IS');
+
+        // Valid samples
+        var validSamples = ['120174-3399', '1201743399', '0902862349'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+    });
+
+    it('Lithuanian Personal Code (Asmens kodas)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'LT');
+
+        // Valid samples
+        var validSamples = ['38703181745'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['38703181746', '78703181745', '38703421745'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Latvian Personal Code (Personas kods)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'LV');
+
+        // Valid samples
+        var validSamples = ['161175-19997', '16117519997'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['161375-19997'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Dutch national identification number (BSN)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'NL');
+
+        // Valid samples
+        var validSamples = ['111222333', '941331490', '9413.31.490'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['111252333'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Romanian numerical personal code (CNP)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'RO');
+
+        // Valid samples
+        var validSamples = ['1630615123457', '1800101221144'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['8800101221144', '1632215123457', '1630615123458'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Swedish personal identity number (personnummer)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'SE');
+
+        // Valid samples
+        var validSamples = ['8112289874', '811228-9874', '811228+9874'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['811228-9873'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Slovak national identifier number (RC)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'SK');
+
+        // Valid samples
+        var validSamples = ['7103192745', '991231123'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['7103192746', '1103492745'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('South African ID', function() {
+        this.bv.updateOption('id', 'id', 'country', 'ZA');
+
+        // Valid samples
+        var validSamples = ['8001015009087'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['8001015009287', '8001015009086'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+});
+
 describe('isbn', function() {
     beforeEach(function() {
         var html = [

+ 406 - 0
test/spec/validator/id.js

@@ -0,0 +1,406 @@
+describe('id', function() {
+    beforeEach(function () {
+        var html = [
+            '<form class="form-horizontal" id="idForm">',
+                '<div class="form-group">',
+                    '<input type="text" name="id" data-bv-id />',
+                '</div>',
+            '</form>',
+        ].join('\n');
+
+        $(html).appendTo('body');
+        $('#idForm').bootstrapValidator();
+
+        /**
+         * @type {BootstrapValidator}
+         */
+        this.bv  = $('#idForm').data('bootstrapValidator');
+        this.$id = this.bv.getFieldElements('id');
+    });
+
+    afterEach(function () {
+        $('#idForm').bootstrapValidator('destroy').remove();
+    });
+
+    it('Bulgarian national identification number (EGN)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'BG');
+
+        // Valid samples
+        var validSamples = ['7523169263', '8032056031', '803205 603 1', '8001010008', '7501020018', '7552010005', '7542011030'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['8019010008'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Brazilian national identification number (CPF)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'BR');
+
+        // Valid samples
+        var validSamples = ['39053344705', '390.533.447-05', '111.444.777-35'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['231.002.999-00'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Swiss Social Security Number (AHV-Nr/No AVS)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'CH');
+
+        // Valid samples
+        var validSamples = ['756.1234.5678.95', '7561234567895'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+    });
+
+    it('Chilean national identification number (RUN/RUT)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'CL');
+
+        // Valid samples
+        var validSamples = ['76086428-5', '22060449-7', '12531909-2'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+    });
+
+    it('Czech national identification number (RC)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'CZ');
+
+        // Valid samples
+        var validSamples = ['7103192745', '991231123'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['1103492745', '590312123'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Danish Personal Identification number (CPR)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'DK');
+
+        // Valid samples
+        var validSamples = ['2110625629', '211062-5629'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['511062-5629'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Estonian Personal Identification Code (isikukood)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'EE');
+
+        // Valid samples
+        var validSamples = ['37605030299'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+    });
+
+    it('Spanish personal identity code (DNI/NIE)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'ES');
+
+        // Valid samples
+        var validSamples = ['54362315K', '54362315-K', 'X2482300W', 'X-2482300W', 'X-2482300-W'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['54362315Z', 'X-2482300A'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Finnish Personal Identity Code (HETU)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'FI');
+
+        // Valid samples
+        var validSamples = ['311280-888Y', '131052-308T'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['131052-308U', '310252-308Y'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Croatian personal identification number (OIB)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'HR');
+
+        // Valid samples
+        var validSamples = ['33392005961'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['33392005962'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Irish Personal Public Service Number (PPS)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'IE');
+
+        // Valid samples
+        var validSamples = ['6433435F', '6433435FT', '6433435FW', '6433435OA', '6433435IH', '1234567TW', '1234567FA'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['6433435E', '6433435VH'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Iceland national identification number (Kennitala)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'IS');
+
+        // Valid samples
+        var validSamples = ['120174-3399', '1201743399', '0902862349'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+    });
+
+    it('Lithuanian Personal Code (Asmens kodas)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'LT');
+
+        // Valid samples
+        var validSamples = ['38703181745'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['38703181746', '78703181745', '38703421745'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Latvian Personal Code (Personas kods)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'LV');
+
+        // Valid samples
+        var validSamples = ['161175-19997', '16117519997'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['161375-19997'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Dutch national identification number (BSN)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'NL');
+
+        // Valid samples
+        var validSamples = ['111222333', '941331490', '9413.31.490'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['111252333'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Romanian numerical personal code (CNP)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'RO');
+
+        // Valid samples
+        var validSamples = ['1630615123457', '1800101221144'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['8800101221144', '1632215123457', '1630615123458'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Swedish personal identity number (personnummer)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'SE');
+
+        // Valid samples
+        var validSamples = ['8112289874', '811228-9874', '811228+9874'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['811228-9873'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('Slovak national identifier number (RC)', function() {
+        this.bv.updateOption('id', 'id', 'country', 'SK');
+
+        // Valid samples
+        var validSamples = ['7103192745', '991231123'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['7103192746', '1103492745'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+    it('South African ID', function() {
+        this.bv.updateOption('id', 'id', 'country', 'ZA');
+
+        // Valid samples
+        var validSamples = ['8001015009087'];
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$id.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['8001015009287', '8001015009086'];
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$id.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+});