 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Checking a Credit Card Checksum | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'rubygems' require 'creditcard' '5276 4400 6542 1319'.creditcard? | true | true | 
| '5276440065421313'.creditcard? | false | false | 
| 1276440065421319.creditcard? | false | false | 
| 5276440065421313.creditcard_type | "mastercard" | "mastercard" | 
| module CreditCard
  def creditcard?
    numbers = self.to_s.gsub(/[^\d]+/, '').split(//)
    checksum = 0
    0.upto numbers.length do |i|
      weight = numbers[-1*(i+2)].to_i * (2 - (i%2))
      checksum += weight % 9
    end
    return numbers[-1].to_i == 10 - checksum % 10
  end
end
class String
  include CreditCard
end
class Integer
  include CreditCard
end
'5276 4400 6542 1319'.creditcard? | true | true | 
| numbers = '5276 4400 6542 1319'.gsub(/[^\d]+/, '').split(//) | ["5", "2", "7", "6", "4", "4", "0", "0", | ["5", "2", "7", "6", "4", "4", "0", "0", "6", "5", "4", "2", "1", "3", "1", "9"] | 
| checksum = 0 0.upto numbers.length do |i| weight = numbers[-1*(i+2)].to_i * (2 - (i%2)) checksum += weight % 9 end checksum | 51 | 51 | 
| numbers[-1].to_i == 10 - checksum % 10 | true | true |