gpt4 book ai didi

Luhn算法学习及其Ruby版实现代码示例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Luhn算法学习及其Ruby版实现代码示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

关于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则有效,否则无效。(有效) 代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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

最后此篇关于Luhn算法学习及其Ruby版实现代码示例的文章就讲到这里了,如果你想了解更多关于Luhn算法学习及其Ruby版实现代码示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com