[tryton-debian-vcs] vatnumber branch upstream updated. upstream/1.1-1-g158a0f1

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Thu Jul 3 15:56:02 UTC 2014


The following commit has been merged in the upstream branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/vatnumber.git;a=commitdiff;h=upstream/1.1-1-g158a0f1

commit 158a0f1a0ececf0367b46bc5740620f346648193
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Wed Jul 2 14:03:29 2014 +0200

    Adding upstream version 1.2.

diff --git a/CHANGELOG b/CHANGELOG
index e24a5fa..869ef6b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+Version 1.2 - 2014-06-25
+* Use python-stdnum
+* Add support for proxy
+
 Version 1.1 - 2013-06-01
 * Add Python 3 support
 * Add Check Argentina VAT number
diff --git a/PKG-INFO b/PKG-INFO
index e1b549f..e6e8eb7 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: vatnumber
-Version: 1.1
+Version: 1.2
 Summary: Python module to validate VAT numbers
 Home-page: http://code.google.com/p/vatnumber/
 Author: B2CK
diff --git a/setup.py b/setup.py
index e6d57a6..048fe6b 100644
--- a/setup.py
+++ b/setup.py
@@ -36,6 +36,9 @@ setup(name='vatnumber',
         'Topic :: Software Development :: Libraries :: Python Modules',
         ],
     license='GPL-3',
+    install_requires=[
+        'python-stdnum',
+        ],
     extras_require={
         'suds': ['suds'],
         },
diff --git a/vatnumber.egg-info/PKG-INFO b/vatnumber.egg-info/PKG-INFO
index e1b549f..e6e8eb7 100644
--- a/vatnumber.egg-info/PKG-INFO
+++ b/vatnumber.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: vatnumber
-Version: 1.1
+Version: 1.2
 Summary: Python module to validate VAT numbers
 Home-page: http://code.google.com/p/vatnumber/
 Author: B2CK
diff --git a/vatnumber.egg-info/requires.txt b/vatnumber.egg-info/requires.txt
index 6449f6c..24e7794 100644
--- a/vatnumber.egg-info/requires.txt
+++ b/vatnumber.egg-info/requires.txt
@@ -1,4 +1,4 @@
-
+python-stdnum
 
 [suds]
 suds
\ No newline at end of file
diff --git a/vatnumber/__init__.py b/vatnumber/__init__.py
index c11053c..19cf7d5 100644
--- a/vatnumber/__init__.py
+++ b/vatnumber/__init__.py
@@ -2,12 +2,10 @@
 #this repository contains the full copyright notices and license terms.
 '''
 Check the VAT number depending of the country based on formula from
-http://sima-pc.com/nif.php
+http://sima-pc.com/nif.php (dead link, was http://web.archive.org/web/20120118023804/http://sima-pc.com/nif.php)
 http://en.wikipedia.org/wiki/Vat_number
 '''
-
-__version__ = '1.1'
-VIES_URL = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'
+__version__ = '1.2'
 
 
 def _posint(x):
@@ -53,25 +51,8 @@ def check_vat_at(vat):
     '''
     Check Austria VAT number.
     '''
-    if len(vat) != 9:
-        return False
-    if vat[0] != 'U':
-        return False
-    num = vat[1:]
-    try:
-        _posint(num)
-    except ValueError:
-        return False
-    check_sum = int(num[0]) + mult_add(2, int(num[1])) + \
-        int(num[2]) + mult_add(2, int(num[3])) + \
-        int(num[4]) + mult_add(2, int(num[5])) + \
-        int(num[6])
-    check = 10 - ((check_sum + 4) % 10)
-    if check == 10:
-        check = 0
-    if int(vat[-1:]) != check:
-        return False
-    return True
+    import stdnum.at.uid
+    return stdnum.at.uid.is_valid(vat)
 
 
 def check_vat_al(vat):
@@ -113,47 +94,16 @@ def check_vat_be(vat):
     '''
     Check Belgium VAT number.
     '''
-    if len(vat) != 10:
-        return False
-    if vat[0] != '0':
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[-2:]) != \
-            97 - (int(vat[:8]) % 97):
-        return False
-    return True
+    import stdnum.be.vat
+    return stdnum.be.vat.is_valid(vat)
 
 
 def check_vat_bg(vat):
     '''
     Check Bulgaria VAT number.
     '''
