|
|
@@ -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
|