diff --git a/Changelog.md b/Changelog.md index 7abddd83..869ae0bf 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,7 @@ ## development - Add your change HERE + - Limit FFaker::BankUS.routing_number first two digits [@professor] # 2.23.0 - Add FFaker::BankUS.accounting_number [@professor] diff --git a/lib/ffaker/bank_us.rb b/lib/ffaker/bank_us.rb index b291fe03..8577663c 100644 --- a/lib/ffaker/bank_us.rb +++ b/lib/ffaker/bank_us.rb @@ -5,12 +5,16 @@ module BankUS extend ModuleUtils extend self + ROUTING_NUMBER_PREFIXES = [*'00'..'12', *'21'..'32', *'61'..'72', '80'].freeze + def account_number(min_digits: 9, max_digits: 17) FFaker.numerify('#' * rand(min_digits..max_digits)) end def routing_number - partial_routing_number = FFaker.numerify('########') + first_two_digits = fetch_sample(ROUTING_NUMBER_PREFIXES) + + partial_routing_number = FFaker.numerify("#{first_two_digits}######") ninth_digit = generate_ninth_digit(partial_routing_number) "#{partial_routing_number}#{ninth_digit}" diff --git a/test/test_bank_us.rb b/test/test_bank_us.rb index 486c147a..d5ee7f2c 100644 --- a/test/test_bank_us.rb +++ b/test/test_bank_us.rb @@ -24,6 +24,8 @@ def test_routing_number routing_number = @tester.routing_number assert_match(/\A\d{9}\z/, routing_number) + assert_true(@tester::ROUTING_NUMBER_PREFIXES.include?(routing_number[0..1])) + checksum = ( (7 * (routing_number[0].to_i + routing_number[3].to_i + routing_number[6].to_i)) + (3 * (routing_number[1].to_i + routing_number[4].to_i + routing_number[7].to_i)) +