class CreditCardValidations::Factory

Public Class Methods

generate(rule) click to toggle source
# File lib/credit_card_validations/factory.rb, line 22
def generate(rule)
  number(rule[:prefixes].sample, rule[:length].sample, rule.fetch(:options, {})[:skip_luhn])
end
last_digit(number) click to toggle source

extracted from darkcoding-credit-card

# File lib/credit_card_validations/factory.rb, line 42
def last_digit(number)
  # Calculate sum
  sum, pos = 0, 0
  length = number.length + 1

  reversed_number = number.reverse
  while pos < length do
    odd = reversed_number[pos].to_i * 2
    odd -= 9 if odd > 9

    sum += odd

    sum += reversed_number[pos + 1].to_i if pos != (length - 2)

    pos += 2
  end

  (((sum / 10).floor + 1) * 10 - sum) % 10
end
number(prefix, length, skip_luhn = false) click to toggle source
# File lib/credit_card_validations/factory.rb, line 26
def number(prefix, length, skip_luhn = false)
  number = prefix.dup
  1.upto(length - (prefix.length + 1)) do
    number << "#{rand(9)}"
  end
  #if skip luhn
  if skip_luhn
    number += "#{rand(9)}"
  else
    number += last_digit(number).to_s
  end
  number
end
random(brand = nil) click to toggle source
# File lib/credit_card_validations/factory.rb, line 14
def random(brand = nil)
  brand = Detector.brands.keys.sample if brand.nil?
  if Detector.brands[brand].nil?
    raise Error.new('Unsupported brand')
  end
  generate(Detector.brands[brand][:rules].sample)
end