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
12 changes: 12 additions & 0 deletions faker/providers/bank/en_IN/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,15 @@ class Provider(BankProvider):
def bank(self) -> str:
"""Generate a bank name."""
return self.random_element(self.banks)

def ifsc(self) -> str:
"""Generate a structurally valid IFSC code.

Format: 4 letters (bank code) + 0 + 6 alphanumeric characters (branch code)
Example: HDFC0001234
"""
bank_code = "".join(self.random_letters(length=4)).upper()
branch_code = self.bothify(
"######", letters="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
)
return f"{bank_code}0{branch_code}"
14 changes: 12 additions & 2 deletions tests/providers/test_bank.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,11 @@ def test_bank(self, faker, num_samples):
for _ in range(num_samples):
assert re.match(r"\D{7,25}", faker.bank())

def test_ifsc(self, faker, num_samples):
pattern = re.compile(r"^[A-Z]{4}0[A-Z0-9]{6}$")
for _ in range(num_samples):
assert pattern.fullmatch(faker.ifsc())


class TestEnPh:
"""Test en_PH bank provider"""
Expand Down Expand Up @@ -283,7 +288,9 @@ def _ccc_control_digit(number):
# the BBAN must carry valid Spanish CCC control digits
bban = iban[4:]
bank_branch, control, account = bban[:8], bban[8:10], bban[10:]
assert control == _ccc_control_digit("00" + bank_branch) + _ccc_control_digit(account)
assert control == _ccc_control_digit(
"00" + bank_branch
) + _ccc_control_digit(account)


class TestEsMx:
Expand Down Expand Up @@ -402,7 +409,10 @@ def test_iban(self, faker, num_samples):
assert iban[:2] == NlBeBankProvider.country_code
assert re.fullmatch(r"\d{2}\d{12}", iban[2:])
rearranged_iban = iban[4:] + iban[:4]
numeric_iban = "".join(str(ord(char) - 55) if char.isalpha() else char for char in rearranged_iban)
numeric_iban = "".join(
str(ord(char) - 55) if char.isalpha() else char
for char in rearranged_iban
)
assert int(numeric_iban) % 97 == 1

def test_iban_stdnum(self, faker, num_samples):
Expand Down