-    if len(vat) == 9:
-        #XXX don't know any rules for this length
-        return True
-    if len(vat) != 10:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[0]) in (2, 3) and \
-            int(vat[1:2]) != 22:
-        return False
-    check_sum = 4 * int(vat[0]) + 3 * int(vat[1]) + 2 * int(vat[2]) + \
-        7 * int(vat[3]) + 6 * int(vat[4]) + 5 * int(vat[5]) + \
-        4 * int(vat[6]) + 3 * int(vat[7]) + 2 * int(vat[8])
-    check = 11 - (check_sum % 11)
-    if check == 11:
-        check = 0
-    if check == 10:
-        return False
-    if check != int(vat[9]):
-        return False
-    return True
+    import stdnum.bg.vat
+    return stdnum.bg.vat.is_valid(vat)
 
 
 def check_vat_cl(rut):
@@ -200,482 +150,80 @@ def check_vat_cy(vat):
     '''
     Check Cyprus VAT number.
     '''
-    if len(vat) != 9:
-        return False
-    try:
-        _posint(vat[:8])
-    except ValueError:
-        return False
-    num0 = int(vat[0])
-    num1 = int(vat[1])
-    num2 = int(vat[2])
-    num3 = int(vat[3])
-    num4 = int(vat[4])
-    num5 = int(vat[5])
-    num6 = int(vat[6])
-    num7 = int(vat[7])
-
-    conv = {
-        0: 1,
-        1: 0,
-        2: 5,
-        3: 7,
-        4: 9,
-        5: 13,
-        6: 15,
-        7: 17,
-        8: 19,
-        9: 21,
-    }
-
-    num0 = conv.get(num0, num0)
-    num2 = conv.get(num2, num2)
-    num4 = conv.get(num4, num4)
-    num6 = conv.get(num6, num6)
-
-    check_sum = num0 + num1 + num2 + num3 + num4 + num5 + num6 + num7
-    check = chr(check_sum % 26 + 65)
-    if check != vat[8]:
-        return False
-    return True
+    import stdnum.cy.vat
+    return stdnum.cy.vat.is_valid(vat)
 
 
 def check_vat_cz(vat):
     '''
     Check Czech Republic VAT number.
     '''
-    if len(vat) not in (8, 9, 10):
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-
-    if len(vat) == 8:
-        if int(vat[0]) not in (0, 1, 2, 3, 4, 5, 6, 7, 8):
-            return False
-        check_sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-            5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-            2 * int(vat[6])
-        check = 11 - (check_sum % 11)
-        if check == 10:
-            check = 0
-        if check == 11:
-            check = 1
-        if check != int(vat[7]):
-            return False
-    elif len(vat) == 9 and int(vat[0]) == 6:
-        check_sum = 8 * int(vat[1]) + 7 * int(vat[2]) + 6 * int(vat[3]) + \
-            5 * int(vat[4]) + 4 * int(vat[5]) + 3 * int(vat[6]) + \
-            2 * int(vat[7])
-        check = 9 - ((11 - (check_sum % 11)) % 10)
-        if check != int(vat[8]):
-            return False
-    elif len(vat) == 9:
-        if int(vat[0:2]) > 53 and int(vat[0:2]) < 80:
-            return False
-        if int(vat[2:4]) < 1:
-            return False
-        if int(vat[2:4]) > 12 and int(vat[2:4]) < 51:
-            return False
-        if int(vat[2:4]) > 62:
-            return False
-        if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0:
-            if int(vat[4:6]) < 1:
-                return False
-            if int(vat[4:6]) > 28:
-                return False
-        if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0:
-            if int(vat[4:6]) < 1:
-                return False
-            if int(vat[4:6]) > 29:
-                return False
-        if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61):
-            if int(vat[4:6]) < 1:
-                return False
-            if int(vat[4:6]) > 30:
-                return False
-        if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12, 51,
-                53, 55, 57, 58, 60, 62):
-            if int(vat[4:6]) < 1:
-                return False
-            if int(vat[4:6]) > 31:
-                return False
-    elif len(vat) == 10:
-        if int(vat[0:2]) < 54:
-            return False
-        if int(vat[2:4]) < 1:
-            return False
-        if int(vat[2:4]) > 12 and int(vat[2:4]) < 51:
-            return False
-        if int(vat[2:4]) > 62:
-            return False
-        if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0:
-            if int(vat[4:6]) < 1:
-                return False
-            if int(vat[4:6]) > 28:
-                return False
-        if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0:
-            if int(vat[4:6]) < 1:
-                return False
-            if int(vat[4:6]) > 29:
-                return False
-        if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61):
-            if int(vat[4:6]) < 1:
-                return False
-            if int(vat[4:6]) > 30:
-                return False
-        if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12, 51,
-                53, 55, 57, 58, 60, 62):
-            if int(vat[4:6]) < 1:
-                return False
-            if int(vat[4:6]) > 31:
-                return False
-        if (int(vat[0:2]) + int(vat[2:4]) + int(vat[4:6]) + int(vat[6:8]) +
-                int(vat[8:10])) % 11 != 0 \
-                or int(vat[0:10]) % 11 != 0:
-            return False
-    return True
+    import stdnum.cz.dic
+    return stdnum.cz.dic.is_valid(vat)
 
 
 def check_vat_de(vat):
     '''
     Check Germany VAT number.
     '''
