Class: ActiveModel::Validations::CreditCardValidator::Luhn
- Inherits:
-
Object
- Object
- ActiveModel::Validations::CreditCardValidator::Luhn
- Defined in:
- lib/active_model/validations/credit_card_validator.rb
Class Method Summary collapse
- .amex?(number) ⇒ Boolean
- .luhn_valid?(s) ⇒ Boolean
- .mastercard?(number) ⇒ Boolean (also: master_card?)
- .valid?(card_type, number) ⇒ Boolean
- .visa?(number) ⇒ Boolean
Class Method Details
.amex?(number) ⇒ 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
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?
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
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
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 |