|
|
@@ -2404,6 +2404,31 @@
|
|
|
return true;
|
|
|
},
|
|
|
|
|
|
+ // Helper methods
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Implement Luhn validation algorithm
|
|
|
+ * Credit to https://gist.github.com/ShirtlessKirk/2134376
|
|
|
+ *
|
|
|
+ * @param {String} value
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+ _luhn: function(value) {
|
|
|
+ var length = value.length,
|
|
|
+ mul = 0,
|
|
|
+ prodArr = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]],
|
|
|
+ sum = 0;
|
|
|
+
|
|
|
+ while (length--) {
|
|
|
+ sum += prodArr[mul][parseInt(value.charAt(length), 10)];
|
|
|
+ mul ^= 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return (sum % 10 === 0 && sum > 0);
|
|
|
+ },
|
|
|
+
|
|
|
+ // VAT validators
|
|
|
+
|
|
|
/**
|
|
|
* Validate Austrian VAT number
|
|
|
* Example:
|
|
|
@@ -2411,7 +2436,7 @@
|
|
|
* - Invalid: ATU13585626
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_at: function(value) {
|
|
|
if (!/^ATU[0-9]{8}$/.test(value)) {
|
|
|
@@ -2446,7 +2471,7 @@
|
|
|
* - Invalid: BE431150351
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_be: function(value) {
|
|
|
if (!/^BE[0]{0,1}[0-9]{9}$/.test(value)) {
|
|
|
@@ -2476,7 +2501,7 @@
|
|
|
* - Invalid: BG175074753, BG7552A10004, BG7111042922
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_bg: function(value) {
|
|
|
if (!/^BG[0-9]{9,10}$/.test(value)) {
|
|
|
@@ -2568,7 +2593,7 @@
|
|
|
* Validate Swiss VAT number
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_ch: function(value) {
|
|
|
if (!/^CHE[0-9]{9}(MWST)?$/.test(value)) {
|
|
|
@@ -2600,7 +2625,7 @@
|
|
|
* - Invalid: CY10259033Z
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_cy: function(value) {
|
|
|
if (!/^CY[0-5|9]{1}[0-9]{7}[A-Z]{1}$/.test(value)) {
|
|
|
@@ -2644,7 +2669,7 @@
|
|
|
* - Invalid: i) CZ25123890; ii) CZ1103492745, CZ590312123
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_cz: function(value) {
|
|
|
if (!/^CZ[0-9]{8,10}$/.test(value)) {
|
|
|
@@ -2734,7 +2759,7 @@
|
|
|
* - Invalid: DE136695978
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_de: function(value) {
|
|
|
if (!/^DE[0-9]{9}$/.test(value)) {
|
|
|
@@ -2763,7 +2788,7 @@
|
|
|
* - Invalid: DK13585627
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_dk: function(value) {
|
|
|
if (!/^DK[0-9]{8}$/.test(value)) {
|
|
|
@@ -2787,7 +2812,7 @@
|
|
|
* - Invalid: EE100594103
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_ee: function(value) {
|
|
|
if (!/^EE[0-9]{9}$/.test(value)) {
|
|
|
@@ -2817,7 +2842,7 @@
|
|
|
* - Invalid: i) ES54362315Z; ii) ESX2482300A; iii) ESJ99216583
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_es: function(value) {
|
|
|
if (!/^ES[0-9A-Z][0-9]{7}[0-9A-Z]$/.test(value)) {
|
|
|
@@ -2881,7 +2906,7 @@
|
|
|
* - Invalid: FI20774741
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_fi: function(value) {
|
|
|
if (!/^FI[0-9]{8}$/.test(value)) {
|
|
|
@@ -2908,7 +2933,7 @@
|
|
|
* - Invalid: FR84323140391
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_fr: function(value) {
|
|
|
if (!/^FR[0-9A-Z]{2}[0-9]{9}$/.test(value)) {
|
|
|
@@ -2963,7 +2988,7 @@
|
|
|
* - Invalid: EL123456781
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_gr: function(value) {
|
|
|
if (!/^GR[0-9]{9}$/.test(value)) {
|
|
|
@@ -3002,7 +3027,7 @@
|
|
|
* - Invalid: HU12892313
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_hu: function(value) {
|
|
|
if (!/^HU[0-9]{8}$/.test(value)) {
|
|
|
@@ -3027,7 +3052,7 @@
|
|
|
* - Invalid: HR33392005962
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_hr: function(value) {
|
|
|
if (!/^HR[0-9]{11}$/.test(value)) {
|
|
|
@@ -3056,7 +3081,7 @@
|
|
|
* - Invalid: IE8D79738J
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_ie: function(value) {
|
|
|
if (!/^IE[0-9]{1}[0-9A-Z\*\+]{1}[0-9]{5}[A-Z]{1,2}$/.test(value)) {
|
|
|
@@ -3100,7 +3125,7 @@
|
|
|
* - Invalid: IT00743110158
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_it: function(value) {
|
|
|
if (!/^IT[0-9]{11}$/.test(value)) {
|
|
|
@@ -3143,7 +3168,7 @@
|
|
|
* - Invalid: LU15027443
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_lu: function(value) {
|
|
|
if (!/^LU[0-9]{8}$/.test(value)) {
|
|
|
@@ -3161,7 +3186,7 @@
|
|
|
* - Invalid: MT11679113
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_mt: function(value) {
|
|
|
if (!/^MT[0-9]{8}$/.test(value)) {
|
|
|
@@ -3186,7 +3211,7 @@
|
|
|
* - Invalid: NL123456789B90
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_nl: function(value) {
|
|
|
if (!/^NL[0-9]{9}B[0-9]{2}$/.test(value)) {
|
|
|
@@ -3211,7 +3236,7 @@
|
|
|
*
|
|
|
* @see http://www.brreg.no/english/coordination/number.html
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_no: function(value) {
|
|
|
if (!/^NO[0-9]{9}$/.test(value)) {
|
|
|
@@ -3238,7 +3263,7 @@
|
|
|
* - Invalid: PL8567346216
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_pl: function(value) {
|
|
|
if (!/^PL[0-9]{10}$/.test(value)) {
|
|
|
@@ -3263,7 +3288,7 @@
|
|
|
* - Invalid: PT501964842
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_pt: function(value) {
|
|
|
if (!/^PT[0-9]{9}$/.test(value)) {
|
|
|
@@ -3291,7 +3316,7 @@
|
|
|
* - Invalid: RO18547291
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_ro: function(value) {
|
|
|
if (!/^RO[1-9][0-9]{1,9}$/.test(value)) {
|
|
|
@@ -3314,7 +3339,7 @@
|
|
|
* Validate Serbian VAT number
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_rs: function(value) {
|
|
|
if (!/^RS[0-9]{9}$/.test(value)) {
|
|
|
@@ -3342,7 +3367,7 @@
|
|
|
* - Invalid: SI50223055
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_si: function(value) {
|
|
|
if (!/^SI[0-9]{8}$/.test(value)) {
|
|
|
@@ -3364,13 +3389,31 @@
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
+ * Validate Swedish VAT number
|
|
|
+ * Examples:
|
|
|
+ * - Valid: SE123456789701
|
|
|
+ * - Invalid: SE123456789101
|
|
|
+ *
|
|
|
+ * @param {String} value VAT number
|
|
|
+ * @returns {Boolean}
|
|
|
+ */
|
|
|
+ _se: function(value) {
|
|
|
+ if (!/^SE[0-9]{10}01$/.test(value)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ value = value.substr(2, 10);
|
|
|
+ return this._luhn(value);
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
* Validate Slovak VAT number
|
|
|
* Examples:
|
|
|
* - Valid: SK2022749619
|
|
|
* - Invalid: SK2022749618
|
|
|
*
|
|
|
* @param {String} value VAT number
|
|
|
- * @return {Boolean}
|
|
|
+ * @returns {Boolean}
|
|
|
*/
|
|
|
_sk: function(value) {
|
|
|
if (!/^SK[1-9][0-9][(2-4)|(6-9)][0-9]{7}$/.test(value)) {
|