Browse Source

#179: Validate Croatian VAT number

nghuuphuoc 11 years ago
parent
commit
9af85e9891
3 changed files with 90 additions and 30 deletions
  1. 44 14
      dist/js/bootstrapValidator.js
  2. 2 2
      dist/js/bootstrapValidator.min.js
  3. 44 14
      src/js/validator/vat.js

+ 44 - 14
dist/js/bootstrapValidator.js

@@ -2412,6 +2412,7 @@
                 'GR': 'GR[0-9]{9}',                                 // Greece
                 'GB': 'GB([0-9]{9}([0-9]{3})?|[A-Z]{2}[0-9]{3})',   // United Kingdom
                 'HU': 'HU[0-9]{8}',                                 // Hungary
+                'HR': 'HR[0-9]{11}',                                // Croatia
                 'IE': 'IE[0-9]S[0-9]{5}L',                          // Ireland
                 'IT': 'IT[0-9]{11}',                                // Italy
                 'LT': 'LT([0-9]{9}|[0-9]{12})',                     // Lithuania
@@ -2907,20 +2908,24 @@
             value = value.substr(2);
 
             // Validate SIREN number first
-            var siren = value.substr(2),
-                sum   = 0,
-			    tmp;
-			for (var i = 0; i < 9; i++) {
-                tmp = parseInt(siren.charAt(i), 10);
-				if ((i % 2) == 1) {
-					tmp = tmp * 2;
-					if (tmp > 9) {
-						tmp -= 9;
-					}
-				}
-				sum += tmp;
-			}
-			if (sum % 10 != 0) {
+            var siren = function(value) {
+                var sum    = 0,
+                    length = value.length,
+			        tmp;
+                for (var i = 0; i < length; i++) {
+                    tmp = parseInt(value.charAt(i), 10);
+                    if ((i % 2) == 1) {
+                        tmp = tmp * 2;
+                        if (tmp > 9) {
+                            tmp -= 9;
+                        }
+                    }
+                    sum += tmp;
+                }
+                return (sum % 10 == 0);
+            };
+
+			if (!siren(value.substr(2))) {
                 return false;
             }
 
@@ -2992,6 +2997,31 @@
         },
 
         /**
+         * Validate Croatian VAT number
+         * Examples:
+         * - Valid: HR33392005961
+         * - Invalid: HR33392005962
+         *
+         * @param {String} value VAT number
+         * @return {Boolean}
+         */
+        _hr: function(value) {
+            value = value.substr(2);
+            var sum  = 10,
+                temp = 0;
+
+            for (var i = 0; i < 10; i++) {
+                temp = (parseInt(value.charAt(i), 10) + sum) % 10;
+                if (temp == 0) {
+                    temp = 10;
+                }
+                sum = (temp * 2) % 11;
+            }
+            sum += parseInt(value.substr(10, 1), 10);
+            return (sum % 10 == 1);
+        },
+
+        /**
          * Validate Luxembourg VAT number
          * Examples:
          * - Valid: LU15027442

File diff suppressed because it is too large
+ 2 - 2
dist/js/bootstrapValidator.min.js


+ 44 - 14
src/js/validator/vat.js

@@ -38,6 +38,7 @@
                 'GR': 'GR[0-9]{9}',                                 // Greece
                 'GB': 'GB([0-9]{9}([0-9]{3})?|[A-Z]{2}[0-9]{3})',   // United Kingdom
                 'HU': 'HU[0-9]{8}',                                 // Hungary
+                'HR': 'HR[0-9]{11}',                                // Croatia
                 'IE': 'IE[0-9]S[0-9]{5}L',                          // Ireland
                 'IT': 'IT[0-9]{11}',                                // Italy
                 'LT': 'LT([0-9]{9}|[0-9]{12})',                     // Lithuania
@@ -533,20 +534,24 @@
             value = value.substr(2);
 
             // Validate SIREN number first
-            var siren = value.substr(2),
-                sum   = 0,
-			    tmp;
-			for (var i = 0; i < 9; i++) {
-                tmp = parseInt(siren.charAt(i), 10);
-				if ((i % 2) == 1) {
-					tmp = tmp * 2;
-					if (tmp > 9) {
-						tmp -= 9;
-					}
-				}
-				sum += tmp;
-			}
-			if (sum % 10 != 0) {
+            var siren = function(value) {
+                var sum    = 0,
+                    length = value.length,
+			        tmp;
+                for (var i = 0; i < length; i++) {
+                    tmp = parseInt(value.charAt(i), 10);
+                    if ((i % 2) == 1) {
+                        tmp = tmp * 2;
+                        if (tmp > 9) {
+                            tmp -= 9;
+                        }
+                    }
+                    sum += tmp;
+                }
+                return (sum % 10 == 0);
+            };
+
+			if (!siren(value.substr(2))) {
                 return false;
             }
 
@@ -618,6 +623,31 @@
         },
 
         /**
+         * Validate Croatian VAT number
+         * Examples:
+         * - Valid: HR33392005961
+         * - Invalid: HR33392005962
+         *
+         * @param {String} value VAT number
+         * @return {Boolean}
+         */
+        _hr: function(value) {
+            value = value.substr(2);
+            var sum  = 10,
+                temp = 0;
+
+            for (var i = 0; i < 10; i++) {
+                temp = (parseInt(value.charAt(i), 10) + sum) % 10;
+                if (temp == 0) {
+                    temp = 10;
+                }
+                sum = (temp * 2) % 11;
+            }
+            sum += parseInt(value.substr(10, 1), 10);
+            return (sum % 10 == 1);
+        },
+
+        /**
          * Validate Luxembourg VAT number
          * Examples:
          * - Valid: LU15027442