现行 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');}
}

一个关于银行卡号规则的问题,根据规则进行银行卡的验证相关推荐

  1. Java黑皮书课后题第3章:**3.15(游戏:彩票)修改程序清单3-8,产生三位整数的彩票。程序提示用户输入一个三位整数,然后依照规则判定用户是否赢得奖金

    **3.15(游戏:彩票)修改程序清单3-8,产生三位整数的彩票.程序提示用户输入一个三位整数,然后依照规则判定用户是否赢得奖金 题目 题目概述 破题 代码 题目 题目概述 **3.15(游戏:彩票) ...

  2. 规则引擎选型及应用 邴越 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 规则引擎 摘要: 规则引擎具体执行 ...

  3. php api 无符号整数基数为16的整数参数的字符串表示形式,[1.12]-参数规则:接口参数规则配置 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...

    "播下一种思想,收获一种行为:播下一种行为,收获一种习惯:播下一种习惯,收获一种性格:播下一种性格,收获一种命运." --<成君忆:水煮三国> 1.12.1 参数解析 ...

  4. 字符串匹配算法(二):BM(BoyerMoore)算法、坏字符规则,好后缀规则

    文章目录 BM算法 坏字符规则 好后缀规则 完整代码 BM算法 BM算法的全程叫做Boyer-Moore,是工程上最常用且最高效的字符串匹配算法,有实验统计,它的性能是著名的KMP 算法的 3 到 4 ...

  5. linix防火墙设置之顺序设置问题 -- 解决防火墙规则顺序和插入规则到指定序号的问题...

    转载于百度经验:https://jingyan.baidu.com/article/ae97a646ce58c2bbfd461d90.html 无论是硬件防火墙还是软件防火墙都会有一个规则序列的问题, ...

  6. 对makefile中:单冒号普通规则和::双冒号规则的理解 -转

    原文地址:对makefile中:单冒号普通规则和::双冒号规则的理解 作者:gliethttp luther: /gliethttp/a.c /gliethttp/b.c /gliethttp2/c. ...

  7. PHP可视化告警规则引擎,开源可视化规则引擎 决策引擎与规则引擎有什么区别?...

    如何部署JBoss Drools的可视化规则设计工具包 JBoss Drools的可视化规则设计工具包在Drools 4.0的时候叫drools-jbrms. drools-jbrms需要JDK1.5 ...

  8. 规则引擎 Drools:规则引擎概述

    什么是规则引擎 规则引擎,全称为 业务规则管理系统,英文名为BRMS(即Business Rule Management System).规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用 ...

  9. python自动生成采集规则_快速制作规则及获取规则提取器API

    1. 引言 前面文章的测试案例都用到了集搜客Gooseeker提供的规则提取器,在网页抓取工作中,调试正则表达式或者XPath都是特别繁琐的,耗时耗力,工作枯燥,如果有一个工具可以快速生成规则,而且可 ...

  10. python自动生成采集规则_快速制作规则及获取规则提取器AP

    一. 引言 之前文章所用的例子中的规则都是固定的,如何自定义规则再结合提取器提取我们想要的网页内容呢?对于程序员来说,理想的目标是掌握一个通用的爬虫框架,每增加一个新目标网站就要跟着改代码,这显然不是 ...

最新文章

  1. 9型转x型 cobol_【科研模型100例32】A型/X型分子筛
  2. python语言怎么用-这些小游戏是怎么用Python语言制作出来的……
  3. python(1) - 数据类型和变量
  4. PWM信号作用示例——调节台灯亮度
  5. 如何给女朋友解释什么是撞库、脱库和洗库?
  6. 完美解决header,footer等HTML5标签在IE(IE6/IE7/IE8)无效的方法
  7. Uber “杀人”事件
  8. android程序数据迁移sd,Android将项目中的数据库复制到SD
  9. 极简代码(七)—— SNR
  10. 利用PPT表格对图片进行矩形分割
  11. 浅析EL表达式注入漏洞
  12. 开发一个APP的详细流程有什么?
  13. 47.0.概率论与数理统计-两个正态总体均值差的置信区间
  14. linux基础-命令
  15. Photoshop设计精讲精练笔记(一)
  16. mysql 自动添加创建时间、更新时间
  17. uoj#311 【UNR #2】积劳成疾
  18. 【ACF学习】ACF安装、训练及检测初探
  19. 局域网内,如何使用命令行关闭别人的电脑
  20. 【BX学习之常用网址】 开发常用网址

热门文章

  1. 在html页面用js方法,在HTML中使用JS方法总结
  2. /usr/bin/python: No module named pip
  3. IPV4 地址不够如何解决
  4. 南京python基础教程_南京Python课程价格
  5. 天锐绿盾终端安全管理系统
  6. java 微信时间戳转换工具,微信小程序时间戳的转换及调用
  7. cumulative match score
  8. *IT axios:足迹第八十步:vue与路由
  9. Opencv cvCircle函数
  10. 计算机写给未来自己的一段话,写给未来的自己一段话