Module: CreditCardSupport::CreditCardNumber

Includes:
LuhnNumber
Defined in:
lib/credit_card_support/credit_card_number.rb

Constant Summary collapse

ISSUERS =
{
  amex: /^3[47][0-9]{13}$/,
  diners_club: /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,
  discover: /^6(?:011|5[0-9]{2})[0-9]{12}$/,
  enroute: /^2(014|149)\d{11}$/,
  maestro: /(^6759[0-9]{2}([0-9]{10})$)|(^6759[0-9]{2}([0-9]{12})$)|(^6759[0-9]{2}([0-9]{13})$)/,
  master_card: /^5[1-5][0-9]{14}$/,
  jcb: /^35[0-9]{14}$/,
  solo: /^6(3(34[5-9][0-9])|767[0-9]{2})\d{10}(\d{2,3})?$/,
  visa: /^4[0-9]{12}(?:[0-9]{3})?$/
}.freeze
TESTCARDS =
{
  amex: [
    '378282246310005',
    '371449635398431',
    '378734493671000',
    '343434343434343',
    '371144371144376',
    '341134113411347'
    ],
  diners_club: [
    '30569309025904',
    '38520000023237',
    '36438936438936'
    ],
  discover: [
    '6011000990139424',
    '6011111111111117',
    '6011016011016011',
    '6011000000000004',
    '6011000995500000',
    '6500000000000002'
    ],
  master_card: [
    '5555555555554444',
    '5105105105105100',
    '5500005555555559',
    '5555555555555557',
    '5454545454545454',
    '5555515555555551',
    '5405222222222226',
    '5478050000000007',
    '5111005111051128',
    '5112345112345114'
    ],
  visa: [
    '4111111111111111',
    '4012888888881881',
    '4222222222222',
    '4005519200000004',
    '4009348888881881',
    '4012000033330026',
    '4012000077777777',
    '4217651111111119',
    '4500600000000061',
    '4000111111111115'
    ],
  jcb: [
    '3566003566003566',
    '3528000000000007'
  ]
}.freeze

Instance Method Summary collapse

Methods included from LuhnNumber

#luhn?

Instance Method Details

#issuerObject



71
72
73
74
75
76
# File 'lib/credit_card_support/credit_card_number.rb', line 71

def issuer
  ISSUERS.each do |issuer, number_match|
    return issuer if to_s.match(number_match)
  end
  nil
end

#testcard?Boolean

Returns:

  • (Boolean)


78
79
80
81
82
83
# File 'lib/credit_card_support/credit_card_number.rb', line 78

def testcard?
  TESTCARDS.each do |issuer, numbers|
    return true if numbers.include?(to_s)
  end
  false
end