我的代码有一点问题,看看信用卡号是否符合 Luhn 算法。当信用卡可被 10 整除时,代码返回 true,但当 CC 编号不能被 10 整除时,代码也返回 true。我已打印出最终总和以确保这些数字实际添加到 sum 变量中,并且他们似乎是.. 下面是我的代码。我知道它可以更干净,但在这个阶段,我希望先看到它工作。
def check_card
c_num= []
sum=0
s_numbers=@card_numbers.to_s.reverse.split("")
s_numbers.each_slice(2) do |x|
c_num << (x.last.to_s.to_i*2)
c_num << (x.first.to_s.to_i)
end
c_num.each do |num|
if num.to_i > 9
sum+= (num.to_i % 10)+1
else
sum += num.to_i
end
end
sum % 10==0
end
以下是它的调用方式:
it 'returns false for a bad card' do
card = CreditCard.new(4408041234567892)
card.check_card.should eq false
end