【发布时间】:2011-08-29 15:33:16
【问题描述】:
我有以下方法对跟踪号进行校验位,但感觉很冗长/草率。是否可以重构并进行大体清理?
我正在运行 Ruby 1.8.7。
def is_fedex(number)
n = number.reverse[0..14]
check_digit = n.first.to_i
even_numbers = n[1..1].to_i + n[3..3].to_i + n[5..5].to_i + n[7..7].to_i + n[9..9].to_i + n[11..11].to_i + n[13..13].to_i
even_numbers = even_numbers * 3
odd_numbers = n[2..2].to_i + n[4..4].to_i + n[6..6].to_i + n[8..8].to_i + n[10..10].to_i + n[12..12].to_i + n[14..14].to_i
total = even_numbers + odd_numbers
multiple_of_ten = total + 10 - (total % 10)
remainder = multiple_of_ten - total
if remainder == check_digit
true
else
false
end
end
编辑:以下是有效和无效的数字。
有效:9612019950078574025848
无效:9612019950078574025847
【问题讨论】:
-
布尔表达式已经计算为
true或false,所以你可以直接使用remainder == check_digit,而不是最后的if。 -
你有有效号码和无效号码的例子吗?这允许回答的人在发布之前测试他们的代码。
标签: ruby refactoring