Luhn算法的Ruby實現

什麼是Luhn算法? Wiki上得標準定義:[url]http://en.wikipedia.org/wiki/Luhn_algorithm[/url]

Luhn算法最常用的領域是信用卡號碼的有效性驗證,VISA和MasterCard等巨頭都使用了該算法。

Luhn算法的基本原理非常簡單:(eg:49927398716)
第一步:把信用卡號倒序(61789372994)
第二步:取出倒序後的奇數位置上的號碼, 相加等到總和s1(s1=6+7+9+7+9+4=42)
第三步:取出倒序後的偶數位置上的號碼,每個號碼乘以2. (eg:2,16,6,4,18)
第四步:把第三步得到的大於10的號碼轉化爲個位+十位。(eg:2,7,6,4,9)
第五步:把處理好的偶數位號碼相加,得到s2(s2=2+7+6+4+9=28)
第六步:判讀(s1+s2)%10 == 0則有效,否則無效。(有效)

代碼:

module LuhnValidator
def validate(number)
s1 = s2 = 0
number.to_s.reverse.chars.each_slice(2) do |odd, even|
s1 += odd.to_i

double = even.to_i * 2
double -= 9 if double >= 10
s2 += double
end
(s1 + s2) % 10 == 0 ? 'valid' : 'invalid'
end
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章