一个关于银行卡号规则的问题,根据规则进行银行卡的验证
现行 16 位银联卡现行卡号开头 6 位是 622126~622925 之间的,7 到 15 位是银行自定义的,
可能是发卡分行,发卡网点,发卡序号,第 16 位是校验码。
16 位卡号校验位采用 Luhm 校验方法计算:
1,将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2
2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
3,将加法和加上校验位能被 10 整除。
比如卡号:
6 2 2 5 8 8 1 4 1 4 2 0 7 4 3
* 2 2 2 2 2 2 2 2
--------------------------------------------------12 2 4 5 16 8 2 4 2 4 4 14 4 6将上面的数字加和:1+2+2+4+5+1+6+8+2+4+2+4+4+1+4+4+6 = 60由于 60 加上 0 才能被 10 整除,所以校验位为 0因此该卡号为 6225 8814 1420 7430
如果其中一位数字换掉的话,直接导致最后校验位错误。
写了个程序进行计算:
public class Test5 {public static void main(String[] args) {String card = "622588141420743";System.out.println(" card: " + card);System.out.println("check code: " + getBankCardCheckCode(card));System.out.println(" card id: " + card + getBankCardCheckCode(card));}/*** 校验银行卡卡号* @param cardId* @return*/public static boolean checkBankCard(String cardId) {char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));return cardId.charAt(cardId.length() - 1) == bit; }/*** 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位* @param nonCheckCodeCardId* @return*/public static char getBankCardCheckCode(String nonCheckCodeCardId) {if(nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0|| !nonCheckCodeCardId.matches("//d+")) {throw new IllegalArgumentException("Bank card code must be number!");}char[] chs = nonCheckCodeCardId.trim().toCharArray();int luhmSum = 0;for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) {int k = chs[i] - '0';if(j % 2 == 0) {k *= 2;k = k / 10 + k % 10;}luhmSum += k; }return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0');}
}
一个关于银行卡号规则的问题,根据规则进行银行卡的验证相关推荐
- Java黑皮书课后题第3章:**3.15(游戏:彩票)修改程序清单3-8,产生三位整数的彩票。程序提示用户输入一个三位整数,然后依照规则判定用户是否赢得奖金
**3.15(游戏:彩票)修改程序清单3-8,产生三位整数的彩票.程序提示用户输入一个三位整数,然后依照规则判定用户是否赢得奖金 题目 题目概述 破题 代码 题目 题目概述 **3.15(游戏:彩票) ...
- 规则引擎选型及应用 邴越 2017-04-27 16:31:17 浏览614 评论0 HTTPS 模块 配置 string exception void input 规则引擎 摘要: 规则引擎具体执
规则引擎选型及应用 邴越 2017-04-27 16:31:17 浏览614 评论0 HTTPS 模块 配置 string exception void input 规则引擎 摘要: 规则引擎具体执行 ...
- php api 无符号整数基数为16的整数参数的字符串表示形式,[1.12]-参数规则:接口参数规则配置 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
"播下一种思想,收获一种行为:播下一种行为,收获一种习惯:播下一种习惯,收获一种性格:播下一种性格,收获一种命运." --<成君忆:水煮三国> 1.12.1 参数解析 ...
- 字符串匹配算法(二):BM(BoyerMoore)算法、坏字符规则,好后缀规则
文章目录 BM算法 坏字符规则 好后缀规则 完整代码 BM算法 BM算法的全程叫做Boyer-Moore,是工程上最常用且最高效的字符串匹配算法,有实验统计,它的性能是著名的KMP 算法的 3 到 4 ...
- linix防火墙设置之顺序设置问题 -- 解决防火墙规则顺序和插入规则到指定序号的问题...
转载于百度经验:https://jingyan.baidu.com/article/ae97a646ce58c2bbfd461d90.html 无论是硬件防火墙还是软件防火墙都会有一个规则序列的问题, ...
- 对makefile中:单冒号普通规则和::双冒号规则的理解 -转
原文地址:对makefile中:单冒号普通规则和::双冒号规则的理解 作者:gliethttp luther: /gliethttp/a.c /gliethttp/b.c /gliethttp2/c. ...
- PHP可视化告警规则引擎,开源可视化规则引擎 决策引擎与规则引擎有什么区别?...
如何部署JBoss Drools的可视化规则设计工具包 JBoss Drools的可视化规则设计工具包在Drools 4.0的时候叫drools-jbrms. drools-jbrms需要JDK1.5 ...
- 规则引擎 Drools:规则引擎概述
什么是规则引擎 规则引擎,全称为 业务规则管理系统,英文名为BRMS(即Business Rule Management System).规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用 ...
- python自动生成采集规则_快速制作规则及获取规则提取器API
1. 引言 前面文章的测试案例都用到了集搜客Gooseeker提供的规则提取器,在网页抓取工作中,调试正则表达式或者XPath都是特别繁琐的,耗时耗力,工作枯燥,如果有一个工具可以快速生成规则,而且可 ...
- python自动生成采集规则_快速制作规则及获取规则提取器AP
一. 引言 之前文章所用的例子中的规则都是固定的,如何自定义规则再结合提取器提取我们想要的网页内容呢?对于程序员来说,理想的目标是掌握一个通用的爬虫框架,每增加一个新目标网站就要跟着改代码,这显然不是 ...
最新文章
- 9型转x型 cobol_【科研模型100例32】A型/X型分子筛
- python语言怎么用-这些小游戏是怎么用Python语言制作出来的……
- python(1) - 数据类型和变量
- PWM信号作用示例——调节台灯亮度
- 如何给女朋友解释什么是撞库、脱库和洗库?
- 完美解决header,footer等HTML5标签在IE(IE6/IE7/IE8)无效的方法
- Uber “杀人”事件
- android程序数据迁移sd,Android将项目中的数据库复制到SD
- 极简代码(七)—— SNR
- 利用PPT表格对图片进行矩形分割
- 浅析EL表达式注入漏洞
- 开发一个APP的详细流程有什么?
- 47.0.概率论与数理统计-两个正态总体均值差的置信区间
- linux基础-命令
- Photoshop设计精讲精练笔记(一)
- mysql 自动添加创建时间、更新时间
- uoj#311 【UNR #2】积劳成疾
- 【ACF学习】ACF安装、训练及检测初探
- 局域网内,如何使用命令行关闭别人的电脑
- 【BX学习之常用网址】 开发常用网址