所以我正在尝试使用一种简单的算法来验证信用卡号码。我可以通过一些数字,但不是所有数字,我不知道为什么。
class CreditCard
def initialize(number)
@number = (number.to_s.split("")).map! { |i| i.to_i}
if @number.length != 16
raise ArgumentError, "Not a valid credit card number"
end
end
def check_card()
@number.reverse!.map! do |i|
if @number.index(i).odd?
i * 2
else
i
end
end
p "Here is my array: #{@number}"
# split method
# @number.map! do |num|
# if num >= 10
# num = num.to_s.split("").map! { |i| i.to_i }
# else
# num
# end
# end
# @number.flatten!
#sum method
# @number = @number.flatten!.inject(0) { |sum, element| sum + element}
# if @number % 10 == 0
# return true
# else
# return false
# end
end
end
当我通过 6789678967896781(整数,而不是字符串)时,每种方法都有效。当我通过 1111111111111111 时,它不起作用。我正在重新处理我所有的(诚然是混乱的)代码,我发现当控制击中这个时:
@number.reverse!.map! do |i|
if @number.index(i).odd?
i * 2
else
i
end
end
输出只是一个包含 16 个 1 的数组。剩下的代码已经被注释掉了,因为我无法通过rspec中的每个测试,所以我开始向后工作。我计划尝试使 split 和 add 方法成为私有方法,它们都由 check_card 方法调用。我真的认为我需要第二双眼睛。我只是想念一些东西。希望这是一条小鱼而不是鲸鱼。