-    if len(vat) != 9:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[0:7]) <= 0:
-        return False
-    check_sum = 0
-    for i in range(8):
-        check_sum = (2 * ((int(vat[i]) + check_sum + 9) % 10 + 1)) % 11
-    check = 11 - check_sum
-    if check == 10:
-        check = 0
-    if int(vat[8]) != check:
-        return False
-    return True
+    import stdnum.de.vat
+    return stdnum.de.vat.is_valid(vat)
 
 
 def check_vat_dk(vat):
     '''
     Check Denmark VAT number.
     '''
-    if len(vat) != 8:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[0]) <= 0:
-        return False
-    check_sum = 2 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-        5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-        2 * int(vat[6]) + int(vat[7])
-    if check_sum % 11 != 0:
-        return False
-    return True
+    import stdnum.dk.cvr
+    return stdnum.dk.cvr.is_valid(vat)
 
 
 def check_vat_ee(vat):
     '''
     Check Estonia VAT number.
     '''
-    if len(vat) != 9:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    check_sum = 3 * int(vat[0]) + 7 * int(vat[1]) + 1 * int(vat[2]) + \
-        3 * int(vat[3]) + 7 * int(vat[4]) + 1 * int(vat[5]) + \
-        3 * int(vat[6]) + 7 * int(vat[7])
-    check = 10 - (check_sum % 10)
-    if check == 10:
-        check = 0
-    if check != int(vat[8]):
-        return False
-    return True
+    import stdnum.ee.kmkr
+    return stdnum.ee.kmkr.is_valid(vat)
 
 
 def check_vat_es(vat):
     '''
     Check Spain VAT number.
     '''
-    if len(vat) != 9:
-        return False
-
-    conv = {
-        1: 'T',
-        2: 'R',
-        3: 'W',
-        4: 'A',
-        5: 'G',
-        6: 'M',
-        7: 'Y',
-        8: 'F',
-        9: 'P',
-        10: 'D',
-        11: 'X',
-        12: 'B',
-        13: 'N',
-        14: 'J',
-        15: 'Z',
-        16: 'S',
-        17: 'Q',
-        18: 'V',
-        19: 'H',
-        20: 'L',
-        21: 'C',
-        22: 'K',
-        23: 'E',
-    }
-
-    if vat[0] in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'U', 'V'):
-        try:
-            _posint(vat[1:])
-        except ValueError:
-            return False
-        check_sum = mult_add(2, int(vat[1])) + int(vat[2]) + \
-            mult_add(2, int(vat[3])) + int(vat[4]) + \
-            mult_add(2, int(vat[5])) + int(vat[6]) + \
-            mult_add(2, int(vat[7]))
-        check = 10 - (check_sum % 10)
-        if check == 10:
-            check = 0
-        if check != int(vat[8]):
-            return False
-        return True
-    elif vat[0] in ('N', 'P', 'Q', 'R', 'S', 'W'):
-        try:
-            _posint(vat[1:8])
-        except ValueError:
-            return False
-        check_sum = mult_add(2, int(vat[1])) + int(vat[2]) + \
-            mult_add(2, int(vat[3])) + int(vat[4]) + \
-            mult_add(2, int(vat[5])) + int(vat[6]) + \
-            mult_add(2, int(vat[7]))
-        check = 10 - (check_sum % 10)
-        check = chr(check + 64)
-        if check != vat[8]:
-            return False
-        return True
-    elif vat[0] in ('K', 'L', 'M', 'X', 'Y', 'Z'):
-        if vat[0] == 'Y':
-            check_value = '1' + vat[1:8]
-        elif vat[0] == 'Z':
-            check_value = '2' + vat[1:8]
-        else:
-            check_value = vat[1:8]
-
-        try:
-            _posint(check_value)
-        except ValueError:
-            return False
-        check = 1 + (int(check_value) % 23)
-
-        check = conv[check]
-        if check != vat[8]:
-            return False
-        return True
-    else:
-        try:
-            _posint(vat[:8])
-        except ValueError:
-            return False
-        check = 1 + (int(vat[:8]) % 23)
-
-        check = conv[check]
-        if check != vat[8]:
-            return False
-        return True
+    import stdnum.es.nif
+    return stdnum.es.nif.is_valid(vat)
 
 
 def check_vat_fi(vat):
     '''
     Check Finland VAT number.
     '''
