diff --git a/src/validators/iban.py b/src/validators/iban.py index da325ddb..ff39cd73 100644 --- a/src/validators/iban.py +++ b/src/validators/iban.py @@ -8,8 +8,8 @@ def _char_value(char: str): - """A=10, B=11, ..., Z=35.""" - return char if char.isdigit() else str(10 + ord(char) - ord("A")) + """A=10, B=11, ..., Z=35 (case-insensitive).""" + return char if char.isdigit() else str(10 + ord(char.upper()) - ord("A")) def _mod_check(value: str): diff --git a/tests/test_iban.py b/tests/test_iban.py index e3b0798f..329a20e0 100644 --- a/tests/test_iban.py +++ b/tests/test_iban.py @@ -13,6 +13,12 @@ def test_returns_true_on_valid_iban(value: str): assert iban(value) +@pytest.mark.parametrize("value", ["gb82west12345698765432", "No9386011117947"]) +def test_returns_true_on_valid_lowercase_iban(value: str): + """Lowercase/mixed-case IBANs are accepted (the format regex is case-insensitive).""" + assert iban(value) + + @pytest.mark.parametrize("value", ["GB81WEST12345698765432", "NO9186011117947"]) def test_returns_failed_validation_on_invalid_iban(value: str): """Test returns failed validation on invalid iban."""