module Credy::CreditCard
Public Instance Methods
generate(options = {})
click to toggle source
Generate a credit card number
# File lib/credy.rb, line 15 def generate(options = {}) rule = find_rule(options) || return number = generate_from_rule(rule) { number: number, type: rule[:type], country: rule[:country] } end
infos(number)
click to toggle source
Returns information about a number
# File lib/credy.rb, line 27 def infos(number) rules = Rules.all.select do |rule| valid = true # Check number of digits lengths = rule[:length].is_a?(Array) ? rule[:length] : [rule[:length]] valid = false unless lengths.include? number.length # Check prefix valid = false unless !(number =~ Regexp.new("^#{rule[:prefix]}")).nil? valid end if rules rules[0] else nil end end
validate(number)
click to toggle source
Validates a number
# File lib/credy.rb, line 48 def validate(number) criterii = {} criterii[:luhn] = Check.luhn number criterii[:type] = !!infos(number) valid = criterii.all? { |_, v| v == true } { valid: valid, details: criterii } end
Private Instance Methods
complete_number(number)
click to toggle source
# File lib/credy.rb, line 67 def complete_number(number) # Generates the last digit according to luhn algorithm digits = (0..9).map(&:to_s) begin full = number + digits.delete(digits.sample) end while !Check.luhn(full) full end
find_rule(options = {})
click to toggle source
# File lib/credy.rb, line 63 def find_rule(options = {}) Rules.filter(options).sample end
generate_from_rule(rule)
click to toggle source
# File lib/credy.rb, line 77 def generate_from_rule(rule) length = Array(rule[:length]).sample number = rule[:prefix] # Generates n-1 digits (length - number.length - 1).times do number += rand(10).to_s end # Append last digit complete_number(number) end