-    if len(vat) != 8:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    check_sum = 7 * int(vat[0]) + 9 * int(vat[1]) + 10 * int(vat[2]) + \
-        5 * int(vat[3]) + 8 * int(vat[4]) + 4 * int(vat[5]) + \
-        2 * int(vat[6])
-    check = 11 - (check_sum % 11)
-    if check == 11:
-        check = 0
-    if check == 10:
-        return False
-    if check != int(vat[7]):
-        return False
-    return True
+    import stdnum.fi.alv
+    return stdnum.fi.alv.is_valid(vat)
 
 
 def check_vat_fr(vat):
     '''
     Check France VAT number.
     '''
-    if len(vat) != 11:
-        return False
-
-    try:
-        _posint(vat[2:11])
-    except ValueError:
-        return False
-
-    system = None
-    try:
-        _posint(vat[0:2])
-        system = 'old'
-    except ValueError:
-        system = 'new'
-
-    if system == 'old':
-        check = ((int(vat[2:11]) * 100) + 12) % 97
-        if check != int(vat[0:2]):
-            return False
-        return True
-    else:
-        conv = ['0', '1', '2', '3', '4', '5', '6', '7',
-            '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
-            'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T',
-            'U', 'V', 'W', 'X', 'Y', 'Z']
-        if vat[0] not in conv \
-                or vat[1] not in conv:
-            return False
-        check1 = conv.index(vat[0])
-        check2 = conv.index(vat[1])
-
-        if check1 < 10:
-            check_sum = check1 * 24 + check2 - 10
-        else:
-            check_sum = check1 * 34 + check2 - 100
-
-        mod_x = check_sum % 11
-        check_sum = (int(check_sum) / 11) + 1
-        mod_y = (int(vat[2:11]) + check_sum) % 11
-        if mod_x != mod_y:
-            return False
-        return True
+    import stdnum.fr.tva
+    return stdnum.fr.tva.is_valid(vat)
 
 
 def check_vat_gb(vat):
     '''
     Check United Kingdom VAT number.
     '''
-
-    if len(vat) == 5:
-        try:
-            _posint(vat[2:5])
-        except ValueError:
-            return False
-
-        if vat[0:2] == 'GD':
-            if int(vat[2:5]) >= 500:
-                return False
-            return True
-        if vat[0:2] == 'HA':
-            if int(vat[2:5]) < 500:
-                return False
-            return True
-        return False
-    elif len(vat) == 11 \
-            and vat[0:6] in ('GD8888', 'HA8888'):
-        try:
-            _posint(vat[6:11])
-        except ValueError:
-            return False
-        if vat[0:2] == 'GD' \
-                and int(vat[6:9]) >= 500:
-            return False
-        elif vat[0:2] == 'HA' \
-                and int(vat[6:9]) < 500:
-            return False
-        if int(vat[6:9]) % 97 == int(vat[9:11]):
-            return True
-        return False
-    elif len(vat) in (12, 13) \
-            and vat[0:3] in ('000', '001'):
-        try:
-            _posint(vat)
-        except ValueError:
-            return False
-
-        if int(vat[3:10]) < 1:
-            return False
-        if int(vat[10:12]) > 97:
-            return False
-        if len(vat) == 13 and int(vat[12]) != 3:
-            return False
-
-        check_sum = 8 * int(vat[3]) + 7 * int(vat[4]) + 6 * int(vat[5]) + \
-            5 * int(vat[6]) + 4 * int(vat[7]) + 3 * int(vat[8]) + \
-            2 * int(vat[9]) + 10 * int(vat[10]) + int(vat[11])
-        if check_sum % 97 != 0:
-            return False
-        return True
-    elif len(vat) in (9, 10, 12):
-        try:
-            _posint(vat)
-        except ValueError:
-            return False
-
-        if int(vat[0:7]) < 1:
-            return False
-        if int(vat[7:9]) > 97:
-            return False
-        if len(vat) == 10 and int(vat[9]) != 3:
-            return False
-
-        check_sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-            5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-            2 * int(vat[6]) + 10 * int(vat[7]) + int(vat[8])
-        if int(vat[0:3]) >= 100:
-            if check_sum % 97 not in (0, 55, 42):
-                return False
-        else:
-            if check_sum % 97 != 0:
-                return False
-        return True
-    return False
+    import stdnum.gb.vat
+    return stdnum.gb.vat.is_valid(vat)
 
 
 def check_vat_gr(vat):
     '''
     Check Greece VAT number.
     '''
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if len(vat) == 8:
-        check_sum = 128 * int(vat[0]) + 64 * int(vat[1]) + 32 * int(vat[2]) + \
-            16 * int(vat[3]) + 8 * int(vat[4]) + 4 * int(vat[5]) + \
-            2 * int(vat[6])
-        check = check_sum % 11
-        if check == 10:
-            check = 0
-        if check != int(vat[7]):
-            return False
-        return True
-    elif len(vat) == 9:
-        check_sum = 256 * int(vat[0]) + 128 * int(vat[1]) + 64 * int(vat[2]) +\
-            32 * int(vat[3]) + 16 * int(vat[4]) + 8 * int(vat[5]) + \
-            4 * int(vat[6]) + 2 * int(vat[7])
-        check = check_sum % 11
-        if check == 10:
-            check = 0
-        if check != int(vat[8]):
-            return False
-        return True
-    return False
+    import stdnum.gr.vat
+    return stdnum.gr.vat.is_valid(vat)
 
 
 def check_vat_el(vat):
