QT C++ Luhn算法验证银行卡号合法性
项目需要找了比较多银行卡的校验方法,发现很多博客的校验方法写的不清不楚乱七八糟,有的连算法的名字都写错了(写成Luhm算法的都有ヽ(#`Д´)ノ),不知道是不是从其他网站直接复制过去的,在这里把自己已经验证成功的方法写下来,避免大家再次踩坑。
Luhn算法定义(来自维基百科):
Luhn算法(Luhn algorithm),也称为“模10”(Mod 10)算法,是一种简单的校验和算法,一般用于验证身份识别码,例如发卡行识别码、国际移动设备辨识码(IMEI),美国国家提供商标识号码,或是加拿大社会保险号码。该算法由IBM科学家Hans Peter Luhn创造,专利于1954年1月6日申请,1960年8月23日颁证,美国专利号2950048。
该算法现已属于公有领域并得到了广泛的应用,例如ISO/IEC 7812-1。它不是一种安全的加密哈希函数,设计它的目的只是防止意外出错而不是恶意攻击。
Luhn算法释义(来自维基百科):
Luhn算法会通过校验码对一串数字进行验证,校验码通常会被加到这串数字的末尾处,从而得到一个完整的身份识别码。
我们以数字“7992739871”为例,计算其校验位:
从校验位开始,从右往左,偶数位乘2(例如,7*2=14),然后将两位数字的个位与十位相加(例如,10:1+0=1,14:1+4=5);
把得到的数字加在一起(本例中得到67);
将数字的和取模10(本例中得到7),再用10去减(本例中得到3),得到校验位。
原始数字 | 7 | 9 | 9 | 2 | 7 | 3 | 9 | 8 | 7 | 1 | x |
---|---|---|---|---|---|---|---|---|---|---|---|
偶数位乘2 | 7 | 18 | 9 | 4 | 7 | 6 | 9 | 16 | 7 | 2 | x |
将数字相加 | 7 | 9 | 9 | 4 | 7 | 6 | 9 | 7 | 7 | 2 | =67 |
我国的银行卡号码基本上都是符合Luhn算法的,四大行就不用说了,我用比较小的银行测试也可以通过校验,所以只要是常规银行卡我觉得都可以用这个算法去检测合法性。
我用到的算法和维基百科上稍微有些不同(或者说是维基百科上写的不太好),其中,原始数字最后一位应该是表格中的X,所谓的将偶数位乘以2,是去掉校验数X之后开始算的。
维基百科里面的:偶数位乘2,然后将两位数字的个位与十位相加这一条,代码上可以写成:如果偶数位数字乘以2如果大于9则将结果减去9。
最后一步,改成,将得到的数字加在一起,再与校验数字相加,得到的最后结果如果对10取模等于0,则视为合法。
逻辑变形为:
1、取银行卡号码最后一位为校验数;
2、除校验位外,从右往左,偶数乘以2,如果得到的数字大于9则减去9;
3、将经过步骤2处理过的所有数字相加(包括奇数位、偶数位、校验位);
4、对10取模,如果结果为0则为合法。
写成代码如下:
/**
* @brief Luhn算法验证银行卡号
* @para cardNum:银行卡号
* @author Andy
* @date 2019-03-19
*/
bool checkBankCard(QString cardNum){int xCheck = cardNum.right(1).toInt();cardNum = cardNum.left(cardNum.size() - 1);int size = cardNum.length();if (size > 19) return false;int sum = 0;for(int n = size; n > 0; n--) {int value = cardNum.at(n - 1).digitValue();if (value == -1) return false;if ((size - n) % 2 == 0) {value *= 2;if(value > 9) value -= 9;}sum += value;}return (sum + xCheck) % 10 == 0;
}
QT C++ Luhn算法验证银行卡号合法性相关推荐
- Java使用luhn校验算法实现银行卡号合法性校验获取银行卡号所属银行
Luhn校验算法或是Luhn 公式,也被称作"模10算法".它是一种简单的校验公式,一般会被用于身份证号码,IMEI号码,美国供应商识别号码, 或是加拿大的社会保险号码的验证.该算 ...
- c语言验证信用卡 卡号介于13到16位,使用luhn算法验证信用卡号码
信用卡号码符合特定模式.信用卡必须有13到16位数字.它必须先从: •4 Visa卡 •5主卡 •37美国运通卡 在1954年,IBM的汉斯·卢恩提出的算法验证信用卡号.该算法对于确定卡号是否正确输入 ...
- Luhn算法验证信用卡的合法性
算法描述为: 1.从卡号最后一位数字开始,偶数位乘以2,如果乘以2的结果是是两位数,将结果减去9(可以理解为各位数相加) 2.把把有数字相加得到总和 3.看是否能被10整除,如果能,说明是合法的 ph ...
- luhn算法 java_java – 使用luhn算法验证信用卡号
我对以下编程任务有疑问. 信用卡号码遵循某些模式.信用卡必须在13到16位之间.它必须从: •4张Visa卡 •5张万事达卡 •美国运通卡37张 1954年,IBM的Hans Luhn提出了一种验证信 ...
- 银行卡号合法性验证小结
关于银行卡号合法性的验证,网上主流的验证算法是luhn算法,代码如下: /*** 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位* @author mengrang* @since 201 ...
- js luhn算法_判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验
开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验 下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验): iOS ...
- 判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验
开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验 下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验): iOS ...
- luhn算法java_Java信用卡验证– Java中的Luhn算法
luhn算法java Recently I came to know that Credit Card numbers are not random and passes Luhn Algorithm ...
- 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 该校验的过程:1、从卡号最后一位数字开始,逆
import java.util.Scanner;/*** 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,* 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luh ...
- 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心, 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
/** 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,* 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过.该校验的过程: 1.从卡号最后一位 ...
最新文章
- 百万奖金悬赏AI垃圾分类,就问你来不来?
- 干货整理!10个Python图像处理工具,入门必看,提效大法
- java rxtx version_java – 不匹配的RXTX版本
- c语言控制与实现 pdf,c语言的控制输出格式.pdf
- android linearllayout 隐藏 动画,AnimatedLinearLayout:带删除动画的LinearLayout
- 遗传算法可用什么算法代替_获取可用密码算法的列表
- 红米Note 8 Pro新配色公布:轻盈一握宛若浮华在手
- test函数java,js中test()函数在正则中使用
- 1、eclipse 使用git提交项目至github进行项目托管
- PyTorch学习基础知识二
- 三次Hermite插值
- “青山依旧在,几度夕阳红” 2021.12.7日晚
- Unity实现推箱子
- 回复犹豫的实习生——走好脚下,心怀未来
- Android平板app开发布局文件,Android平板开发相关
- 力扣-718最长重复子数组(dp)
- 我的个人博客是如何申请百度联盟通过的?
- 北上广深到底谁大谁小?
- java script 月日年转年月日_如何将这种格式的日期(2010年7月13日星期二00:00:00 CEST)转换为Java日期(字符串来自alfresco属性)...
- python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)...
热门文章
- Java里用Frame框架写流星雨
- 老男孩之《生日快乐》
- html css使用特殊自定义字体避免侵权
- 基于GIS的三维智慧警务系统
- 拯救期末!大四留学生发“论文机器人”,替你读文献给方向调格式,已被ACL2019收录
- 使用python embedded distribution
- 2021-12-23 714. 买卖股票的时机含手续费(动态规划)
- [BBC纪录片][2009][自然界最惊异的事件][Nature's.Most.Amazing.Events][中英字幕][蓝光720P高清][全6集][17.77GB]
- 如何破“万事开头难”?试试这三招
- 苹果快捷键怎么调出来_iPad常用快捷键