クレジットカード番号が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