@@ -689,466 +237,120 @@ def check_vat_hr(vat):
     '''
     Check Croatia VAT number.
     '''
-    if len(vat) != 11:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    check = mod1110(vat[:-1])
-    if check != int(vat[10]):
-        return False
-    return True
+    import stdnum.hr.oib
+    return stdnum.hr.oib.is_valid(vat)
 
 
 def check_vat_hu(vat):
     '''
     Check Hungary VAT number.
     '''
-    if len(vat) != 8:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[0]) <= 0:
-        return False
-    check_sum = 9 * int(vat[0]) + 7 * int(vat[1]) + 3 * int(vat[2]) + \
-        1 * int(vat[3]) + 9 * int(vat[4]) + 7 * int(vat[5]) + \
-        3 * int(vat[6])
-    check = 10 - (check_sum % 10)
-    if check == 10:
-        check = 0
-    if check != int(vat[7]):
-        return False
-    return True
+    import stdnum.hu.anum
+    return stdnum.hu.anum.is_valid(vat)
 
 
 def check_vat_ie(vat):
     '''
     Check Ireland VAT number.
     '''
-    if len(vat) != 8:
-        return False
-    if (ord(vat[1]) >= 65 and ord(vat[1]) <= 90) \
-            or vat[1] in ('+', '*'):
-        try:
-            _posint(vat[0])
-            _posint(vat[2:7])
-        except ValueError:
-            return False
-
-        if int(vat[0]) <= 6:
-            return False
-
-        check_sum = 7 * int(vat[2]) + 6 * int(vat[3]) + 5 * int(vat[4]) + \
-            4 * int(vat[5]) + 3 * int(vat[6]) + 2 * int(vat[0])
-        check = check_sum % 23
-        if check == 0:
-            check = 'W'
-        else:
-            check = chr(check + 64)
-        if check != vat[7]:
-            return False
-        return True
-    else:
-        try:
-            _posint(vat[0:7])
-        except ValueError:
-            return False
-
-        check_sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-            5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-            2 * int(vat[6])
-        check = check_sum % 23
-        if check == 0:
-            check = 'W'
-        else:
-            check = chr(check + 64)
-        if check != vat[7]:
-            return False
-        return True
+    import stdnum.ie.vat
+    return stdnum.ie.vat.is_valid(vat)
 
 
 def check_vat_it(vat):
     '''
     Check Italy VAT number.
     '''
-    if len(vat) != 11:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[0:7]) <= 0:
-        return False
-    if not((0 <= int(vat[7:10]) <= 100)
-            or int(vat[7:10]) in (120, 121, 888, 999)):
-        return False
-
-    check_sum = int(vat[0]) + mult_add(2, int(vat[1])) + int(vat[2]) + \
-        mult_add(2, int(vat[3])) + int(vat[4]) + \
-        mult_add(2, int(vat[5])) + int(vat[6]) + \
-        mult_add(2, int(vat[7])) + int(vat[8]) + \
-        mult_add(2, int(vat[9]))
-    check = 10 - (check_sum % 10)
-    if check == 10:
-        check = 0
-    if check != int(vat[10]):
-        return False
-    return True
+    import stdnum.it.iva
+    return stdnum.it.iva.is_valid(vat)
 
 
 def check_vat_lt(vat):
     '''
     Check Lithuania VAT number.
     '''
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-
-    if len(vat) == 9:
-        if int(vat[7]) != 1:
-            return False
-        check_sum = 1 * int(vat[0]) + 2 * int(vat[1]) + 3 * int(vat[2]) + \
-            4 * int(vat[3]) + 5 * int(vat[4]) + 6 * int(vat[5]) + \
-            7 * int(vat[6]) + 8 * int(vat[7])
-        if check_sum % 11 == 10:
-            check_sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 5 * int(vat[2]) + \
-                6 * int(vat[3]) + 7 * int(vat[4]) + 8 * int(vat[5]) + \
-                9 * int(vat[6]) + 1 * int(vat[7])
-        check = check_sum % 11
-        if check == 10:
-            check = 0
-        if check != int(vat[8]):
-            return False
-        return True
-    elif len(vat) == 12:
-        if int(vat[10]) != 1:
-            return False
-        check_sum = 1 * int(vat[0]) + 2 * int(vat[1]) + 3 * int(vat[2]) + \
-            4 * int(vat[3]) + 5 * int(vat[4]) + 6 * int(vat[5]) + \
-            7 * int(vat[6]) + 8 * int(vat[7]) + 9 * int(vat[8]) + \
-            1 * int(vat[9]) + 2 * int(vat[10])
-        if check_sum % 11 == 10:
-            check_sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 5 * int(vat[2]) + \
-                6 * int(vat[3]) + 7 * int(vat[4]) + 8 * int(vat[5]) + \
-                9 * int(vat[6]) + 1 * int(vat[7]) + 2 * int(vat[8]) + \
-                3 * int(vat[9]) + 4 * int(vat[10])
-        check = check_sum % 11
-        if check == 10:
-            check = 0
-        if check != int(vat[11]):
-            return False
-        return True
-    return False
+    import stdnum.lt.pvm
+    return stdnum.lt.pvm.is_valid(vat)
 
 
 def check_vat_lu(vat):
     '''
     Check Luxembourg VAT number.
     '''
