bootstrap_validator_rails 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/lib/bootstrap_validator_rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/bootstrapValidator.js +4677 -2
  4. data/vendor/assets/javascripts/bootstrapValidator.min.js +12 -0
  5. data/vendor/assets/stylesheets/bootstrapValidator.min.css +11 -0
  6. metadata +4 -48
  7. data/vendor/assets/javascripts/validator/base64.js +0 -25
  8. data/vendor/assets/javascripts/validator/between.js +0 -66
  9. data/vendor/assets/javascripts/validator/callback.js +0 -40
  10. data/vendor/assets/javascripts/validator/choice.js +0 -68
  11. data/vendor/assets/javascripts/validator/creditCard.js +0 -103
  12. data/vendor/assets/javascripts/validator/cusip.js +0 -55
  13. data/vendor/assets/javascripts/validator/cvv.js +0 -116
  14. data/vendor/assets/javascripts/validator/date.js +0 -118
  15. data/vendor/assets/javascripts/validator/different.js +0 -41
  16. data/vendor/assets/javascripts/validator/digits.js +0 -24
  17. data/vendor/assets/javascripts/validator/ean.js +0 -40
  18. data/vendor/assets/javascripts/validator/emailAddress.js +0 -31
  19. data/vendor/assets/javascripts/validator/file.js +0 -69
  20. data/vendor/assets/javascripts/validator/greaterThan.js +0 -61
  21. data/vendor/assets/javascripts/validator/grid.js +0 -37
  22. data/vendor/assets/javascripts/validator/hex.js +0 -25
  23. data/vendor/assets/javascripts/validator/hexColor.js +0 -28
  24. data/vendor/assets/javascripts/validator/iban.js +0 -246
  25. data/vendor/assets/javascripts/validator/id.js +0 -815
  26. data/vendor/assets/javascripts/validator/identical.js +0 -40
  27. data/vendor/assets/javascripts/validator/imei.js +0 -44
  28. data/vendor/assets/javascripts/validator/integer.js +0 -28
  29. data/vendor/assets/javascripts/validator/ip.js +0 -48
  30. data/vendor/assets/javascripts/validator/isbn.js +0 -86
  31. data/vendor/assets/javascripts/validator/isin.js +0 -59
  32. data/vendor/assets/javascripts/validator/ismn.js +0 -59
  33. data/vendor/assets/javascripts/validator/issn.js +0 -46
  34. data/vendor/assets/javascripts/validator/lessThan.js +0 -61
  35. data/vendor/assets/javascripts/validator/mac.js +0 -25
  36. data/vendor/assets/javascripts/validator/notEmpty.js +0 -32
  37. data/vendor/assets/javascripts/validator/numeric.js +0 -39
  38. data/vendor/assets/javascripts/validator/phone.js +0 -84
  39. data/vendor/assets/javascripts/validator/regexp.js +0 -42
  40. data/vendor/assets/javascripts/validator/remote.js +0 -70
  41. data/vendor/assets/javascripts/validator/rtn.js +0 -38
  42. data/vendor/assets/javascripts/validator/sedol.js +0 -40
  43. data/vendor/assets/javascripts/validator/siren.js +0 -28
  44. data/vendor/assets/javascripts/validator/siret.js +0 -38
  45. data/vendor/assets/javascripts/validator/step.js +0 -64
  46. data/vendor/assets/javascripts/validator/stringCase.js +0 -36
  47. data/vendor/assets/javascripts/validator/stringLength.js +0 -81
  48. data/vendor/assets/javascripts/validator/uri.js +0 -101
  49. data/vendor/assets/javascripts/validator/uuid.js +0 -46
  50. data/vendor/assets/javascripts/validator/vat.js +0 -1220
  51. data/vendor/assets/javascripts/validator/vin.js +0 -49
  52. data/vendor/assets/javascripts/validator/zipCode.js +0 -162
