2
2
# coding: utf-8
3
3
#
4
4
# Copyright (C) 2014 Jonathan Finlay
5
- # Copyright (C) 2014-2015 Arthur de Jong
5
+ # Copyright (C) 2014-2021 Arthur de Jong
6
6
#
7
7
# This library is free software; you can redistribute it and/or
8
8
# modify it under the terms of the GNU Lesser General Public
@@ -53,6 +53,32 @@ def _checksum(number, weights):
53
53
return sum (w * int (n ) for w , n in zip (weights , number )) % 11
54
54
55
55
56
+ def _validate_natural (number ):
57
+ """Check if the number is a valid natural RUC (CI plus establishment)."""
58
+ if number [- 3 :] == '000' :
59
+ raise InvalidComponent () # establishment number wrong
60
+ ci .validate (number [:10 ])
61
+ return number
62
+
63
+
64
+ def _validate_public (number ):
65
+ """Check if the number is a valid public RUC."""
66
+ if number [- 4 :] == '0000' :
67
+ raise InvalidComponent () # establishment number wrong
68
+ if _checksum (number [:9 ], (3 , 2 , 7 , 6 , 5 , 4 , 3 , 2 , 1 )) != 0 :
69
+ raise InvalidChecksum ()
70
+ return number
71
+
72
+
73
+ def _validate_juridical (number ):
74
+ """Check if the number is a valid juridical RUC."""
75
+ if number [- 3 :] == '000' :
76
+ raise InvalidComponent () # establishment number wrong
77
+ if _checksum (number [:10 ], (4 , 3 , 2 , 7 , 6 , 5 , 4 , 3 , 2 , 1 )) != 0 :
78
+ raise InvalidChecksum ()
79
+ return number
80
+
81
+
56
82
def validate (number ):
57
83
"""Check if the number provided is a valid RUC number. This checks the
58
84
length, formatting, check digit and check sum."""
@@ -65,21 +91,16 @@ def validate(number):
65
91
raise InvalidComponent () # invalid province code
66
92
if number [2 ] < '6' :
67
93
# 0..5 = natural RUC: CI plus establishment number
68
- if number [- 3 :] == '000' :
69
- raise InvalidComponent () # establishment number wrong
70
- ci .validate (number [:10 ])
94
+ _validate_natural (number )
71
95
elif number [2 ] == '6' :
72
- # 6 = public RUC
73
- if number [ - 4 :] == '0000' :
74
- raise InvalidComponent () # establishment number wrong
75
- if _checksum ( number [: 9 ], ( 3 , 2 , 7 , 6 , 5 , 4 , 3 , 2 , 1 )) != 0 :
76
- raise InvalidChecksum ( )
96
+ # 6 = public RUC (or natural RUC)
97
+ try :
98
+ _validate_public ( number )
99
+ except ValidationError :
100
+ _validate_natural ( number )
77
101
elif number [2 ] == '9' :
78
102
# 9 = juridical RUC
79
- if number [- 3 :] == '000' :
80
- raise InvalidComponent () # establishment number wrong
81
- if _checksum (number [:10 ], (4 , 3 , 2 , 7 , 6 , 5 , 4 , 3 , 2 , 1 )) != 0 :
82
- raise InvalidChecksum ()
103
+ _validate_juridical (number )
83
104
else :
84
105
raise InvalidComponent () # third digit wrong
85
106
<
107CD
td data-grid-cell-id="diff-3f26c3fb4fac5680b90ca8608f1a287bc039268c70c4abd916897a80fc766120-85-106-2" data-line-anchor="diff-3f26c3fb4fac5680b90ca8608f1a287bc039268c70c4abd916897a80fc766120R106" data-selected="false" role="gridcell" style="background-color:var(--bgColor-default);padding-right:24px" tabindex="-1" valign="top" class="focusable-grid-cell diff-text-cell right-side-diff-cell left-side"> return number
0 commit comments