Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 4 additions & 10 deletions src/validators/i18n/ru.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,23 +39,17 @@ def ru_inn(value: str):
if len(digits) == 10:
weight_coefs = [2, 4, 10, 3, 5, 9, 4, 6, 8, 0]
control_number = sum([d * w for d, w in zip(digits, weight_coefs)]) % 11
return (
(control_number % 10) == digits[-1]
if control_number > 9
else control_number == digits[-1]
)
return control_number % 10 == digits[-1]
# person
elif len(digits) == 12:
weight_coefs1 = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0, 0]
control_number1 = sum([d * w for d, w in zip(digits, weight_coefs1)]) % 11
weight_coefs2 = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0]
control_number2 = sum([d * w for d, w in zip(digits, weight_coefs2)]) % 11
# Both controls must match (% 10 maps 10 -> 0 per INN rules).
return (
(control_number1 % 10) == digits[-2]
if control_number1 > 9
else control_number1 == digits[-2] and (control_number2 % 10) == digits[-1]
if control_number2 > 9
else control_number2 == digits[-1]
control_number1 % 10 == digits[-2]
and control_number2 % 10 == digits[-1]
)
else:
return False
Expand Down
6 changes: 4 additions & 2 deletions tests/i18n/test_ru.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,10 @@ def test_returns_true_on_valid_ru_inn(value: str):
("7707012149",),
("140700989886",),
("774334078054",),
("000000000018",),
("000000000400",),
],
)
def test_returns_false_on_valid_ru_inn(value: str):
"""Test returns true on valid russian individual tax number."""
def test_returns_false_on_invalid_ru_inn(value: str):
"""Test returns ValidationError on invalid russian individual tax number."""
assert isinstance(ru_inn(value), ValidationError)