【发布时间】:2015-03-11 23:25:18
【问题描述】:
所以我在应用 Luhn 算法时遇到了一些问题 以下是一般规则:http://www.codeproject.com/Tips/515367/Validate-credit-card-number-with-Mod-algorithm
这是我的代码
def luhn(credit_card)
result = 0
nums = credit_card.split("")
nums.each_with_index do |item, index|
if index.even?
if item.to_i*2>9
result+= item.to_i*2-9
else
result+= item.to_i*2
end
else
result +=item.to_i
end
end
if (result % 10) == 0
self.validation = "valid"
else
self.validation = "invalid"
end
end
它适用于大多数卡片
VISA: 4111111111111111 (valid)
VISA: 4111111111111 (invalid)
VISA: 4012888888881881 (valid)
Discover: 6011111111111117 (valid)
MasterCard: 5105105105105100 (valid)
MasterCard: 5105105105105106 (invalid)
Unknown: 9111111111111111 (invalid)
但是说到这个
美国运通:37828224631000(无效)
由于某种原因我的代码说它无效,但它应该根据官方测试卡列表。
我看到了一堆其他的代码,但我想纠正错误并理解我的错误。我会很感激一些解释为什么它会这样工作。
【问题讨论】:
-
if index.even?是错误的。阅读算法。
标签: ruby-on-rails ruby credit-card luhn