Browse Source

#179: Validate Czech Republic VAT number

nghuuphuoc 11 years ago
parent
commit
f0c7720475
3 changed files with 183 additions and 1 deletions
  1. 91 0
      dist/js/bootstrapValidator.js
  2. 1 1
      dist/js/bootstrapValidator.min.js
  3. 91 0
      src/js/validator/vat.js

+ 91 - 0
dist/js/bootstrapValidator.js

@@ -2650,6 +2650,97 @@
         },
 
         /**
+         * Validate Czech Republic VAT number
+         * Can be:
+         * i) Legal entities (8 digit numbers)
+         * ii) Individuals with a RC (the 9 or 10 digit Czech birth number)
+         * iii) Individuals without a RC (9 digit numbers beginning with 6)
+         *
+         * Examples:
+         * - Valid: (i) CZ25123891; (ii) CZ7103192745, CZ991231123; (iii) CZ640903926
+         * - Invalid: (ii) CZ1103492745, CZ590312123
+         *
+         * @param {String} value VAT number
+         * @return {Boolean}
+         */
+        _cz: function(value) {
+            value = value.substr(2);
+
+            var sum = 0, weight = [], i = 0;
+            if (value.length == 8) {
+                // Do not allow to start with '9'
+                if (value.charAt(0) + '' == '9') {
+                    return false;
+                }
+
+                sum = 0;
+                for (var i = 0; i < 7; i++) {
+                    sum += parseInt(value.charAt(i), 10) * (8 - i);
+                }
+                sum = 11 - sum % 11;
+                if (sum == 10) {
+                    sum = 0;
+                }
+                if (sum == 11) {
+                    sum = 1;
+                }
+
+                return (sum == value.substr(7, 1));
+            } else if (value.length == 9 && (value.charAt(0) + '' == '6')) {
+                sum = 0;
+                // Skip the first (which is 6)
+                for (var i = 0; i < 7; i++) {
+                    sum += parseInt(value.charAt(i + 1), 10) * (8 - i);
+                }
+                sum = 11 - sum % 11;
+                if (sum == 10) {
+                    sum = 0;
+                }
+                if (sum == 11) {
+                    sum = 1;
+                }
+                sum = [8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 10][sum - 1];
+                return (sum == value.substr(8, 1));
+            } else if (value.length == 9 || value.length == 10) {
+                // Validate Czech birth number (Rodné číslo), which is also national identifier
+                var rc = function(value) {
+                    var year  = 1900 + parseInt(value.substr(0, 2)),
+                        month = parseInt(value.substr(2, 2)) % 50 % 20,
+                        day   = parseInt(value.substr(4, 2));
+                    if (value.length == 9) {
+                        if (year >= 1980) {
+                            year -= 100;
+                        }
+                        if (year > 1953) {
+                            return false;
+                        }
+                    } else if (year < 1954) {
+                        year += 100;
+                    }
+
+                    try {
+                        var d = new Date(year, month, day);
+                    } catch (ex) {
+                        return false;
+                    }
+
+                    // Check that the birth date is not in the future
+                    if (value.length == 10) {
+                        var check = parseInt(value.substr(0, 9), 10) % 11;
+                        if (year < 1985) {
+                            check = check % 10;
+                        }
+                        return (check == value.substr(9, 1));
+                    }
+
+                    return true;
+                };
+            }
+
+            return false;
+        },
+
+        /**
          * Validate German VAT number
          * Examples:
          * - Valid: DE136695976

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


+ 91 - 0
src/js/validator/vat.js

@@ -276,6 +276,97 @@
         },
 
         /**
+         * Validate Czech Republic VAT number
+         * Can be:
+         * i) Legal entities (8 digit numbers)
+         * ii) Individuals with a RC (the 9 or 10 digit Czech birth number)
+         * iii) Individuals without a RC (9 digit numbers beginning with 6)
+         *
+         * Examples:
+         * - Valid: (i) CZ25123891; (ii) CZ7103192745, CZ991231123; (iii) CZ640903926
+         * - Invalid: (ii) CZ1103492745, CZ590312123
+         *
+         * @param {String} value VAT number
+         * @return {Boolean}
+         */
+        _cz: function(value) {
+            value = value.substr(2);
+
+            var sum = 0, weight = [], i = 0;
+            if (value.length == 8) {
+                // Do not allow to start with '9'
+                if (value.charAt(0) + '' == '9') {
+                    return false;
+                }
+
+                sum = 0;
+                for (var i = 0; i < 7; i++) {
+                    sum += parseInt(value.charAt(i), 10) * (8 - i);
+                }
+                sum = 11 - sum % 11;
+                if (sum == 10) {
+                    sum = 0;
+                }
+                if (sum == 11) {
+                    sum = 1;
+                }
+
+                return (sum == value.substr(7, 1));
+            } else if (value.length == 9 && (value.charAt(0) + '' == '6')) {
+                sum = 0;
+                // Skip the first (which is 6)
+                for (var i = 0; i < 7; i++) {
+                    sum += parseInt(value.charAt(i + 1), 10) * (8 - i);
+                }
+                sum = 11 - sum % 11;
+                if (sum == 10) {
+                    sum = 0;
+                }
+                if (sum == 11) {
+                    sum = 1;
+                }
+                sum = [8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 10][sum - 1];
+                return (sum == value.substr(8, 1));
+            } else if (value.length == 9 || value.length == 10) {
+                // Validate Czech birth number (Rodné číslo), which is also national identifier
+                var rc = function(value) {
+                    var year  = 1900 + parseInt(value.substr(0, 2)),
+                        month = parseInt(value.substr(2, 2)) % 50 % 20,
+                        day   = parseInt(value.substr(4, 2));
+                    if (value.length == 9) {
+                        if (year >= 1980) {
+                            year -= 100;
+                        }
+                        if (year > 1953) {
+                            return false;
+                        }
+                    } else if (year < 1954) {
+                        year += 100;
+                    }
+
+                    try {
+                        var d = new Date(year, month, day);
+                    } catch (ex) {
+                        return false;
+                    }
+
+                    // Check that the birth date is not in the future
+                    if (value.length == 10) {
+                        var check = parseInt(value.substr(0, 9), 10) % 11;
+                        if (year < 1985) {
+                            check = check % 10;
+                        }
+                        return (check == value.substr(9, 1));
+                    }
+
+                    return true;
+                };
+            }
+
+            return false;
+        },
+
+        /**
          * Validate German VAT number
          * Examples:
          * - Valid: DE136695976