-    if len(vat) != 8:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[0:6]) <= 0:
-        return False
-    check = int(vat[0:6]) % 89
-    if check != int(vat[6:8]):
-        return False
-    return True
+    import stdnum.lu.tva
+    return stdnum.lu.tva.is_valid(vat)
 
 
 def check_vat_lv(vat):
     '''
     Check Latvia VAT number.
     '''
-    if len(vat) != 11:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[0]) >= 4:
-        check_sum = 9 * int(vat[0]) + 1 * int(vat[1]) + 4 * int(vat[2]) + \
-            8 * int(vat[3]) + 3 * int(vat[4]) + 10 * int(vat[5]) + \
-            2 * int(vat[6]) + 5 * int(vat[7]) + 7 * int(vat[8]) + \
-            6 * int(vat[9])
-        if check_sum % 11 == 4 and int(vat[0]) == 9:
-            check_sum = check_sum - 45
-        if check_sum % 11 == 4:
-            check = 4 - (check_sum % 11)
-        elif check_sum % 11 > 4:
-            check = 14 - (check_sum % 11)
-        elif check_sum % 11 < 4:
-            check = 3 - (check_sum % 11)
-        if check != int(vat[10]):
-            return False
-        return True
-    else:
-        if int(vat[2:4]) == 2 and int(vat[4:6]) % 4 > 0:
-            if int(vat[0:2]) < 1 or int(vat[0:2]) > 28:
-                return False
-        if int(vat[2:4]) == 2 and int(vat[4:6]) % 4 == 0:
-            if int(vat[0:2]) < 1 or int(vat[0:2]) > 29:
-                return False
-        if int(vat[2:4]) in (4, 6, 9, 11):
-            if int(vat[0:2]) < 1 or int(vat[0:2]) > 30:
-                return False
-        if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12):
-            if int(vat[0:2]) < 1 or int(vat[0:2]) > 31:
-                return False
-        if int(vat[2:4]) < 1 or int(vat[2:4]) > 12:
-            return False
-        return True
+    import stdnum.lv.pvn
+    return stdnum.lv.pvn.is_valid(vat)
 
 
 def check_vat_mt(vat):
     '''
     Check Malta VAT number.
     '''
-    if len(vat) != 8:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-
-    if int(vat[0:6]) < 100000:
-        return False
-
-    check_sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 6 * int(vat[2]) + \
-        7 * int(vat[3]) + 8 * int(vat[4]) + 9 * int(vat[5])
-    check = 37 - (check_sum % 37)
-    if check != int(vat[6:8]):
-        return False
-    return True
+    import stdnum.mt.vat
+    return stdnum.mt.vat.is_valid(vat)
 
 
 def check_vat_nl(vat):
     '''
     Check Netherlands VAT number.
     '''
-    if len(vat) != 12:
-        return False
-    try:
-        _posint(vat[0:9])
-        _posint(vat[10:12])
-    except ValueError:
-        return False
-    if int(vat[0:8]) <= 0:
-        return False
-    if vat[9] != 'B':
-        return False
-
-    check_sum = 9 * int(vat[0]) + 8 * int(vat[1]) + 7 * int(vat[2]) + \
-        6 * int(vat[3]) + 5 * int(vat[4]) + 4 * int(vat[5]) + \
-        3 * int(vat[6]) + 2 * int(vat[7])
-
-    check = check_sum % 11
-    if check == 10:
-        return False
-    if check != int(vat[8]):
-        return False
-    return True
+    import stdnum.nl.btw
+    return stdnum.nl.btw.is_valid(vat)
 
 
 def check_vat_pl(vat):
     '''
     Check Poland VAT number.
     '''
