我對追蹤號碼做了一個校驗位的方法如下,但它只是感覺冗長/馬虎。它可以重構,只是通常清理?這個校驗數字方法可以重構嗎?
我正在運行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」,所以不是最後的「if」,你可以執行「remainder == check_digit」。 –
你有沒有一個有效和無效號碼的例子?這允許在發佈之前回答的人測試他們的代碼。 – Martijn