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 |