diff --git a/lib/amd/lib/countries/andorra.js b/lib/amd/lib/countries/andorra.js index dadd8e6..8a09e51 100644 --- a/lib/amd/lib/countries/andorra.js +++ b/lib/amd/lib/countries/andorra.js @@ -3,14 +3,29 @@ define(["require", "exports"], function (require, exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.andorra = void 0; exports.andorra = { - name: 'Andorra', - codes: ['AD', 'AND', '020'], - calcFn: (vat) => { - return vat.length === 8; - }, - rules: { - multipliers: {}, - regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgopuFEALECDGOPU]{1})$/] + name: 'Andorra', + codes: ['AD', 'AND', '020'], + calcFn: (vat) => { + let firstLetter = vat.slice(0, 1).toUpperCase(); + let number = parseInt(vat.slice(1, 7)); + + if (vat.length !== 8) { + return false; } + if (!'ACDEFGLOPU'.includes(firstLetter)) { + return false + } + if (firstLetter === 'F' && number > 699999) { + return false; + } + if ('AL'.includes(firstLetter) && number > 699999 && number < 800000) { + return false; + } + return true; + }, + rules: { + multipliers:{}, + regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgoputFEALECDGOPUT]{1})$/] + } }; }); diff --git a/lib/commonjs/lib/countries/andorra.js b/lib/commonjs/lib/countries/andorra.js index 1fe72f7..296397d 100644 --- a/lib/commonjs/lib/countries/andorra.js +++ b/lib/commonjs/lib/countries/andorra.js @@ -2,13 +2,29 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.andorra = void 0; exports.andorra = { - name: 'Andorra', - codes: ['AD', 'AND', '020'], - calcFn: function (vat) { - return vat.length === 8; - }, - rules: { - multipliers: {}, - regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgopuFEALECDGOPU]{1})$/] + name: 'Andorra', + codes: ['AD', 'AND', '020'], + calcFn: (vat) => { + let firstLetter = vat.slice(0, 1).toUpperCase(); + let number = parseInt(vat.slice(1, 7)); + + if (vat.length !== 8) { + return false; } + if (!'ACDEFGLOPU'.includes(firstLetter)) { + return false + } + if (firstLetter === 'F' && number > 699999) { + return false; + } + if ('AL'.includes(firstLetter) && number > 699999 && number < 800000) { + return false; + } + return true; + }, + rules: { + multipliers: {}, + regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgoputFEALECDGOPUT]{1})$/] + } + }; diff --git a/lib/es6/lib/countries/andorra.js b/lib/es6/lib/countries/andorra.js index fccef90..15a4a15 100644 --- a/lib/es6/lib/countries/andorra.js +++ b/lib/es6/lib/countries/andorra.js @@ -1,11 +1,27 @@ export const andorra = { name: 'Andorra', codes: ['AD', 'AND', '020'], - calcFn: (vat) => { - return vat.length === 8; - }, - rules: { - multipliers: {}, - regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgopuFEALECDGOPU]{1})$/] + calcFn: (vat) => { + let firstLetter = vat.slice(0, 1).toUpperCase(); + let number = parseInt(vat.slice(1, 7)); + + if (vat.length !== 8) { + return false; + } + if (!'ACDEFGLOPU'.includes(firstLetter)) { + return false + } + if (firstLetter === 'F' && number > 699999) { + return false; + } + if ('AL'.includes(firstLetter) && number > 699999 && number < 800000) { + return false; + } + return true; + }, + rules: { + multipliers: {}, + regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgoputFEALECDGOPUT]{1})$/] + } }; diff --git a/lib/system/lib/countries/andorra.js b/lib/system/lib/countries/andorra.js index a85a2e8..1e9c8d5 100644 --- a/lib/system/lib/countries/andorra.js +++ b/lib/system/lib/countries/andorra.js @@ -1,21 +1,37 @@ System.register([], function (exports_1, context_1) { - "use strict"; - var andorra; - var __moduleName = context_1 && context_1.id; - return { - setters: [], - execute: function () { - exports_1("andorra", andorra = { - name: 'Andorra', - codes: ['AD', 'AND', '020'], - calcFn: (vat) => { - return vat.length === 8; - }, - rules: { - multipliers: {}, - regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgopuFEALECDGOPU]{1})$/] - } - }); + "use strict"; + var andorra; + var __moduleName = context_1 && context_1.id; + return { + setters: [], + execute: function () { + exports_1("andorra", andorra = { + name: 'Andorra', + codes: ['AD', 'AND', '020'], + calcFn: (vat) => { + let firstLetter = vat.slice(0, 1).toUpperCase(); + let number = parseInt(vat.slice(1, 7)); + + if (vat.length !== 8) { + return false; + } + if (!'ACDEFGLOPU'.includes(firstLetter)) { + return false + } + if (firstLetter === 'F' && number > 699999) { + return false; + } + if ('AL'.includes(firstLetter) && number > 699999 && number < 800000) { + return false; + } + return true; + }, + rules: { + multipliers: {}, + regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgoputFEALECDGOPUT]{1})$/] + } - }; + }); + } + }; }); diff --git a/lib/umd/lib/countries/andorra.js b/lib/umd/lib/countries/andorra.js index d7b9684..7969433 100644 --- a/lib/umd/lib/countries/andorra.js +++ b/lib/umd/lib/countries/andorra.js @@ -1,24 +1,37 @@ (function (factory) { - if (typeof module === "object" && typeof module.exports === "object") { - var v = factory(require, exports); - if (v !== undefined) module.exports = v; - } - else if (typeof define === "function" && define.amd) { - define(["require", "exports"], factory); - } + if (typeof module === "object" && typeof module.exports === "object") { + var v = factory(require, exports); + if (v !== undefined) module.exports = v; + } else if (typeof define === "function" && define.amd) { + define(["require", "exports"], factory); + } })(function (require, exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.andorra = void 0; - exports.andorra = { - name: 'Andorra', - codes: ['AD', 'AND', '020'], - calcFn: (vat) => { - return vat.length === 8; - }, - rules: { - multipliers: {}, - regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgopuFEALECDGOPU]{1})$/] - } - }; + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.austria = { + name: 'Andorra', + codes: ['AD', 'AND', '020'], + calcFn: (vat) => { + let firstLetter = vat.slice(0, 1).toUpperCase(); + let number = parseInt(vat.slice(1, 7)); + + if (vat.length !== 8) { + return false; + } + if (!'ACDEFGLOPU'.includes(firstLetter)) { + return false + } + if (firstLetter === 'F' && number > 699999) { + return false; + } + if ('AL'.includes(firstLetter) && number > 699999 && number < 800000) { + return false; + } + return true; + }, + rules: { + multipliers: {}, + regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgoputFEALECDGOPUT]{1})$/] + } + }; }); diff --git a/src/lib/countries/andorra.ts b/src/lib/countries/andorra.ts index 3b49d62..3c5d9ee 100644 --- a/src/lib/countries/andorra.ts +++ b/src/lib/countries/andorra.ts @@ -3,11 +3,27 @@ import { Country } from '../jsvat'; export const andorra: Country = { name: 'Andorra', codes: ['AD', 'AND', '020'], - calcFn: (vat: string): boolean => { - return vat.length === 8; + calcFn: (vat:string) => { + let firstLetter:string = vat.slice(0, 1).toUpperCase(); + let number:number = parseInt(vat.slice(1, 7)); + + if (vat.length !== 8) { + return false; + } + if (!'ACDEFGLOPU'.includes(firstLetter)) { + return false + } + if (firstLetter === 'F' && number > 699999) { + return false; + } + if ('AL'.includes(firstLetter) && number > 699999 && number < 800000) { + return false; + } + return true; }, rules: { - multipliers: {}, - regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgopuFEALECDGOPU]{1})$/] + multipliers:{}, + regex: [/^(AD)([fealecdgopuFEALECDGOPU]{1}\d{6}[fealecdgoputFEALECDGOPUT]{1})$/] + } }; diff --git a/test/countries_vat_lists/andorra.vat.js b/test/countries_vat_lists/andorra.vat.js index eaae0aa..3f72ece 100644 --- a/test/countries_vat_lists/andorra.vat.js +++ b/test/countries_vat_lists/andorra.vat.js @@ -15,7 +15,15 @@ export const valid = [ 'ADG000000G', 'ADO000000O', 'ADP000000P', - 'ADU000000U' -]; + 'ADU000000U', + 'ADF000000T' +] + +export const invalid = [ + 'AD00000000', + 'ADM000000M', + 'ADP000000' +] + export const invalid = ['AD00000000', 'ADM000000M', 'ADP000000'];