Module: CreditCardChecks

Included in:
Paypal
Defined in:
lib/ruby-paypal/credit_card_checks.rb

Overview

Performs a series of credit card number checks.

Instance Method Summary collapse

Instance Method Details

#card_type_check(type, number) ⇒ Object

Perform checks on credit card numbers with reference to the length of the credit card number and the type of credit card. Refer to en.wikipedia.org/wiki/Credit_card_number



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/ruby-paypal/credit_card_checks.rb', line 32

def card_type_check(type, number)
  validity = false
  case type.upcase
    when "VISA"
      validity = true if (number.length == 16 or number.length = 13) and number[0,1] == "4"
    when "MASTERCARD"
      validity = true if (number.length == 16) and (52..55).include?(number[0,2].to_i)
    when "AMEX"
      validity = true if (number.length == 16) and ['34', '37'].include?(number[0,2])
    when "DISCOVER"
      validity = true if (number.length == 16) and (number[0,2] == "65" or number[0,4] == "6011")
    when "SWITCH"
      # TODO checks for Switch cards
      validity = true
    when "SOLO"
      # TODO checks for Solo cards
      validity = true
    else
      raise "Invalid card type entered"
  end
  
  return validity
end

#luhn_check(number) ⇒ Object

Perform Luhn check on a credit card number. Refer to en.wikipedia.org/wiki/Luhn_algorithm



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/ruby-paypal/credit_card_checks.rb', line 7

def luhn_check(number)
  num = 0
  number.length.times { |p|
      position = number.length - p - 1
    if position % 2 == 0 then            
      doubled = number[position,1].to_i * 2
      if doubled > 9 then
        num = num + doubled.to_s[0,1].to_i +  doubled.to_s[1,1].to_i
      else
        num = num + doubled.to_i
      end
    else
      num = num + number[position,1].to_i            
    end
  }
  if num.to_i % 10 == 0 then
    return true
  else
    return false
  end    
end