-    if len(vat) != 10:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-
-    check_sum = 6 * int(vat[0]) + 5 * int(vat[1]) + 7 * int(vat[2]) + \
-        2 * int(vat[3]) + 3 * int(vat[4]) + 4 * int(vat[5]) + \
-        5 * int(vat[6]) + 6 * int(vat[7]) + 7 * int(vat[8])
-    check = check_sum % 11
-    if check == 10:
-        return False
-    if check != int(vat[9]):
-        return False
-    return True
+    import stdnum.pl.nip
+    return stdnum.pl.nip.is_valid(vat)
 
 
 def check_vat_pt(vat):
     '''
     Check Portugal VAT number.
     '''
-    if len(vat) != 9:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-
-    if int(vat[0]) <= 0:
-        return False
-
-    check_sum = 9 * int(vat[0]) + 8 * int(vat[1]) + 7 * int(vat[2]) + \
-        6 * int(vat[3]) + 5 * int(vat[4]) + 4 * int(vat[5]) + \
-        3 * int(vat[6]) + 2 * int(vat[7])
-    check = 11 - (check_sum % 11)
-    if check == 10 or check == 11:
-        check = 0
-    if check != int(vat[8]):
-        return False
-    return True
+    import stdnum.pt.nif
+    return stdnum.pt.nif.is_valid(vat)
 
 
 def check_vat_ro(vat):
     '''
     Check Romania VAT number.
     '''
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-
-    if len(vat) >= 2 and len(vat) <= 10:
-        vat = (10 - len(vat)) * '0' + vat
-        check_sum = 7 * int(vat[0]) + 5 * int(vat[1]) + 3 * int(vat[2]) + \
-            2 * int(vat[3]) + 1 * int(vat[4]) + 7 * int(vat[5]) + \
-            5 * int(vat[6]) + 3 * int(vat[7]) + 2 * int(vat[8])
-        check = (check_sum * 10) % 11
-        if check == 10:
-            check = 0
-        if check != int(vat[9]):
-            return False
-        return True
-    elif len(vat) == 13:
-        if int(vat[0]) not in (1, 2, 3, 4, 6):
-            return False
-        if int(vat[3:5]) < 1 or int(vat[3:5]) > 12:
-            return False
-        if int(vat[3:5]) == 2 and int(vat[1:3]) % 4 > 0:
-            if int(vat[5:7]) < 1 or int(vat[5:7]) > 28:
-                return False
-        if int(vat[3:5]) == 2 and int(vat[1:3]) % 4 == 0:
-            if int(vat[5:7]) < 1 or int(vat[5:7]) > 29:
-                return False
-        if int(vat[3:5]) in (4, 6, 9, 11):
-            if int(vat[5:7]) < 1 or int(vat[5:7]) > 30:
-                return False
-        if int(vat[3:5]) in (1, 3, 5, 7, 8, 10, 12):
-            if int(vat[5:7]) < 1 or int(vat[5:7]) > 31:
-                return False
-
-        check_sum = 2 * int(vat[0]) + 7 * int(vat[1]) + 9 * int(vat[2]) + \
-            1 * int(vat[3]) + 4 * int(vat[4]) + 6 * int(vat[5]) + \
-            3 * int(vat[6]) + 5 * int(vat[7]) + 8 * int(vat[8]) + \
-            2 * int(vat[9]) + 7 * int(vat[10]) + 9 * int(vat[11])
-        check = check_sum % 11
-        if check == 10:
-            check = 1
-        if check != int(vat[12]):
-            return False
-        return True
-    return False
+    import stdnum.ro.cf
+    return stdnum.ro.cf.is_valid(vat)
 
 
 def check_vat_se(vat):
     '''
     Check Sweden VAT number.
     '''
-    if len(vat) != 12:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[10:12]) <= 0:
-        return False
-
-    check_sum = mult_add(2, int(vat[0])) + int(vat[1]) + \
-        mult_add(2, int(vat[2])) + int(vat[3]) + \
-        mult_add(2, int(vat[4])) + int(vat[5]) + \
-        mult_add(2, int(vat[6])) + int(vat[7]) + \
-        mult_add(2, int(vat[8]))
-    check = 10 - (check_sum % 10)
-    if check == 10:
-        check = 0
-    if check != int(vat[9]):
-        return False
-    return True
+    import stdnum.se.vat
+    return stdnum.se.vat.is_valid(vat)
 
 
 def check_vat_si(vat):
     '''
     Check Slovenia VAT number.
     '''
