class CzFaker::Validator::Bank

Public Class Methods

account_number?(account_number) click to toggle source
# File lib/cz_faker/validator/bank.rb, line 5
def account_number?(account_number)
  prefix, number = account_number.split("-")
  if prefix && number
    return false if prefix.size > 6
    return false unless base_account_number? prefix
  else
    number = prefix
  end
  return false if number.size > 10

  base_account_number? number
end
bank_code?(code) click to toggle source
# File lib/cz_faker/validator/bank.rb, line 31
def bank_code?(code)
  code.size == 4
end
credit_card?(card_number) click to toggle source
# File lib/cz_faker/validator/bank.rb, line 25
def credit_card?(card_number)
  return false unless credit_card_issuer(card_number)

  luhn(card_number)
end
full_account_number?(account_number) click to toggle source
# File lib/cz_faker/validator/bank.rb, line 18
def full_account_number?(account_number)
  number, code = account_number.split("/")
  return false unless account_number? number

  bank_code? code
end
sipo?(sipo_number) click to toggle source
# File lib/cz_faker/validator/bank.rb, line 35
def sipo?(sipo_number)
  sum = 0
  CzFaker::Data::SIPO_NUMBER_WEIGHTS.each_with_index do |weight, index|
    sum += sipo_number[index].to_i * weight
  end
  (10 - (sum % 10)) % 10 == sipo_number[-1].to_i
end

Private Class Methods

base_account_number?(account_number) click to toggle source
# File lib/cz_faker/validator/bank.rb, line 55
def base_account_number?(account_number)
  account_number = account_number.to_s.rjust(10, "0")
  sum = 0
  CzFaker::Data::ACCOUNT_NUMBER_WEIGHTS.each_with_index do |weight, index|
    sum += account_number[index].to_i * weight
  end
  (sum % 11).zero?
end
credit_card_issuer(card_number) click to toggle source
# File lib/cz_faker/validator/bank.rb, line 45
def credit_card_issuer(card_number)
  card_number = card_number.to_s
  CzFaker::Data::CARD_DEFS.each do |issuer, definition|
    definition[:prefixes].each do |prefix|
      return issuer if card_number.start_with?(prefix)
    end
  end
  nil
end
double_mod(i) click to toggle source
# File lib/cz_faker/validator/bank.rb, line 75
def double_mod(i)
  i *= 2
  if i > 9
    i = i % 10 + 1
  end
  i
end
luhn(card_number) click to toggle source
# File lib/cz_faker/validator/bank.rb, line 64
def luhn(card_number)
  ss = card_number.split(//)
  alternate = true
  total = 0
  ss.each do |c|
    total += alternate ? double_mod(c.to_i) : c.to_i
    alternate = !alternate
  end
  (total % 10).zero?
end