File tree Expand file tree Collapse file tree 3 files changed +28
-13
lines changed Expand file tree Collapse file tree 3 files changed +28
-13
lines changed Original file line number Diff line number Diff line change @@ -74,20 +74,28 @@ def compact(number):
74
74
"""Convert the number to the minimal representation. This strips the
75
75
number of any valid separators and removes surrounding whitespace."""
76
76
number = clean (number , '' ).upper ().strip ()
77
- module = _get_cc_module (number [:2 ])
77
+ cc = number [:2 ]
78
+ module = _get_cc_module (cc )
78
79
if not module :
79
80
raise InvalidComponent ()
80
- return number [:2 ] + module .compact (number [2 :])
81
+ number = module .compact (number )
82
+ if not number .startswith (cc ):
83
+ number = cc + number
84
+ return number
81
85
82
86
83
87
def validate (number ):
84
88
"""Check if the number is a valid VAT number. This performs the
85
89
country-specific check for the number."""
86
90
number = clean (number , '' ).upper ().strip ()
87
- module = _get_cc_module (number [:2 ])
91
+ cc = number [:2 ]
92
+ module = _get_cc_module (cc )
88
93
if not module :
89
94
raise InvalidComponent ()
90
- return number [:2 ] + module .validate (number [2 :])
95
+ number = module .validate (number )
96
+ if not number .startswith (cc ):
97
+ number = cc + number
98
+ return number
91
99
92
100
93
101
def is_valid (number ):
Original file line number Diff line number Diff line change 23
23
The Romanian CF is used for VAT purposes and can be from 2 to 10 digits long.
24
24
25
25
>>> validate('RO 185 472 90') # VAT CUI/CIF
26
- '18547290 '
26
+ 'RO18547290 '
27
27
>>> validate('185 472 90') # non-VAT CUI/CIF
28
28
'18547290'
29
29
>>> validate('1630615123457') # CNP
38
38
def compact (number ):
39
39
"""Convert the number to the minimal representation. This strips the
40
40
number of any valid separators and removes surrounding whitespace."&quo
8000
t;"
41
- number = clean (number , ' -' ).upper ().strip ()
42
- if number .startswith ('RO' ):
43
- number = number [2 :]
44
- return number
41
+ return clean (number , ' -' ).upper ().strip ()
45
42
46
43
47
44
# for backwards compatibility
@@ -52,11 +49,14 @@ def validate(number):
52
49
"""Check if the number is a valid VAT number. This checks the length,
53
50
formatting and check digit."""
54
51
number = compact (number )
55
- if len (number ) == 13 :
52
+ cnumber = number
53
+ if cnumber .startswith ('RO' ):
54
+ cnumber = cnumber [2 :]
55
+ if len (cnumber ) == 13 :
56
56
# apparently a CNP can also be used (however, not all sources agree)
57
- cnp .validate (number )
58
- elif 2 <= len (number ) <= 10 :
59
- cui .validate (number )
57
+ cnp .validate (cnumber )
58
+ elif 2 <= len (cnumber ) <= 10 :
59
+ cui .validate (cnumber )
60
60
else :
61
61
raise InvalidLength ()
62
62
return number
Original file line number Diff line number Diff line change @@ -912,3 +912,10 @@ These numbers should be mostly valid except that they have the wrong length.
912
912
... '''
913
913
>>> [x for x in numbers.splitlines() if x and not caught(x, InvalidLength)]
914
914
[]
915
+
916
+
917
+ Romanian CIF numbers assume that the RO prefix is part of the number so the
918
+ EU VAT module should not return the prefix twice.
919
+
920
+ >>> vat.compact('RO 21996566')
921
+ 'RO21996566'
You can’t perform that action at this time.
0 commit comments