`

Luhn算法的Ruby实现

 
阅读更多
什么是Luhn算法? Wiki上得标准定义:http://en.wikipedia.org/wiki/Luhn_algorithm

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
0
0
分享到:
评论

相关推荐

    Luhn算法工具,实现对输入附加校验码,检查带校验码字符串是否合法

    Luhn算法工具,实现对输入附加校验码,检查带校验码字符串是否合法

    LUHN和MD5算法的VBS实现

    LUHN算法的VBS实现涉及到对数字字符串的处理,包括对位权值的翻倍、求和以及模运算。 MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,产生一个128位的散列值,通常以32个十六进制字符表示。MD5的主要...

    js验证银行卡luhn算法

    在JavaScript中实现Luhn算法,可以有效地帮助我们验证国内银行卡号的合法性,避免因用户输入错误导致的系统问题。 Luhn算法的基本步骤如下: 1. **反转数字串**:从右到左读取数字串(忽略非数字字符),偶数位置...

    银行卡号的Luhn算法

    Luhn计算模10 “隔位2倍加”校验数的公式 计算步骤如下: 1、从右边第一个数字(低序)开始每隔一位乘以2。 2、把在步骤1中获得的乘积的各位数字与原号码中位乘2的各位数字相加求和。 3、从步骤2中获得的数字邻近的...

    LuhnAlgorithm:Java中Luhn算法的实现

    在Java中实现Luhn算法,我们需要遵循以下步骤: 1. **初始化数字序列**:首先,将数字序列(如信用卡号)从右到左(即从末尾到首部)读取,奇数位置的数字保持不变,偶数位置的数字需要双倍计算。如果双倍后的结果...

    Python3通过Luhn算法快速验证信用卡卡号的方法

    本文将详细介绍如何使用Python3实现Luhn算法来快速验证信用卡卡号,并提供实际的代码示例。 #### 1. Luhn算法简介 Luhn算法(也称为模10算法)是由Hans Peter Luhn于1954年提出的,主要用于验证各种标识号码的有效...

    用C语言 实现的 Luhn算法(信用卡校验位)_C语言_代码_下载

    纯C语言实现的Luhn算法(信用卡校验位) 示例 C 函数“check_number()”用于检查任意长度的数字字符串,在字符串末尾使用 Luhn 校验位加上示例 C 函数“calc_digit()”以计算给定字符串的校验位字符。示例“main”C...

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

    Luhn算法主要北用来进行数字验证,尤其是卡号身份证号等,这里我们就来看一下Luhn算法学习及其Ruby版实现代码示例:

    LUHN算法的作用是为了计算信用卡等证件号码的合法性

    `LLUHN.cpp`可能是实现LUHN算法的C++源代码文件,其中包含函数定义和其他具体实现细节。而`LLUHN.h`则可能是一个头文件,定义了相关的函数原型、数据结构以及可能的常量,供其他程序模块调用和引用。 在实际应用中...

    银行卡校验规则(Luhn算法)

    银行卡校验规则(Luhn算法)--JDK1.7下双击运行即可,详情参看https://zhuanlan.zhihu.com/p/26939610

    判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)

    Luhn算法是由IBM科学家Hans Peter Luhn发明的一种简单的校验算法,广泛用于金融行业,尤其在银行卡号校验中应用甚广。 Luhn算法校验的过程大致如下: 1. 从卡号的最后一位数字开始,从右向左,每次跳过一位进行加...

    Go语言通过Luhn算法验证信用卡卡号是否有效的方法

    在本文中,我们将详细介绍Go语言如何使用Luhn算法来验证信用卡卡号的有效性。...Luhn算法的实现简单且高效,适用于各种需要进行数字校验的应用场景。希望本文的介绍对您在Go语言程序设计上有所助益。

    LuhnModN:Mod N的Luhn算法JavaScript实现

    Luhn Mod N算法JavaScript实现 Luhn mod N算法是Luhn算法(也称为mod 10算法)的扩展,允许它处理非数字字符序列。 当需要使用校验位来验证由字母,字母和数字的组合甚至任何任意字符集组成的标识字符串时,这将很...

    php-luhn-summarize:p 的实现。 PHP中的luhn摘要算法

    在提供的压缩包 "php-luhn-summarize-master" 中,可能包含了一个具体的 Luhn 算法实现,你可以解压并查看源代码,了解更详细的实现方式和可能的优化。 总之,PHP 的 Luhn 算法实现是一个实用的工具,它有助于确保...

    银行卡号Luhn校验算法的JS实现.pdf

    银行卡号Luhn校验算法的JS实现 在电子商务和在线支付系统中,银行卡号验证是非常重要的一步。为了提高系统的交互性和信息录入的准确性,同时减轻服务器的工作压力,需要在浏览器端进行有效的银行卡号验证。本文讨论...

    luhnacy:可用于生成满足 Luhn 算法的数字串的小宝石

    一个微小的(希望如此) gem 将自动执行一些基于 Luhn 算法(例如信用卡号、ID 号)生成/验证数字字符串的痛苦任务。 用法 要求: require 'luhnacy' 通用ValidationGeneration 验证: Luhnacy . valid? ( '...

    AccountNumberKata.TypeScript:Luhn 算法的两个示例实现

    《Luhn算法在TypeScript中的实现探析》 在信息技术领域,数据验证是保障系统安全性和数据准确性的重要环节。Luhn算法,又称模10校验算法或Luhn Mod 10校验,就是其中一种广泛应用的数据校验方法。本文将深入探讨...

    LuhnAlgorithmProof:使用Luhn算法验证14-16位信用卡号

    Luhn算法的Python 3.4实现 用于验证(返回True)或拒绝(返回False)Luhn兼容帐号的Python3系统。 检查14、15或16位数字卡号,以确定该数字是否符合Luhn的要求。 有关公式的详细信息,请参见: : 其中cardNumber...

    Ruby-creditcardvalidations一个rubygem验证信用卡号码生成有效的数字Luhn检查

    总的来说,Ruby-creditcardvalidations是一个实用的工具,可以帮助开发者快速实现信用卡验证功能,提高在线支付系统的安全性与可靠性。通过了解和熟练使用这个库,可以更有效地处理与支付相关的业务逻辑,为用户提供...

Global site tag (gtag.js) - Google Analytics