【发布时间】:2013-10-01 11:04:10
【问题描述】:
我的代码有点问题,看看信用卡号是否符合 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
【问题讨论】:
-
你的代码对我有用。您使用的输入是什么?
-
-
特别有趣,你的代码也给了我这个数字的错误。
-
您确定这正是您使用的代码吗?
-
阳性。我在它上面有一个初始化方法(用于类),但它所做的只是定义局部变量并在信用卡号不够长时发送 ArguementError。我发给你的号码总和一直是 69,所以应该是假的..