银行卡卡号校验——Luhn算法
1.1 Luhn简介
Luhn算法/公式,也称“模10算法”,是一种简单的校验公式,常被用于银行卡卡号、IMEI号等证件号码的识别校验。
需要注意的是Luhn算法存在的目的并不是成为一种加密安全的哈希函数,而在于防止意外操作导致的错误,如错误输入。
Luhn算法英文参考:https://en.wikipedia.org/wiki/Luhn_algorithm#cite_note-0
1.2校验规则
Luhn算法被用于最后一位为校验码的一串数字的校验,通过如下规则计算校验码的正确性:
1、按照从右往左的顺序,从这串数字的右边开始,包含校验码,将偶数位数字乘以2,如果每次乘二操作的结果大于9(如 8 × 2 = 16),然后计算个位和十位数字的和(如 1 + 6 = 7)或者用这个结果减去9(如 16 - 9 = 7)。
2、第一步操作过后会得到新的一串数字,计算所有数字的和(包含校验码)。
3、用第二步操作得到的和进行“模10”运算,如果结果为0,表示校验通过,否则失败。
1.3实例
function bankCheckCodeValidate(str) {
var sum=0,evenArr=[],oddArr=[];
var numArr=str.split("").reverse();
for(var i=0;i<numArr.length;i++){
i%2 != 0 ? evenArr.push(numArr[i]*2) : oddArr.push(numArr[i]);
}
for(var x=0;x<evenArr.length;x++){
evenArr[x]>9 ? sum+=(evenArr[x]-9) : sum+=evenArr[x];
}
for(var k=0;k<oddArr.length;k++){
sum+=parseInt(oddArr[k]);
}
return (sum%10 == 0);
}
1.4优缺点
Luhn算法可以检测出任何单码错误和近乎所有的相邻数字交换产生的错误,但是检测不出两个数字序列09和90的交换错误。它可以检测出十分之七比例的相同两位数交换错误(但2 ↔ 55, 33 ↔ 66 和 44 ↔ 77除外)。
分享到:
相关推荐
银行卡校验规则(Luhn算法)--JDK1.7下双击运行即可,详情参看https://zhuanlan.zhihu.com/p/26939610
下面小编就为大家带来一篇判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Luhn计算模10 “隔位2倍加”校验数的公式 计算步骤如下: 1、从右边第一个数字(低序)开始每隔一位乘以2。 2、把在步骤1中获得的乘积的各位数字与原号码中位乘2的各位数字相加求和。 3、从步骤2中获得的数字邻近的...
Luhn算法工具,实现对输入附加校验码,检查带校验码字符串是否合法
纯C语言实现的Luhn算法(信用卡校验位) 示例 C 函数“check_number()”用于检查任意长度的数字字符串,在字符串末尾使用 Luhn 校验位加上示例 C 函数“calc_digit()”以计算给定字符串的校验位字符。示例“main”C...
银行卡号Luhn校验算法的JS实现.pdf
基于国内银行卡号制定规则,因为目前接触到的银行项目需要用到客户端校验银行卡号,故自己用js写了一个Luhm校验算法,不足之处还望各位大侠赐教!
主要介绍了Python3通过Luhn算法快速验证信用卡卡号的方法,涉及Python中Luhn算法的使用技巧,非常简单实用,需要的朋友可以参考下
LUHN算法的作用是为了计算信用卡等证件号码的合法性
主要介绍了Go语言通过Luhn算法验证信用卡卡号是否有效的方法,实例分析了Luhn算法的原理与验证卡号的使用技巧,需要的朋友可以参考下
本文实例讲述了PHP实现通过Luhn算法校验信用卡卡号是否有效的方法。分享给大家供大家参考。具体实现方法如下: $numbers = 49927398716 49927398717 1234567812345678 1234567812345670; foreach (split(' ', $...
LUHN和MD5数据机密算法的VBS实现
卢恩·莫德 ...Luhn mod N算法是Luhn算法(也称为mod 10算法)的扩展,允许它处理非数字字符序列。 当需要使用校验位来验证由字母,字母和数字的组合甚至任何任意字符集组成的标识字符串时,这将很有用。
Luhn算法Java中Luhn算法的实现
检查14、15或16位数字卡号,以确定该数字是否符合Luhn的要求。 有关公式的详细信息,请参见: : 其中cardNumber用作帐号(以字符串形式接收) 没有空格或分隔符: 以下数字可作为一个可验证的示范cardNumber ='...
一个微小的(希望如此) gem 将自动执行一些基于 Luhn 算法(例如信用卡号、ID 号)生成/验证数字字符串的痛苦任务。 用法 要求: require 'luhnacy' 通用ValidationGeneration 验证: Luhnacy . valid? ( '...