gpt4 book ai didi

ruby - 在 Ruby 中实现 Luhn 算法

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:42 26 4
gpt4 key购买 nike

我一直在尝试用 Ruby 实现 Luhn 算法。我一直在执行以下步骤:

  • 该公式根据其包含的校验位验证数字,该校验位通常附加到部分帐号以生成完整帐号。此帐号必须通过以下测试:
    • 从最右边的校验位开始向左移动,每第二个数字的值加倍。
    • 将乘积的数字(例如,10 = 1 + 0 = 1、14 = 1 + 4 = 5)与原始数字的未加倍数字相加。
    • 如果总模 10 等于 0(如果总和以零结尾),则根据 Luhn 公式该数字有效;否则无效。

http://en.wikipedia.org/wiki/Luhn_algorithm

这是我想出的:

 def validCreditCard(cardNumber)
sum = 0
nums = cardNumber.to_s.split("")
nums.insert(nums.size, "x")
nums.reverse!
nums.each_with_index do |n, i|
if !n.eql?("x")
sum += (i % 2 == 0) ? n.to_i : n.to_i * 2
end
end
if (sum % 10) == 0
return true
else
return false
end
end

但是,每次我测试它时都会返回 false。我不确定我做错了什么。

最佳答案

这是一个快速有效的方法:

def credit_card_valid?(account_number)
digits = account_number.chars.map(&:to_i)
check = digits.pop

sum = digits.reverse.each_slice(2).flat_map do |x, y|
[(x * 2).divmod(10), y || 0]
end.flatten.inject(:+)

check.zero? ? sum % 10 == 0 : (10 - sum % 10) == check
end

credit_card_valid? "79927398713" #=> true
credit_card_valid? "79927398714" #=> false

关于ruby - 在 Ruby 中实现 Luhn 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9188360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com