module BankAccounts::Mexico

Constants

VERSION

Public Instance Methods

account_number_of(account_number) click to toggle source
# File lib/bank_accounts/mexico.rb, line 53
def account_number_of(account_number)
  account_number[6...16]
end
bank_code_of(account_number) click to toggle source
# File lib/bank_accounts/mexico.rb, line 45
def bank_code_of(account_number)
  account_number[0..2]
end
bank_data() click to toggle source
# File lib/bank_accounts/mexico.rb, line 13
def bank_data
  ::YAML.load(File.open(File.join(root_dir, "data", "banks.yml")))
end
city_code_of(account_number) click to toggle source
# File lib/bank_accounts/mexico.rb, line 49
def city_code_of(account_number)
  account_number[3..5]
end
control_digit_of(account_number) click to toggle source
# File lib/bank_accounts/mexico.rb, line 57
def control_digit_of(account_number)
  account_number[-1]
end
find_bank_by_account_number(account_number) click to toggle source
# File lib/bank_accounts/mexico.rb, line 23
def find_bank_by_account_number(account_number)
  find_bank_by_bank_code(bank_code_of(account_number))
end
find_bank_by_bank_code(bank_code) click to toggle source
# File lib/bank_accounts/mexico.rb, line 17
def find_bank_by_bank_code(bank_code)
  bank_data.find do |bank|
    bank["abm_number"] == bank_code
  end
end
find_bank_by_pattern_full_name(pattern) click to toggle source
# File lib/bank_accounts/mexico.rb, line 39
def find_bank_by_pattern_full_name(pattern)
  bank_data.find do |bank|
    pattern.match(bank["full_name"])
  end
end
find_bank_by_pattern_fuzzy(pattern) click to toggle source
# File lib/bank_accounts/mexico.rb, line 27
def find_bank_by_pattern_fuzzy(pattern)
  bank_data.find do |bank|
    pattern.match(bank["short_name"]) or pattern.match(bank["full_name"])
  end
end
find_bank_by_pattern_short_name(pattern) click to toggle source
# File lib/bank_accounts/mexico.rb, line 33
def find_bank_by_pattern_short_name(pattern)
  bank_data.find do |bank|
    pattern.match(bank["short_name"])
  end
end
root_dir() click to toggle source
# File lib/bank_accounts/mexico.rb, line 8
def root_dir
  spec = Gem::Specification.find_by_name("bank_accounts-mexico")
  spec.gem_dir
end
valid_account_number?(account_number) click to toggle source
# File lib/bank_accounts/mexico.rb, line 61
def valid_account_number?(account_number)
  def weight(position)
    case position % 3
    when 0
      3
    when 1
      7
    when 2
      1
    end
  end

  return false unless find_bank_by_account_number(account_number)
  checksum = 0

  account_number[0..16].chars.map(&:to_i).each_with_index do |number, i|
    checksum += (number * weight(i)) % 10
  end

  return (10 - (checksum % 10)) % 10 == control_digit_of(account_number).to_i
end
weight(position) click to toggle source
# File lib/bank_accounts/mexico.rb, line 62
def weight(position)
  case position % 3
  when 0
    3
  when 1
    7
  when 2
    1
  end
end