Browse Source

adding support for South African VAT number validation

Greg Boyington 11 years ago
parent
commit
7bf1d516a4
2 changed files with 43 additions and 3 deletions
  1. 20 3
      src/js/validator/vat.js
  2. 23 0
      test/spec/validator/vat.js

+ 20 - 3
src/js/validator/vat.js

@@ -36,7 +36,8 @@
             RS: 'Serbian',
             SE: 'Swedish',
             SI: 'Slovenian',
-            SK: 'Slovak'
+            SK: 'Slovak',
+            ZA: 'South African',
         }
     });
 
@@ -49,7 +50,7 @@
         // Supported country codes
         COUNTRY_CODES: [
             'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'EL', 'HU', 'IE', 'IT',
-            'LV', 'LT', 'LU', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'RS', 'SK', 'SI', 'ES', 'SE', 'CH', 'GB'
+            'LV', 'LT', 'LU', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'RS', 'SK', 'SI', 'ES', 'SE', 'CH', 'GB', 'ZA'
         ],
 
         /**
@@ -594,7 +595,7 @@
 
             value = value.substr(2);
 
-			if (!$.fn.bootstrapValidator.helpers.luhn(value.substr(2))) {
+            if (!$.fn.bootstrapValidator.helpers.luhn(value.substr(2))) {
                 return false;
             }
 
@@ -1215,6 +1216,22 @@
             }
 
             return (parseInt(value.substr(2), 10) % 11 === 0);
+        },
+
+        /**
+         * Validate South African VAT number
+         * Examples:
+         * - Valid: 4012345678
+         * - Invalid: 40123456789, 3012345678
+         *
+         * @params {String} value VAT number
+         * @returns {Boolean}
+         */
+         _za: function(value) {
+            if (!/^4\d{9}$/.test(value)) {
+                return false;
+            }
+            return true;
         }
     };
 }(window.jQuery));

+ 23 - 0
test/spec/validator/vat.js

@@ -36,6 +36,7 @@ describe('vat', function() {
                         '<option value="SE">Sweden</option>',
                         '<option value="CH">Switzerland</option>',
                         '<option value="GB">United Kingdom</option>',
+                        '<option value="ZA">South Africa</option>',
                     '</select>',
                 '</div>',
                 '<div class="form-group">',
@@ -640,4 +641,26 @@ describe('vat', function() {
             expect(this.bv.isValid()).toEqual(false);
         }
     });
+
+    it('South African VAT number', function () {
+        // Valid samples
+        var validSamples = ['4012345678']
+        for (var i in validSamples) {
+            this.bv.resetForm();
+            this.$vat.val(validSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toBeTruthy();
+        }
+
+        // Invalid samples
+        var invalidSamples = ['40123456789', '0123456789']
+        for (i in invalidSamples) {
+            this.bv.resetForm();
+            this.$vat.val(invalidSamples[i]);
+            this.bv.validate();
+            expect(this.bv.isValid()).toEqual(false);
+        }
+    });
+
+
 });