亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Luhn算法學(xué)習(xí)及其Ruby版實現(xiàn)代碼示例

 更新時間:2016年05月27日 16:40:44   作者:ningandjin  
Luhn算法主要北用來進(jìn)行數(shù)字驗證,尤其是卡號身份證號等,這里我們就來看一下Luhn算法學(xué)習(xí)及其Ruby版實現(xiàn)代碼示例:

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

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

Ruby版實現(xiàn)
Luhn算法的基本原理非常簡單:(eg:49927398716)
第一步:把信用卡號倒序(61789372994)
第二步:取出倒序后的奇數(shù)位置上的號碼, 相加等到總和s1(s1=6+7+9+7+9+4=42)
第三步:取出倒序后的偶數(shù)位置上的號碼,每個號碼乘以2. (eg:2,16,6,4,18)
第四步:把第三步得到的大于10的號碼轉(zhuǎn)化為個位+十位。(eg:2,7,6,4,9)
第五步:把處理好的偶數(shù)位號碼相加,得到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 

相關(guān)文章

  • Ruby 多線程的潛力和弱點分析

    Ruby 多線程的潛力和弱點分析

    這篇文章主要介紹了Ruby 多線程的潛力和弱點分析,本文講解了Ruby 多線程和 IO Block、Ruby GIL 的影響、JRuby 去除了 GIL、Ruby 多線程總結(jié)等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Ruby on Rails中jquery_ujs組件拖慢速度的問題解決

    Ruby on Rails中jquery_ujs組件拖慢速度的問題解決

    這篇文章主要介紹了Ruby on Rails中jquery ujs組件拖慢速度的問題解決,jquery_ujs是Rails框架中涉及AJAX交互的組件,需要的朋友可以參考下
    2015-11-11
  • ruby實現(xiàn)修改ubuntu下的hosts

    ruby實現(xiàn)修改ubuntu下的hosts

    本文給大家分享的是通過ruby獲取github上的hosts文件內(nèi)容,修改到本地Ubuntu中,十分的實用,具體你懂得,有需要的小伙伴可以參考下。
    2015-06-06
  • 比較詳細(xì)的ruby symbol 學(xué)習(xí)資料

    比較詳細(xì)的ruby symbol 學(xué)習(xí)資料

    最近在學(xué)習(xí)ruby on rails,的確是一個優(yōu)秀的數(shù)據(jù)庫開發(fā)框架。但在過程中,發(fā)現(xiàn)在視圖文件夾中的rhtml文件里有大量的類似于以下的語句
    2008-08-08
  • Ruby中Block和迭代器的使用講解

    Ruby中Block和迭代器的使用講解

    這篇文章主要介紹了Ruby中Block和迭代器的使用,是Ruby入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-07-07
  • 使用ruby部署工具mina快速部署nodejs應(yīng)用教程

    使用ruby部署工具mina快速部署nodejs應(yīng)用教程

    這篇文章主要介紹了使用ruby部署工具mina快速部署nodejs應(yīng)用教程,包含mina的配置、運行以及發(fā)布示例,需要的朋友可以參考下
    2014-09-09
  • Ruby常量查找路徑問題深入研究

    Ruby常量查找路徑問題深入研究

    這篇文章主要介紹了Ruby常量查找路徑問題深入研究,本文給出了多個例子來探討Ruby的常量查找路徑,并給出了總結(jié)結(jié)論,需要的朋友可以參考下
    2015-03-03
  • ruby安裝gem包失敗的通用解決方法

    ruby安裝gem包失敗的通用解決方法

    這篇文章主要介紹了ruby安裝gem包失敗的通用解決方法,需要的朋友可以參考下
    2014-05-05
  • Ruby中的字符串編寫示例

    Ruby中的字符串編寫示例

    這篇文章主要介紹了Ruby中的字符串編寫示例,作者給出了相關(guān)編程風(fēng)格的一些建議,需要的朋友可以參考下
    2015-08-08
  • Ruby的面向?qū)ο蠓绞骄幊虒W(xué)習(xí)雜記

    Ruby的面向?qū)ο蠓绞骄幊虒W(xué)習(xí)雜記

    Ruby是具有面向?qū)ο筇匦缘木幊陶Z言,這里整理了一些Ruby的面向?qū)ο蠓绞骄幊虒W(xué)習(xí)雜記,包括類與方法等基本的面向?qū)ο笠氐闹R,需要的朋友可以參考下
    2016-05-05

最新評論