@@ -1,64 +0,0 @@
1
- (function($) {
2
- $.fn.bootstrapValidator.i18n.step = $.extend($.fn.bootstrapValidator.i18n.step || {}, {
3
- 'default': 'Please enter a valid step of %s'
4
- });
5
-
6
- $.fn.bootstrapValidator.validators.step = {
7
- html5Attributes: {
8
- message: 'message',
9
- base: 'baseValue',
10
- step: 'step'
11
- },
12
-
13
- /**
14
- * Return true if the input value is valid step one
15
- *
16
- * @param {BootstrapValidator} validator The validator plugin instance
17
- * @param {jQuery} $field Field element
18
- * @param {Object} options Can consist of the following keys:
19
- * - baseValue: The base value
20
- * - step: The step
21
- * - message: The invalid message
22
- * @returns {Boolean|Object}
23
- */
24
- validate: function(validator, $field, options) {
25
- var value = $field.val();
26
- if (value === '') {
27
- return true;
28
- }
29
-
30
- options = $.extend({}, { baseValue: 0, step: 1 }, options);
31
- value = parseFloat(value);
32
- if (!$.isNumeric(value)) {
33
- return false;
34
- }
35
-
36
- var round = function(x, precision) {
37
- var m = Math.pow(10, precision);
38
- x = x * m;
39
- var sign = (x > 0) | -(x < 0),
40
- isHalf = (x % 1 === 0.5 * sign);
41
- if (isHalf) {
42
- return (Math.floor(x) + (sign > 0)) / m;
43
- } else {
44
- return Math.round(x) / m;
45
- }
46
- },
47
- floatMod = function(x, y) {
48
- if (y === 0.0) {
49
- return 1.0;
50
- }
51
- var dotX = (x + '').split('.'),
52
- dotY = (y + '').split('.'),
53
- precision = ((dotX.length === 1) ? 0 : dotX[1].length) + ((dotY.length === 1) ? 0 : dotY[1].length);
54
- return round(x - y * Math.floor(x / y), precision);
55
- };
56
-
57
- var mod = floatMod(value - options.baseValue, options.step);
58
- return {
59
- valid: mod === 0.0 || mod === options.step,
60
- message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.step['default'], [options.step])
61
- };
62
- }
63
- };
64
- }(window.jQuery));
@@ -1,36 +0,0 @@
1
- (function($) {
2
- $.fn.bootstrapValidator.i18n.stringCase = $.extend($.fn.bootstrapValidator.i18n.stringCase || {}, {
3
- 'default': 'Please enter only lowercase characters',
4
- upper: 'Please enter only uppercase characters'
5
- });
6
-
7
- $.fn.bootstrapValidator.validators.stringCase = {
8
- html5Attributes: {
9
- message: 'message',
10
- 'case': 'case'
11
- },
12
-
13
- /**
14
- * Check if a string is a lower or upper case one
15
- *
16
- * @param {BootstrapValidator} validator The validator plugin instance
17
- * @param {jQuery} $field Field element
18
- * @param {Object} options Consist of key:
19
- * - message: The invalid message
20
- * - case: Can be 'lower' (default) or 'upper'
21
- * @returns {Object}
22
- */
23
- validate: function(validator, $field, options) {
24
- var value = $field.val();
25
- if (value === '') {
26
- return true;
27
- }
28
-
29
- var stringCase = (options['case'] || 'lower').toLowerCase();
30
- return {
31
- valid: ('upper' === stringCase) ? value === value.toUpperCase() : value === value.toLowerCase(),
32
- message: options.message || (('upper' === stringCase) ? $.fn.bootstrapValidator.i18n.stringCase.upper : $.fn.bootstrapValidator.i18n.stringCase['default'])
33
- };
34
- }
35
- };
36
- }(window.jQuery));
@@ -1,81 +0,0 @@
1
- (function($) {
2
- $.fn.bootstrapValidator.i18n.stringLength = $.extend($.fn.bootstrapValidator.i18n.stringLength || {}, {
3
- 'default': 'Please enter a value with valid length',
4
- less: 'Please enter less than %s characters',
5
- more: 'Please enter more than %s characters',
6
- between: 'Please enter value between %s and %s characters long'
7
- });
8
-
9
- $.fn.bootstrapValidator.validators.stringLength = {
10
- html5Attributes: {
11
- message: 'message',
12
- min: 'min',
13
- max: 'max'
14
- },
15
-
16
- enableByHtml5: function($field) {
17
- var maxLength = $field.attr('maxlength');
18
- if (maxLength) {
19
- return {
20
- max: parseInt(maxLength, 10)
21
- };
22
- }
23
-
24
- return false;
25
- },
26
-
27
- /**
28
- * Check if the length of element value is less or more than given number
29
- *
30
- * @param {BootstrapValidator} validator The validator plugin instance
31
- * @param {jQuery} $field Field element
32
- * @param {Object} options Consists of following keys:
33
- * - min
34
- * - max
35
- * At least one of two keys is required
36
- * The min, max keys define the number which the field value compares to. min, max can be
37
- * - A number
38
- * - Name of field which its value defines the number
39
- * - Name of callback function that returns the number
40
- * - A callback function that returns the number
41
- *
42
- * - message: The invalid message
43
- * @returns {Object}
44
- */
45
- validate: function(validator, $field, options) {
46
- var value = $field.val();
47
- if (value === '') {
48
- return true;
49
- }
50
-
51
- var min = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min),
52
- max = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max),
53
- length = value.length,
54
- isValid = true,
55
- message = options.message || $.fn.bootstrapValidator.i18n.stringLength['default'];
56
-
57
- if ((min && length < parseInt(min, 10)) || (max && length > parseInt(max, 10))) {
58
- isValid = false;
59
- }
60
-
61
- switch (true) {
62
- case (!!min && !!max):
63
- message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.stringLength.between, [parseInt(min, 10), parseInt(max, 10)]);
64
- break;
65
-
66
- case (!!min):
67
- message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.stringLength.more, parseInt(min, 10));
68
- break;
69
-
70
- case (!!max):
71
- message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.stringLength.less, parseInt(max, 10));
72
- break;
73
-
74
- default:
75
- break;
76
- }
77
-
78
- return { valid: isValid, message: message };
79
- }
80
- };
81
- }(window.jQuery));
@@ -1,101 +0,0 @@
1
- (function($) {
2
- $.fn.bootstrapValidator.i18n.uri = $.extend($.fn.bootstrapValidator.i18n.uri || {}, {
3
- 'default': 'Please enter a valid URI'
4
- });
5
-
6
- $.fn.bootstrapValidator.validators.uri = {
7
- html5Attributes: {
8
- message: 'message',
9
- allowlocal: 'allowLocal'
10
- },
11
-
12
- enableByHtml5: function($field) {
13
- return ('url' === $field.attr('type'));
14
- },
15
-
16
- /**
17
- * Return true if the input value is a valid URL
18
- *
19
- * @param {BootstrapValidator} validator The validator plugin instance
20
- * @param {jQuery} $field Field element
21
- * @param {Object} options
22
- * - message: The error message
23
- * - allowLocal: Allow the private and local network IP. Default to false
24
- * @returns {Boolean}
25
- */
26
- validate: function(validator, $field, options) {
27
- var value = $field.val();
28
- if (value === '') {
29
- return true;
30
- }
31
-
32
- // Credit to https://gist.github.com/dperini/729294
33
- //
34
- // Regular Expression for URL validation
35
- //
36
- // Author: Diego Perini
37
- // Updated: 2010/12/05
38
- //
39
- // the regular expression composed & commented
40
- // could be easily tweaked for RFC compliance,
41
- // it was expressly modified to fit & satisfy
42
- // these test for an URL shortener:
43
- //
44
- // http://mathiasbynens.be/demo/url-regex
45
- //
46
- // Notes on possible differences from a standard/generic validation:
47
- //
48
- // - utf-8 char class take in consideration the full Unicode range
49
- // - TLDs have been made mandatory so single names like "localhost" fails
50
- // - protocols have been restricted to ftp, http and https only as requested
51
- //
52
- // Changes:
53
- //
54
- // - IP address dotted notation validation, range: 1.0.0.0 - 223.255.255.255
55
- // first and last IP address of each class is considered invalid
56
- // (since they are broadcast/network addresses)
57
- //
58
- // - Added exclusion of private, reserved and/or local networks ranges
59
- //
60
- var allowLocal = options.allowLocal === true || options.allowLocal === 'true',
61
- urlExp = new RegExp(
62
- "^" +
63
- // protocol identifier
64
- "(?:(?:https?|ftp)://)" +
65
- // user:pass authentication
66
- "(?:\\S+(?::\\S*)?@)?" +
67
- "(?:" +
68
- // IP address exclusion
69
- // private & local networks
70
- (allowLocal
71
- ? ''
72
- : ("(?!(?:10|127)(?:\\.\\d{1,3}){3})" +
73
- "(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})" +
74
- "(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})")) +
75
- // IP address dotted notation octets
76
- // excludes loopback network 0.0.0.0
77
- // excludes reserved space >= 224.0.0.0
78
- // excludes network & broadcast addresses
79
- // (first & last IP address of each class)
80
- "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" +
81
- "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" +
82
- "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" +
83
- "|" +
84
- // host name
85
- "(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)" +
86
- // domain name
87
- "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*" +
88
- // TLD identifier
89
- "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))" +
90
- ")" +
91
- // port number
92
- "(?::\\d{2,5})?" +
93
- // resource path
94
- "(?:/[^\\s]*)?" +
95
- "$", "i"
96
- );
97
-
98
- return urlExp.test(value);
99
- }
100
- };
101
- }(window.jQuery));
@@ -1,46 +0,0 @@
1
- (function($) {
2
- $.fn.bootstrapValidator.i18n.uuid = $.extend($.fn.bootstrapValidator.i18n.uuid || {}, {
3
- 'default': 'Please enter a valid UUID number',
4
- version: 'Please enter a valid UUID version %s number'
5
- });
6
-
7
- $.fn.bootstrapValidator.validators.uuid = {
8
- html5Attributes: {
9
- message: 'message',
10
- version: 'version'
11
- },
12
-
13
- /**
14
- * Return true if and only if the input value is a valid UUID string
15
- *
16
- * @see http://en.wikipedia.org/wiki/Universally_unique_identifier
17
- * @param {BootstrapValidator} validator The validator plugin instance
18
- * @param {jQuery} $field Field element
19
- * @param {Object} options Consist of key:
20
- * - message: The invalid message
21
- * - version: Can be 3, 4, 5, null
22
- * @returns {Boolean|Object}
23
- */
24
- validate: function(validator, $field, options) {
25
- var value = $field.val();
26
- if (value === '') {
27
- return true;
28
- }
29
-
30
- // See the format at http://en.wikipedia.org/wiki/Universally_unique_identifier#Variants_and_versions
31
- var patterns = {
32
- '3': /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
33
- '4': /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
34
- '5': /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
35
- all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i
36
- },
37
- version = options.version ? (options.version + '') : 'all';
38
- return {
39
- valid: (null === patterns[version]) ? true : patterns[version].test(value),
40
- message: options.version
41
- ? $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.uuid.version, options.version)
42
- : (options.message || $.fn.bootstrapValidator.i18n.uuid['default'])
43
- };
44
- }
45
- };
46
- }(window.jQuery));
@@ -1,1220 +0,0 @@
1
- (function($) {
2
- $.fn.bootstrapValidator.i18n.vat = $.extend($.fn.bootstrapValidator.i18n.vat || {}, {
3
- 'default': 'Please enter a valid VAT number',
4
- countryNotSupported: 'The country code %s is not supported',
5
- country: 'Please enter a valid %s VAT number',
6
- countries: {
7
- AT: 'Austrian',
8
- BE: 'Belgian',
9
- BG: 'Bulgarian',
10
- CH: 'Swiss',
11
- CY: 'Cypriot',
12
- CZ: 'Czech',
13
- DE: 'German',
14
- DK: 'Danish',
15
- EE: 'Estonian',
16
- ES: 'Spanish',
17
- FI: 'Finnish',
18
- FR: 'French',
19
- GB: 'United Kingdom',
20
- GR: 'Greek',
21
- EL: 'Greek',
22
- HU: 'Hungarian',
23
- HR: 'Croatian',
24
- IE: 'Irish',
25
- IT: 'Italian',
26
- LT: 'Lithuanian',
27
- LU: 'Luxembourg',
28
- LV: 'Latvian',
29
- MT: 'Maltese',
30
- NL: 'Dutch',
31
- NO: 'Norwegian',
32
- PL: 'Polish',
33
- PT: 'Portuguese',
34
- RO: 'Romanian',
35
- RU: 'Russian',
36
- RS: 'Serbian',
37
- SE: 'Swedish',
38
- SI: 'Slovenian',
39
- SK: 'Slovak'
40
- }
41
- });
42
-
43
- $.fn.bootstrapValidator.validators.vat = {
44
- html5Attributes: {
45
- message: 'message',
46
- country: 'country'
47
- },
48
-
49
- // Supported country codes
50
- COUNTRY_CODES: [
51
- 'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'EL', 'HU', 'IE', 'IT',
52
- 'LV', 'LT', 'LU', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'RS', 'SK', 'SI', 'ES', 'SE', 'CH', 'GB'
53
- ],
54
-
55
- /**
56
- * Validate an European VAT number
57
- *
58
- * @param {BootstrapValidator} validator The validator plugin instance
59
- * @param {jQuery} $field Field element
60
- * @param {Object} options Consist of key:
61
- * - message: The invalid message
62
- * - country: The ISO 3166-1 country code. It can be
63
- * - One of country code defined in COUNTRY_CODES
64
- * - Name of field which its value defines the country code
65
- * - Name of callback function that returns the country code
66
- * - A callback function that returns the country code
67
- * @returns {Boolean|Object}
68
- */
69
- validate: function(validator, $field, options) {
70
- var value = $field.val();
71
- if (value === '') {
72
- return true;
73
- }
74
-
75
- var country = options.country;
76
- if (!country) {
77
- country = value.substr(0, 2);
78
- } else if (typeof country !== 'string' || $.inArray(country.toUpperCase(), this.COUNTRY_CODES) === -1) {
79
- // Determine the country code
80
- country = validator.getDynamicOption($field, country);
81
- }
82
-
83
- if ($.inArray(country, this.COUNTRY_CODES) === -1) {
84
- return {
85
- valid: false,
86
- message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.vat.countryNotSupported, country)
87
- };
88
- }
89
-
90
- var method = ['_', country.toLowerCase()].join('');
91
- return this[method](value)
92
- ? true
93
- : {
94
- valid: false,
95
- message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.vat.country, $.fn.bootstrapValidator.i18n.vat.countries[country.toUpperCase()])
96
- };
97
- },
98
-
99
- // VAT validators
100
-
101
- /**
102
- * Validate Austrian VAT number
103
- * Example:
104
- * - Valid: ATU13585627
105
- * - Invalid: ATU13585626
106
- *
107
- * @param {String} value VAT number
108
- * @returns {Boolean}
109
- */
110
- _at: function(value) {
111
- if (!/^ATU[0-9]{8}$/.test(value)) {
112
- return false;
113
- }
114
-
115
- value = value.substr(3);
116
- var sum = 0,
117
- weight = [1, 2, 1, 2, 1, 2, 1],
118
- temp = 0;
119
-
120
- for (var i = 0; i < 7; i++) {
121
- temp = parseInt(value.charAt(i), 10) * weight[i];
122
- if (temp > 9) {
123
- temp = Math.floor(temp / 10) + temp % 10;
124
- }
125
- sum += temp;
126
- }
127
-
128
- sum = 10 - (sum + 4) % 10;
129
- if (sum === 10) {
130
- sum = 0;
131
- }
132
-
133
- return (sum + '' === value.substr(7, 1));
134
- },
135
-
136
- /**
137
- * Validate Belgian VAT number
138
- * Example:
139
- * - Valid: BE0428759497
140
- * - Invalid: BE431150351
141
- *
142
- * @param {String} value VAT number
143
- * @returns {Boolean}
144
- */
145
- _be: function(value) {
146
- if (!/^BE[0]{0,1}[0-9]{9}$/.test(value)) {
147
- return false;
148
- }
149
-
150
- value = value.substr(2);
151
- if (value.length === 9) {
152
- value = '0' + value;
153
- }
154
-
155
- if (value.substr(1, 1) === '0') {
156
- return false;
157
- }
158
-
159
- var sum = parseInt(value.substr(0, 8), 10) + parseInt(value.substr(8, 2), 10);
160
- return (sum % 97 === 0);
161
- },
162
-
163
- /**
164
- * Validate Bulgarian VAT number
165
- * Example:
166
- * - Valid: BG175074752,
167
- * BG7523169263, BG8032056031,
168
- * BG7542011030,
169
- * BG7111042925
170
- * - Invalid: BG175074753, BG7552A10004, BG7111042922
171
- *
172
- * @param {String} value VAT number
173
- * @returns {Boolean}
174
- */
175
- _bg: function(value) {
176
- if (!/^BG[0-9]{9,10}$/.test(value)) {
177
- return false;
178
- }
179
-
180
- value = value.substr(2);
181
- var sum = 0, i = 0;
182
-
183
- // Legal entities
184
- if (value.length === 9) {
185
- for (i = 0; i < 8; i++) {
186
- sum += parseInt(value.charAt(i), 10) * (i + 1);
187
- }
188
- sum = sum % 11;
189
- if (sum === 10) {
190
- sum = 0;
191
- for (i = 0; i < 8; i++) {
192
- sum += parseInt(value.charAt(i), 10) * (i + 3);
193
- }
194
- }
195
- sum = sum % 10;
196
- return (sum + '' === value.substr(8));
197
- }
198
- // Physical persons, foreigners and others
199
- else if (value.length === 10) {
200
- // Validate Bulgarian national identification numbers
201
- var egn = function(value) {
202
- // Check the birth date
203
- var year = parseInt(value.substr(0, 2), 10) + 1900,
204
- month = parseInt(value.substr(2, 2), 10),
205
- day = parseInt(value.substr(4, 2), 10);
206
- if (month > 40) {
207
- year += 100;
208
- month -= 40;
209
- } else if (month > 20) {
210
- year -= 100;
211
- month -= 20;
212
- }
213
-
214
- if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {
215
- return false;
216
- }
217
-
218
- var sum = 0,
219
- weight = [2, 4, 8, 5, 10, 9, 7, 3, 6];
220
- for (var i = 0; i < 9; i++) {
221
- sum += parseInt(value.charAt(i), 10) * weight[i];
222
- }
223
- sum = (sum % 11) % 10;
224
- return (sum + '' === value.substr(9, 1));
225
- },
226
- // Validate Bulgarian personal number of a foreigner
227
- pnf = function(value) {
228
- var sum = 0,
229
- weight = [21, 19, 17, 13, 11, 9, 7, 3, 1];
230
- for (var i = 0; i < 9; i++) {
231
- sum += parseInt(value.charAt(i), 10) * weight[i];
232
- }
233
- sum = sum % 10;
234
- return (sum + '' === value.substr(9, 1));
235
- },
236
- // Finally, consider it as a VAT number
237
- vat = function(value) {
238
- var sum = 0,
239
- weight = [4, 3, 2, 7, 6, 5, 4, 3, 2];
240
- for (var i = 0; i < 9; i++) {
241
- sum += parseInt(value.charAt(i), 10) * weight[i];
242
- }
243
- sum = 11 - sum % 11;
244
- if (sum === 10) {
245
- return false;
246
- }
247
- if (sum === 11) {
248
- sum = 0;
249
- }
250
- return (sum + '' === value.substr(9, 1));
251
- };
252
- return (egn(value) || pnf(value) || vat(value));
253
- }
254
-
255
- return false;
256
- },
257
-
258
- /**
259
- * Validate Swiss VAT number
260
- *
261
- * @param {String} value VAT number
262
- * @returns {Boolean}
263
- */
264
- _ch: function(value) {
265
- if (!/^CHE[0-9]{9}(MWST)?$/.test(value)) {
266
- return false;
267
- }
268
-
269
- value = value.substr(3);
270
- var sum = 0,
271
- weight = [5, 4, 3, 2, 7, 6, 5, 4];
272
- for (var i = 0; i < 8; i++) {
273
- sum += parseInt(value.charAt(i), 10) * weight[i];
274
- }
275
-
276
- sum = 11 - sum % 11;
277
- if (sum === 10) {
278
- return false;
279
- }
280
- if (sum === 11) {
281
- sum = 0;
282
- }
283
-
284
- return (sum + '' === value.substr(8, 1));
285
- },
286
-
287
- /**
288
- * Validate Cypriot VAT number
289
- * Examples:
290
- * - Valid: CY10259033P
291
- * - Invalid: CY10259033Z
292
- *
293
- * @param {String} value VAT number
294
- * @returns {Boolean}
295
- */
296
- _cy: function(value) {
297
- if (!/^CY[0-5|9]{1}[0-9]{7}[A-Z]{1}$/.test(value)) {
298
- return false;
299
- }
300
-
301
- value = value.substr(2);
302
-
303
- // Do not allow to start with "12"
304
- if (value.substr(0, 2) === '12') {
305
- return false;
306
- }
307
-
308
- // Extract the next digit and multiply by the counter.
309
- var sum = 0,
310
- translation = {
311
- '0': 1, '1': 0, '2': 5, '3': 7, '4': 9,
312
- '5': 13, '6': 15, '7': 17, '8': 19, '9': 21
313
- };
314
- for (var i = 0; i < 8; i++) {
315
- var temp = parseInt(value.charAt(i), 10);
316
- if (i % 2 === 0) {
317
- temp = translation[temp + ''];
318
- }
319
- sum += temp;
320
- }
321
-
322
- sum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[sum % 26];
323
- return (sum + '' === value.substr(8, 1));
324
- },
325
-
326
- /**
327
- * Validate Czech Republic VAT number
328
- * Can be:
329
- * i) Legal entities (8 digit numbers)
330
- * ii) Individuals with a RC (the 9 or 10 digit Czech birth number)
331
- * iii) Individuals without a RC (9 digit numbers beginning with 6)
332
- *
333
- * Examples:
334
- * - Valid: i) CZ25123891; ii) CZ7103192745, CZ991231123; iii) CZ640903926
335
- * - Invalid: i) CZ25123890; ii) CZ1103492745, CZ590312123
336
- *
337
- * @param {String} value VAT number
338
- * @returns {Boolean}
339
- */
340
- _cz: function(value) {
341
- if (!/^CZ[0-9]{8,10}$/.test(value)) {
342
- return false;
343
- }
344
-
345
- value = value.substr(2);
346
-
347
- var sum = 0,
348
- i = 0;
349
- if (value.length === 8) {
350
- // Do not allow to start with '9'
351
- if (value.charAt(0) + '' === '9') {
352
- return false;
353
- }
354
-
355
- sum = 0;
356
- for (i = 0; i < 7; i++) {
357
- sum += parseInt(value.charAt(i), 10) * (8 - i);
358
- }
359
- sum = 11 - sum % 11;
360
- if (sum === 10) {
361
- sum = 0;
362
- }
363
- if (sum === 11) {
364
- sum = 1;
365
- }
366
-
367
- return (sum + '' === value.substr(7, 1));
368
- } else if (value.length === 9 && (value.charAt(0) + '' === '6')) {
369
- sum = 0;
370
- // Skip the first (which is 6)
371
- for (i = 0; i < 7; i++) {
372
- sum += parseInt(value.charAt(i + 1), 10) * (8 - i);
373
- }
374
- sum = 11 - sum % 11;
375
- if (sum === 10) {
376
- sum = 0;
377
- }
378
- if (sum === 11) {
379
- sum = 1;
380
- }
381
- sum = [8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 10][sum - 1];
382
- return (sum + '' === value.substr(8, 1));
383
- } else if (value.length === 9 || value.length === 10) {
384
- // Validate Czech birth number (Rodné číslo), which is also national identifier
385
- var year = 1900 + parseInt(value.substr(0, 2), 10),
386
- month = parseInt(value.substr(2, 2), 10) % 50 % 20,
387
- day = parseInt(value.substr(4, 2), 10);
388
- if (value.length === 9) {
389
- if (year >= 1980) {
390
- year -= 100;
391
- }
392
- if (year > 1953) {
393
- return false;
394
- }
395
- } else if (year < 1954) {
396
- year += 100;
397
- }
398
-
399
- if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {
400
- return false;
401
- }
402
-
403
- // Check that the birth date is not in the future
404
- if (value.length === 10) {
405
- var check = parseInt(value.substr(0, 9), 10) % 11;
406
- if (year < 1985) {
407
- check = check % 10;
408
- }
409
- return (check + '' === value.substr(9, 1));
410
- }
411
-
412
- return true;
413
- }
414
-
415
- return false;
416
- },
417
-
418
- /**
419
- * Validate German VAT number
420
- * Examples:
421
- * - Valid: DE136695976
422
- * - Invalid: DE136695978
423
- *
424
- * @param {String} value VAT number
425
- * @returns {Boolean}
426
- */
427
- _de: function(value) {
428
- if (!/^DE[0-9]{9}$/.test(value)) {
429
- return false;
430
- }
431
-
432
- value = value.substr(2);
433
- return $.fn.bootstrapValidator.helpers.mod11And10(value);
434
- },
435
-
436
- /**
437
- * Validate Danish VAT number
438
- * Example:
439
- * - Valid: DK13585628
440
- * - Invalid: DK13585627
441
- *
442
- * @param {String} value VAT number
443
- * @returns {Boolean}
444
- */
445
- _dk: function(value) {
446
- if (!/^DK[0-9]{8}$/.test(value)) {
447
- return false;
448
- }
449
-
450
- value = value.substr(2);
451
- var sum = 0,
452
- weight = [2, 7, 6, 5, 4, 3, 2, 1];
453
- for (var i = 0; i < 8; i++) {
454
- sum += parseInt(value.charAt(i), 10) * weight[i];
455
- }
456
-
457
- return (sum % 11 === 0);
458
- },
459
-
460
- /**
461
- * Validate Estonian VAT number
462
- * Examples:
463
- * - Valid: EE100931558, EE100594102
464
- * - Invalid: EE100594103
465
- *
466
- * @param {String} value VAT number
467
- * @returns {Boolean}
468
- */
469
- _ee: function(value) {
470
- if (!/^EE[0-9]{9}$/.test(value)) {
471
- return false;
472
- }
473
-
474
- value = value.substr(2);
475
- var sum = 0,
476
- weight = [3, 7, 1, 3, 7, 1, 3, 7, 1];
477
-
478
- for (var i = 0; i < 9; i++) {
479
- sum += parseInt(value.charAt(i), 10) * weight[i];
480
- }
481
-
482
- return (sum % 10 === 0);
483
- },
484
-
485
- /**
486
- * Validate Spanish VAT number (NIF - Número de Identificación Fiscal)
487
- * Can be:
488
- * i) DNI (Documento nacional de identidad), for Spaniards
489
- * ii) NIE (Número de Identificación de Extranjeros), for foreigners
490
- * iii) CIF (Certificado de Identificación Fiscal), for legal entities and others
491
- *
492
- * Examples:
493
- * - Valid: i) ES54362315K; ii) ESX2482300W, ESX5253868R; iii) ESM1234567L, ESJ99216582, ESB58378431, ESB64717838
494
- * - Invalid: i) ES54362315Z; ii) ESX2482300A; iii) ESJ99216583
495
- *
496
- * @param {String} value VAT number
497
- * @returns {Boolean}
498
- */
499
- _es: function(value) {
500
- if (!/^ES[0-9A-Z][0-9]{7}[0-9A-Z]$/.test(value)) {
501
- return false;
502
- }
503
-
504
- value = value.substr(2);
505
- var dni = function(value) {
506
- var check = parseInt(value.substr(0, 8), 10);
507
- check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];
508
- return (check + '' === value.substr(8, 1));
509
- },
510
- nie = function(value) {
511
- var check = ['XYZ'.indexOf(value.charAt(0)), value.substr(1)].join('');
512
- check = parseInt(check, 10);
513
- check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];
514
- return (check + '' === value.substr(8, 1));
515
- },
516
- cif = function(value) {
517
- var first = value.charAt(0), check;
518
- if ('KLM'.indexOf(first) !== -1) {
519
- // K: Spanish younger than 14 year old
520
- // L: Spanish living outside Spain without DNI
521
- // M: Granted the tax to foreigners who have no NIE
522
- check = parseInt(value.substr(1, 8), 10);
523
- check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];
524
- return (check + '' === value.substr(8, 1));
525
- } else if ('ABCDEFGHJNPQRSUVW'.indexOf(first) !== -1) {
526
- var sum = 0,
527
- weight = [2, 1, 2, 1, 2, 1, 2],
528
- temp = 0;
529
-
530
- for (var i = 0; i < 7; i++) {
531
- temp = parseInt(value.charAt(i + 1), 10) * weight[i];
532
- if (temp > 9) {
533
- temp = Math.floor(temp / 10) + temp % 10;
534
- }
535
- sum += temp;
536
- }
537
- sum = 10 - sum % 10;
538
- return (sum + '' === value.substr(8, 1) || 'JABCDEFGHI'[sum] === value.substr(8, 1));
539
- }
540
-
541
- return false;
542
- };
543
-
544
- var first = value.charAt(0);
545
- if (/^[0-9]$/.test(first)) {
546
- return dni(value);
547
- } else if (/^[XYZ]$/.test(first)) {
548
- return nie(value);
549
- } else {
550
- return cif(value);
551
- }
552
- },
553
-
554
- /**
555
- * Validate Finnish VAT number
556
- * Examples:
557
- * - Valid: FI20774740
558
- * - Invalid: FI20774741
559
- *
560
- * @param {String} value VAT number
561
- * @returns {Boolean}
562
- */
563
- _fi: function(value) {
564
- if (!/^FI[0-9]{8}$/.test(value)) {
565
- return false;
566
- }
567
-
568
- value = value.substr(2);
569
- var sum = 0,
570
- weight = [7, 9, 10, 5, 8, 4, 2, 1];
571
-
572
- for (var i = 0; i < 8; i++) {
573
- sum += parseInt(value.charAt(i), 10) * weight[i];
574
- }
575
-
576
- return (sum % 11 === 0);
577
- },
578
-
579
- /**
580
- * Validate French VAT number (TVA - taxe sur la valeur ajoutée)
581
- * It's constructed by a SIREN number, prefixed by two characters.
582
- *
583
- * Examples:
584
- * - Valid: FR40303265045, FR23334175221, FRK7399859412, FR4Z123456782
585
- * - Invalid: FR84323140391
586
- *
587
- * @param {String} value VAT number
588
- * @returns {Boolean}
589
- */
590
- _fr: function(value) {
591
- if (!/^FR[0-9A-Z]{2}[0-9]{9}$/.test(value)) {
592
- return false;
593
- }
594
-
595
- value = value.substr(2);
596
-
597
- if (!$.fn.bootstrapValidator.helpers.luhn(value.substr(2))) {
598
- return false;
599
- }
600
-
601
- if (/^[0-9]{2}$/.test(value.substr(0, 2))) {
602
- // First two characters are digits
603
- return value.substr(0, 2) === (parseInt(value.substr(2) + '12', 10) % 97 + '');
604
- } else {
605
- // The first characters cann't be O and I
606
- var alphabet = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ',
607
- check;
608
- // First one is digit
609
- if (/^[0-9]{1}$/.test(value.charAt(0))) {
610
- check = alphabet.indexOf(value.charAt(0)) * 24 + alphabet.indexOf(value.charAt(1)) - 10;
611
- } else {
612
- check = alphabet.indexOf(value.charAt(0)) * 34 + alphabet.indexOf(value.charAt(1)) - 100;
613
- }
614
- return ((parseInt(value.substr(2), 10) + 1 + Math.floor(check / 11)) % 11) === (check % 11);
615
- }
616
- },
617
-
618
- /**
619
- * Validate United Kingdom VAT number
620
- * Example:
621
- * - Valid: GB980780684
622
- * - Invalid: GB802311781
623
- *
624
- * @param {String} value VAT number
625
- * @returns {Boolean}
626
- */
627
- _gb: function(value) {
628
- if (!/^GB[0-9]{9}$/.test(value) /* Standard */
629
- && !/^GB[0-9]{12}$/.test(value) /* Branches */
630
- && !/^GBGD[0-9]{3}$/.test(value) /* Government department */
631
- && !/^GBHA[0-9]{3}$/.test(value) /* Health authority */
632
- && !/^GB(GD|HA)8888[0-9]{5}$/.test(value))
633
- {
634
- return false;
635
- }
636
-
637
- value = value.substr(2);
638
- var length = value.length;
639
- if (length === 5) {
640
- var firstTwo = value.substr(0, 2),
641
- lastThree = parseInt(value.substr(2), 10);
642
- return ('GD' === firstTwo && lastThree < 500) || ('HA' === firstTwo && lastThree >= 500);
643
- } else if (length === 11 && ('GD8888' === value.substr(0, 6) || 'HA8888' === value.substr(0, 6))) {
644
- if (('GD' === value.substr(0, 2) && parseInt(value.substr(6, 3), 10) >= 500)
645
- || ('HA' === value.substr(0, 2) && parseInt(value.substr(6, 3), 10) < 500))
646
- {
647
- return false;
648
- }
649
- return (parseInt(value.substr(6, 3), 10) % 97 === parseInt(value.substr(9, 2), 10));
650
- } else if (length === 9 || length === 12) {
651
- var sum = 0,
652
- weight = [8, 7, 6, 5, 4, 3, 2, 10, 1];
653
- for (var i = 0; i < 9; i++) {
654
- sum += parseInt(value.charAt(i), 10) * weight[i];
655
- }
656
- sum = sum % 97;
657
-
658
- if (parseInt(value.substr(0, 3), 10) >= 100) {
659
- return (sum === 0 || sum === 42 || sum === 55);
660
- } else {
661
- return (sum === 0);
662
- }
663
- }
664
-
665
- return true;
666
- },
667
-
668
- /**
669
- * Validate Greek VAT number
670
- * Examples:
671
- * - Valid: GR023456780, EL094259216
672
- * - Invalid: EL123456781
673
- *
674
- * @param {String} value VAT number
675
- * @returns {Boolean}
676
- */
677
- _gr: function(value) {
678
- if (!/^GR[0-9]{9}$/.test(value)) {
679
- return false;
680
- }
681
-
682
- value = value.substr(2);
683
- if (value.length === 8) {
684
- value = '0' + value;
685
- }
686
-
687
- var sum = 0,
688
- weight = [256, 128, 64, 32, 16, 8, 4, 2];
689
- for (var i = 0; i < 8; i++) {
690
- sum += parseInt(value.charAt(i), 10) * weight[i];
691
- }
692
- sum = (sum % 11) % 10;
693
-
694
- return (sum + '' === value.substr(8, 1));
695
- },
696
-
697
- // EL is traditionally prefix of Greek VAT numbers
698
- _el: function(value) {
699
- if (!/^EL[0-9]{9}$/.test(value)) {
700
- return false;
701
- }
702
-
703
- value = 'GR' + value.substr(2);
704
- return this._gr(value);
705
- },
706
-
707
- /**
708
- * Validate Hungarian VAT number
709
- * Examples:
710
- * - Valid: HU12892312
711
- * - Invalid: HU12892313
712
- *
713
- * @param {String} value VAT number
714
- * @returns {Boolean}
715
- */
716
- _hu: function(value) {
717
- if (!/^HU[0-9]{8}$/.test(value)) {
718
- return false;
719
- }
720
-
721
- value = value.substr(2);
722
- var sum = 0,
723
- weight = [9, 7, 3, 1, 9, 7, 3, 1];
724
-
725
- for (var i = 0; i < 8; i++) {
726
- sum += parseInt(value.charAt(i), 10) * weight[i];
727
- }
728
-
729
- return (sum % 10 === 0);
730
- },
731
-
732
- /**
733
- * Validate Croatian VAT number
734
- * Examples:
735
- * - Valid: HR33392005961
736
- * - Invalid: HR33392005962
737
- *
738
- * @param {String} value VAT number
739
- * @returns {Boolean}
740
- */
741
- _hr: function(value) {
742
- if (!/^HR[0-9]{11}$/.test(value)) {
743
- return false;
744
- }
745
-
746
- value = value.substr(2);
747
- return $.fn.bootstrapValidator.helpers.mod11And10(value);
748
- },
749
-
750
- /**
751
- * Validate Irish VAT number
752
- * Examples:
753
- * - Valid: IE6433435F, IE6433435OA, IE8D79739I
754
- * - Invalid: IE8D79738J
755
- *
756
- * @param {String} value VAT number
757
- * @returns {Boolean}
758
- */
759
- _ie: function(value) {
760
- if (!/^IE[0-9]{1}[0-9A-Z\*\+]{1}[0-9]{5}[A-Z]{1,2}$/.test(value)) {
761
- return false;
762
- }
763
-
764
- value = value.substr(2);
765
- var getCheckDigit = function(value) {
766
- while (value.length < 7) {
767
- value = '0' + value;
768
- }
769
- var alphabet = 'WABCDEFGHIJKLMNOPQRSTUV',
770
- sum = 0;
771
- for (var i = 0; i < 7; i++) {
772
- sum += parseInt(value.charAt(i), 10) * (8 - i);
773
- }
774
- sum += 9 * alphabet.indexOf(value.substr(7));
775
- return alphabet[sum % 23];
776
- };
777
-
778
- // The first 7 characters are digits
779
- if (/^[0-9]+$/.test(value.substr(0, 7))) {
780
- // New system
781
- return value.charAt(7) === getCheckDigit(value.substr(0, 7) + value.substr(8) + '');
782
- } else if ('ABCDEFGHIJKLMNOPQRSTUVWXYZ+*'.indexOf(value.charAt(1)) !== -1) {
783
- // Old system
784
- return value.charAt(7) === getCheckDigit(value.substr(2, 5) + value.substr(0, 1) + '');
785
- }
786
-
787
- return true;
788
- },
789
-
790
- /**
791
- * Validate Italian VAT number, which consists of 11 digits.
792
- * - First 7 digits are a company identifier
793
- * - Next 3 are the province of residence
794
- * - The last one is a check digit
795
- *
796
- * Examples:
797
- * - Valid: IT00743110157
798
- * - Invalid: IT00743110158
799
- *
800
- * @param {String} value VAT number
801
- * @returns {Boolean}
802
- */
803
- _it: function(value) {
804
- if (!/^IT[0-9]{11}$/.test(value)) {
805
- return false;
806
- }
807
-
808
- value = value.substr(2);
809
- if (parseInt(value.substr(0, 7), 10) === 0) {
810
- return false;
811
- }
812
-
813
- var lastThree = parseInt(value.substr(7, 3), 10);
814
- if ((lastThree < 1) || (lastThree > 201) && lastThree !== 999 && lastThree !== 888) {
815
- return false;
816
- }
817
-
818
- return $.fn.bootstrapValidator.helpers.luhn(value);
819
- },
820
-
821
- /**
822
- * Validate Lithuanian VAT number
823
- * It can be:
824
- * - 9 digits, for legal entities
825
- * - 12 digits, for temporarily registered taxpayers
826
- *
827
- * Examples:
828
- * - Valid: LT119511515, LT100001919017, LT100004801610
829
- * - Invalid: LT100001919018
830
- *
831
- * @param {String} value VAT number
832
- * @returns {Boolean}
833
- */
834
- _lt: function(value) {
835
- if (!/^LT([0-9]{7}1[0-9]{1}|[0-9]{10}1[0-9]{1})$/.test(value)) {
836
- return false;
837
- }
838
-
839
- value = value.substr(2);
840
- var length = value.length,
841
- sum = 0,
842
- i;
843
- for (i = 0; i < length - 1; i++) {
844
- sum += parseInt(value.charAt(i), 10) * (1 + i % 9);
845
- }
846
- var check = sum % 11;
847
- if (check === 10) {
848
- sum = 0;
849
- for (i = 0; i < length - 1; i++) {
850
- sum += parseInt(value.charAt(i), 10) * (1 + (i + 2) % 9);
851
- }
852
- }
853
- check = check % 11 % 10;
854
- return (check + '' === value.charAt(length - 1));
855
- },
856
-
857
- /**
858
- * Validate Luxembourg VAT number
859
- * Examples:
860
- * - Valid: LU15027442
861
- * - Invalid: LU15027443
862
- *
863
- * @param {String} value VAT number
864
- * @returns {Boolean}
865
- */
866
- _lu: function(value) {
867
- if (!/^LU[0-9]{8}$/.test(value)) {
868
- return false;
869
- }
870
-
871
- value = value.substr(2);
872
- return ((parseInt(value.substr(0, 6), 10) % 89) + '' === value.substr(6, 2));
873
- },
874
-
875
- /**
876
- * Validate Latvian VAT number
877
- * Examples:
878
- * - Valid: LV40003521600, LV16117519997
879
- * - Invalid: LV40003521601, LV16137519997
880
- *
881
- * @param {String} value VAT number
882
- * @returns {Boolean}
883
- */
884
- _lv: function(value) {
885
- if (!/^LV[0-9]{11}$/.test(value)) {
886
- return false;
887
- }
888
-
889
- value = value.substr(2);
890
- var first = parseInt(value.charAt(0), 10),
891
- sum = 0,
892
- weight = [],
893
- i,
894
- length = value.length;
895
- if (first > 3) {
896
- // Legal entity
897
- sum = 0;
898
- weight = [9, 1, 4, 8, 3, 10, 2, 5, 7, 6, 1];
899
- for (i = 0; i < length; i++) {
900
- sum += parseInt(value.charAt(i), 10) * weight[i];
901
- }
902
- sum = sum % 11;
903
- return (sum === 3);
904
- } else {
905
- // Check birth date
906
- var day = parseInt(value.substr(0, 2), 10),
907
- month = parseInt(value.substr(2, 2), 10),
908
- year = parseInt(value.substr(4, 2), 10);
909
- year = year + 1800 + parseInt(value.charAt(6), 10) * 100;
910
-
911
- if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {
912
- return false;
913
- }
914
-
915
- // Check personal code
916
- sum = 0;
917
- weight = [10, 5, 8, 4, 2, 1, 6, 3, 7, 9];
918
- for (i = 0; i < length - 1; i++) {
919
- sum += parseInt(value.charAt(i), 10) * weight[i];
920
- }
921
- sum = (sum + 1) % 11 % 10;
922
- return (sum + '' === value.charAt(length - 1));
923
- }
924
- },
925
-
926
- /**
927
- * Validate Maltese VAT number
928
- * Examples:
929
- * - Valid: MT11679112
930
- * - Invalid: MT11679113
931
- *
932
- * @param {String} value VAT number
933
- * @returns {Boolean}
934
- */
935
- _mt: function(value) {
936
- if (!/^MT[0-9]{8}$/.test(value)) {
937
- return false;
938
- }
939
-
940
- value = value.substr(2);
941
- var sum = 0,
942
- weight = [3, 4, 6, 7, 8, 9, 10, 1];
943
-
944
- for (var i = 0; i < 8; i++) {
945
- sum += parseInt(value.charAt(i), 10) * weight[i];
946
- }
947
-
948
- return (sum % 37 === 0);
949
- },
950
-
951
- /**
952
- * Validate Dutch VAT number
953
- * Examples:
954
- * - Valid: NL004495445B01
955
- * - Invalid: NL123456789B90
956
- *
957
- * @param {String} value VAT number
958
- * @returns {Boolean}
959
- */
960
- _nl: function(value) {
961
- if (!/^NL[0-9]{9}B[0-9]{2}$/.test(value)) {
962
- return false;
963
- }
964
- value = value.substr(2);
965
- var sum = 0,
966
- weight = [9, 8, 7, 6, 5, 4, 3, 2];
967
- for (var i = 0; i < 8; i++) {
968
- sum += parseInt(value.charAt(i), 10) * weight[i];
969
- }
970
-
971
- sum = sum % 11;
972
- if (sum > 9) {
973
- sum = 0;
974
- }
975
- return (sum + '' === value.substr(8, 1));
976
- },
977
-
978
- /**
979
- * Validate Norwegian VAT number
980
- *
981
- * @see http://www.brreg.no/english/coordination/number.html
982
- * @param {String} value VAT number
983
- * @returns {Boolean}
984
- */
985
- _no: function(value) {
986
- if (!/^NO[0-9]{9}$/.test(value)) {
987
- return false;
988
- }
989
- value = value.substr(2);
990
- var sum = 0,
991
- weight = [3, 2, 7, 6, 5, 4, 3, 2];
992
- for (var i = 0; i < 8; i++) {
993
- sum += parseInt(value.charAt(i), 10) * weight[i];
994
- }
995
-
996
- sum = 11 - sum % 11;
997
- if (sum === 11) {
998
- sum = 0;
999
- }
1000
- return (sum + '' === value.substr(8, 1));
1001
- },
1002
-
1003
- /**
1004
- * Validate Polish VAT number
1005
- * Examples:
1006
- * - Valid: PL8567346215
1007
- * - Invalid: PL8567346216
1008
- *
1009
- * @param {String} value VAT number
1010
- * @returns {Boolean}
1011
- */
1012
- _pl: function(value) {
1013
- if (!/^PL[0-9]{10}$/.test(value)) {
1014
- return false;
1015
- }
1016
-
1017
- value = value.substr(2);
1018
- var sum = 0,
1019
- weight = [6, 5, 7, 2, 3, 4, 5, 6, 7, -1];
1020
-
1021
- for (var i = 0; i < 10; i++) {
1022
- sum += parseInt(value.charAt(i), 10) * weight[i];
1023
- }
1024
-
1025
- return (sum % 11 === 0);
1026
- },
1027
-
1028
- /**
1029
- * Validate Portuguese VAT number
1030
- * Examples:
1031
- * - Valid: PT501964843
1032
- * - Invalid: PT501964842
1033
- *
1034
- * @param {String} value VAT number
1035
- * @returns {Boolean}
1036
- */
1037
- _pt: function(value) {
1038
- if (!/^PT[0-9]{9}$/.test(value)) {
1039
- return false;
1040
- }
1041
-
1042
- value = value.substr(2);
1043
- var sum = 0,
1044
- weight = [9, 8, 7, 6, 5, 4, 3, 2];
1045
-
1046
- for (var i = 0; i < 8; i++) {
1047
- sum += parseInt(value.charAt(i), 10) * weight[i];
1048
- }
1049
- sum = 11 - sum % 11;
1050
- if (sum > 9) {
1051
- sum = 0;
1052
- }
1053
- return (sum + '' === value.substr(8, 1));
1054
- },
1055
-
1056
- /**
1057
- * Validate Romanian VAT number
1058
- * Examples:
1059
- * - Valid: RO18547290
1060
- * - Invalid: RO18547291
1061
- *
1062
- * @param {String} value VAT number
1063
- * @returns {Boolean}
1064
- */
1065
- _ro: function(value) {
1066
- if (!/^RO[1-9][0-9]{1,9}$/.test(value)) {
1067
- return false;
1068
- }
1069
- value = value.substr(2);
1070
-
1071
- var length = value.length,
1072
- weight = [7, 5, 3, 2, 1, 7, 5, 3, 2].slice(10 - length),
1073
- sum = 0;
1074
- for (var i = 0; i < length - 1; i++) {
1075
- sum += parseInt(value.charAt(i), 10) * weight[i];
1076
- }
1077
-
1078
- sum = (10 * sum) % 11 % 10;
1079
- return (sum + '' === value.substr(length - 1, 1));
1080
- },
1081
-
1082
- /**
1083
- * Validate Russian VAT number (Taxpayer Identification Number - INN)
1084
- *
1085
- * @param {String} value VAT number
1086
- * @returns {Boolean}
1087
- */
1088
- _ru: function(value) {
1089
- if (!/^RU([0-9]{9}|[0-9]{12})$/.test(value)) {
1090
- return false;
1091
- }
1092
-
1093
- value = value.substr(2);
1094
- var i = 0;
1095
- if (value.length === 10) {
1096
- var sum = 0,
1097
- weight = [2, 4, 10, 3, 5, 9, 4, 6, 8, 0];
1098
- for (i = 0; i < 10; i++) {
1099
- sum += parseInt(value.charAt(i), 10) * weight[i];
1100
- }
1101
- sum = sum % 11;
1102
- if (sum > 9) {
1103
- sum = sum % 10;
1104
- }
1105
-
1106
- return (sum + '' === value.substr(9, 1));
1107
- } else if (value.length === 12) {
1108
- var sum1 = 0,
1109
- weight1 = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0],
1110
- sum2 = 0,
1111
- weight2 = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0];
1112
-
1113
- for (i = 0; i < 11; i++) {
1114
- sum1 += parseInt(value.charAt(i), 10) * weight1[i];
1115
- sum2 += parseInt(value.charAt(i), 10) * weight2[i];
1116
- }
1117
- sum1 = sum1 % 11;
1118
- if (sum1 > 9) {
1119
- sum1 = sum1 % 10;
1120
- }
1121
- sum2 = sum2 % 11;
1122
- if (sum2 > 9) {
1123
- sum2 = sum2 % 10;
1124
- }
1125
-
1126
- return (sum1 + '' === value.substr(10, 1) && sum2 + '' === value.substr(11, 1));
1127
- }
1128
-
1129
- return false;
1130
- },
1131
-
1132
- /**
1133
- * Validate Serbian VAT number
1134
- *
1135
- * @param {String} value VAT number
1136
- * @returns {Boolean}
1137
- */
1138
- _rs: function(value) {
1139
- if (!/^RS[0-9]{9}$/.test(value)) {
1140
- return false;
1141
- }
1142
-
1143
- value = value.substr(2);
1144
- var sum = 10,
1145
- temp = 0;
1146
- for (var i = 0; i < 8; i++) {
1147
- temp = (parseInt(value.charAt(i), 10) + sum) % 10;
1148
- if (temp === 0) {
1149
- temp = 10;
1150
- }
1151
- sum = (2 * temp) % 11;
1152
- }
1153
-
1154
- return ((sum + parseInt(value.substr(8, 1), 10)) % 10 === 1);
1155
- },
1156
-
1157
- /**
1158
- * Validate Swedish VAT number
1159
- * Examples:
1160
- * - Valid: SE123456789701
1161
- * - Invalid: SE123456789101
1162
- *
1163
- * @param {String} value VAT number
1164
- * @returns {Boolean}
1165
- */
1166
- _se: function(value) {
1167
- if (!/^SE[0-9]{10}01$/.test(value)) {
1168
- return false;
1169
- }
1170
-
1171
- value = value.substr(2, 10);
1172
- return $.fn.bootstrapValidator.helpers.luhn(value);
1173
- },
1174
-
1175
- /**
1176
- * Validate Slovenian VAT number
1177
- * Examples:
1178
- * - Valid: SI50223054
1179
- * - Invalid: SI50223055
1180
- *
1181
- * @param {String} value VAT number
1182
- * @returns {Boolean}
1183
- */
1184
- _si: function(value) {
1185
- if (!/^SI[0-9]{8}$/.test(value)) {
1186
- return false;
1187
- }
1188
-
1189
- value = value.substr(2);
1190
- var sum = 0,
1191
- weight = [8, 7, 6, 5, 4, 3, 2];
1192
-
1193
- for (var i = 0; i < 7; i++) {
1194
- sum += parseInt(value.charAt(i), 10) * weight[i];
1195
- }
1196
- sum = 11 - sum % 11;
1197
- if (sum === 10) {
1198
- sum = 0;
1199
- }
1200
- return (sum + '' === value.substr(7, 1));
1201
- },
1202
-
1203
- /**
1204
- * Validate Slovak VAT number
1205
- * Examples:
1206
- * - Valid: SK2022749619
1207
- * - Invalid: SK2022749618
1208
- *
1209
- * @param {String} value VAT number
1210
- * @returns {Boolean}
1211
- */
1212
- _sk: function(value) {
1213
- if (!/^SK[1-9][0-9][(2-4)|(6-9)][0-9]{7}$/.test(value)) {
1214
- return false;
1215
- }
1216
-
1217
- return (parseInt(value.substr(2), 10) % 11 === 0);
1218
- }
1219
- };
1220
- }(window.jQuery));