-    if len(vat) != 8:
-        return False
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if int(vat[0:7]) <= 999999:
-        return False
-
-    check_sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \
-        5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \
-        2 * int(vat[6])
-    check = 11 - (check_sum % 11)
-    if check == 10:
-        check = 0
-    if check == 11:
-        check = 1
-    if check != int(vat[7]):
-        return False
-    return True
+    import stdnum.si.ddv
+    return stdnum.si.ddv.is_valid(vat)
 
 
 def check_vat_sk(vat):
     '''
     Check Slovakia VAT number.
     '''
-    try:
-        _posint(vat)
-    except ValueError:
-        return False
-    if len(vat) not in(9, 10):
-        return False
-
-    if int(vat[0:2]) in (0, 10, 20) and len(vat) == 10:
-        return True
-
-    if len(vat) == 10:
-        if int(vat[0:2]) < 54 or int(vat[0:2]) > 99:
-            return False
-
-    if len(vat) == 9:
-        if int(vat[0:2]) > 53:
-            return False
-
-    if int(vat[2:4]) < 1:
-        return False
-    if int(vat[2:4]) > 12 and int(vat[2:4]) < 51:
-        return False
-    if int(vat[2:4]) > 62:
-        return False
-    if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0:
-        if int(vat[4:6]) < 1 or int(vat[4:6]) > 28:
-            return False
-    if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0:
-        if int(vat[4:6]) < 1 or int(vat[4:6]) > 29:
-            return False
-    if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61):
-        if int(vat[4:6]) < 1 or int(vat[4:6]) > 30:
-            return False
-    if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12,
-            51, 53, 55, 57, 58, 60, 62):
-        if int(vat[4:6]) < 1 or int(vat[4:6]) > 31:
-            return False
-    return True
+    import stdnum.sk.dph
+    return stdnum.sk.dph.is_valid(vat)
 
 
 def check_vat_sm(vat):
@@ -1238,9 +440,5 @@ def check_vies(vat):
     '''
     Check VAT number for EU member state using the SOAP Service
     '''
-    from suds.client import Client
-    client = Client(VIES_URL)
-    code = vat[:2]
-    number = vat[2:]
-    res = client.service.checkVat(countryCode=code, vatNumber=number)
-    return bool(res['valid'])
+    import stdnum.eu.vat
+    return bool(stdnum.eu.vat.check_vies(vat)['valid'])
diff --git a/vatnumber/tests.py b/vatnumber/tests.py
index d05a450..ef10239 100644
--- a/vatnumber/tests.py
+++ b/vatnumber/tests.py
@@ -45,7 +45,7 @@ VAT_NUMBERS = [
     ('CO', '900127933', False),
     ('CO', 'A001279338', False),
     ('CO', '9001279320', True),
-    ('CY', '12345678F', True),
+    ('CY', '23456789U', True),
     ('CY', '2345678F', False),
     ('CY', 'A2345678F', False),
     ('CY', '12345678A', False),
@@ -128,8 +128,8 @@ VAT_NUMBERS = [
     ('ES', '1A345678Z', False),
     ('ES', '12345678A', False),
     ('FI', '12345671', True),
-    ('FR', '32123456789', True),
-    ('FR', '2H123456789', True),
+    ('FR', '11123456782', True),
+    ('FR', '0L123456782', True),
     ('GB', 'GD123', True),
     ('GB', 'GD888812326', True),
     ('GB', 'HA567', True),
@@ -138,9 +138,6 @@ VAT_NUMBERS = [
     ('GB', '102675046', True),
     ('GB', '100190874', True),
     ('GB', '003232345', True),
-    ('GB', '1234567823', True),
-    ('GB', '001123456782', True),
-    ('GB', '0011234567823', True),
     ('GB', '242338087388', True),
     ('GR', '12345670', True),
     ('GR', '123456783', True),
@@ -156,7 +153,7 @@ VAT_NUMBERS = [
     ('LT', '123456789011', True),
     ('LU', '12345613', True),
     ('LV', '41234567891', True),
-    ('LV', '15066312345', True),
+    ('LV', '15066312341', True),
     ('MT', '12345634', True),
     ('NL', '123456782B90', True),
     ('PL', '1234567883', True),
@@ -164,17 +161,13 @@ VAT_NUMBERS = [
     ('RO', '24736200', True),
     ('RO', '1234567897', True),
     ('RO', '1630615123457', True),
-    ('RO', '-7793957', False),
     ('RU', '5505035011', True),
     ('RU', '550501929014', True),
     ('SE', '123456789701', True),
     ('SE', '556728341001', True),
     ('SI', '12345679', True),
-    ('SK', '0012345675', True),
-    ('SK', '0012345678', True),
-    ('SK', '531231123', True),
-    ('SK', '6306151234', True),
     ('SK', '2021853504', True),
+    ('SK', '4020246659', True),
     ('SM', '12345', True),
     ('UA', '12345678', True),
     ('', '12456789', False),
-- 
vatnumber



More information about the tryton-debian-vcs mailing list