Class: ActiveModel::Validations::CreditCardValidator::Luhn

Inherits:
Object
  • Object
show all
Defined in:
lib/active_model/validations/credit_card_validator.rb

Class Method Summary collapse

Class Method Details

.amex?(number) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/active_model/validations/credit_card_validator.rb', line 35

def self.amex?(number)
  self.luhn_valid?(number) and !(number !~ /^3[47].{13}/)
end

.luhn_valid?(s) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/active_model/validations/credit_card_validator.rb', line 48

def self.luhn_valid?(s)
  value = s.gsub(/\D/, '').reverse

  sum = i = 0

  value.each_char do |ch|
    n = ch.to_i

    n *= 2 if i.odd?

    n = 1 + (n - 10) if n >= 10

    sum += n
    i   += 1
  end

  (sum % 10).zero?
end

.mastercard?(number) ⇒ Boolean Also known as: master_card?

Returns:

  • (Boolean)


23
24
25
# File 'lib/active_model/validations/credit_card_validator.rb', line 23

def self.mastercard?(number)
  self.luhn_valid?(number) and !(number !~ /^5[1-5].{14}/)
end

.valid?(card_type, number) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
18
19
20
21
# File 'lib/active_model/validations/credit_card_validator.rb', line 15

def self.valid?(card_type,number)
  if card_type == :any
    self.luhn_valid?(number)
  else
    self.send("#{card_type.to_s}?", number)
  end
end

.visa?(number) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/active_model/validations/credit_card_validator.rb', line 31

def self.visa?(number)
  self.luhn_valid?(number) and !(number !~ /^4.{15}/)
end