麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

Luhn算法學習及其Ruby版實現代碼示例

2020-10-29 19:35:07
字體:
來源:轉載
供稿:網友

關于LUHN算法
LUHN算法,主要用來計算信用卡等證件號碼的合法性。
1、從卡號最后一位數字開始,偶數位乘以2,如果乘以2的結果是兩位數,將兩個位上數字相加保存。
2、把所有數字相加,得到總和。
3、如果信用卡號碼是合法的,總和可以被10整除。
Luhn 算法或是Luhn 公式,也被稱作“模10算法”。它是一種簡單的校驗公式,一般會被用于身份證號碼,IMEI號碼,美國供應商識別號碼,或是加拿大的社會保險號碼的驗證。該算法是由IBM的科學家Hans Peter Luhn所創造,于1954年1月6日提出該專利的申請,并于1960年8月23日被授予,在美國的專利號為2950048。
該算法一直都被大家所公用,并且時至今日應用也很廣泛。它被指定在ISO/IEC7812-1。它的目的不是成為一種加密安全的哈希函數;它的目的是防止意外出現的錯誤,而不是惡意攻擊。很多信用卡和眾多的政府身份識別號碼都使用該算法從一系列的隨機數字中提取有效的數字。

優點和缺點
Luhn 算法會檢測到任何單碼的錯誤以及幾乎所有的相鄰數字換位的錯誤。但是它不會檢測兩個數字序列09轉90的錯誤(反之亦然)。它會檢測到十分之七的相同雙位數錯誤(不會檢測到22和55的互換,33和66的互換,44和77的互換)。其他更復雜的檢查數字算法,如費爾赫夫算法,可以檢測出更多的轉錄錯誤。模N的Luhn算法是Luhn算法的一個擴展,支持非數字字符串。因為該算法采取了從右向左的方式,而且零位會影響計算的結果。只有當零位造成了數位的移動或是用零來填充一串數字的開頭時才不會影響計算結果的生成。因此不論在將1234用零填充為0001234之前或是之后,使用Luhn算法得到的結果都是一樣的。
該算法在美國專利上是為了給手持或是機械設備計算校驗碼。所以它必須盡可能的簡單。

Ruby版實現
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 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美人xx| 少妇的肉体2无删减版 | 久久国产精品久久久久久久久久 | av成人免费观看 | 在线播放视频一区二区 | 手机国产乱子伦精品视频 | 欧美成人国产va精品日本一级 | 毛片大全免费看 | 国产韩国精品一区二区三区久久 | 精品成人国产在线观看男人呻吟 | 成人在线观看免费观看 | 久久久久久久久淑女av国产精品 | 久久久久久久.comav | 免费毛片小视频 | 欧美日韩手机在线观看 | 91av大片| 91精品国产综合久久男男 | 激情在线观看视频 | 在线影院av| 精精国产xxxx视频在线播放7 | 免费国产人成网站 | 国产精品白嫩白嫩大学美女 | 国产草草视频 | 国产免费网站视频 | 在线观看免费污视频 | 欧美激情第一区 | sese在线视频 | 精品一区二区三区网站 | 天天干导航 | 污污黄 | 九九精品在线观看视频 | 日韩欧美综合在线 | 欧美日韩视频第一页 | 久久国产精品99国产 | 在线91视频 | 久久久久久69 | 国产日韩在线观看一区 | 黄色小视频免费在线观看 | gril hd| 色羞羞 | 亚洲午夜电影 |