File: bank_us.rb

package info (click to toggle)
ruby-ffaker 2.23.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,776 kB
  • sloc: ruby: 12,788; makefile: 8; sh: 1
file content (33 lines) | stat: -rw-r--r-- 928 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# frozen_string_literal: true

module FFaker
  module BankUS
    extend ModuleUtils
    extend self

    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('########')
      ninth_digit = generate_ninth_digit(partial_routing_number)

      "#{partial_routing_number}#{ninth_digit}"
    end

    private

    def generate_ninth_digit(num_string)
      # This leverages the `Modules 10, Straight Summation` used for routing_numbers
      # See http://www.sxlist.com/techref/ecommerce/bank/routingnumber/index.htm
      # for more details
      num_array = num_string.chars.map(&:to_i)
      (
        (7 * (num_array[0] + num_array[3] + num_array[6])) +
          (3 * (num_array[1] + num_array[4] + num_array[7])) +
          (9 * (num_array[2] + num_array[5]))
      ) % 10
    end
  end
end