java实现银行卡卡号 Luhm 校验算法
转自http://www.oschina.net/code/snippet_86738_3128
效验是否为银行卡,用于验证
现行 16 位银联卡现行卡号开头 6 位是 622126~622925 之间的,7 到 15 位是银行自定义的,
可能是发卡分行,发卡网点,发卡序号,第 16 位是校验码。
16 位卡号校验位采用 Luhm 校验方法计算:
1,将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2
2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
3,将加法和加上校验位能被 10 整除。
------------------------------------------
如果其中一位数字换掉的话,直接导致最后校验位错误。
- public class Test {
- public static void main(String[] args) {
- String card = "6227007200120897790";
- System.out.println(" card: " + card);
- System.out.println("check code: " + getBankCardCheckCode(card));
- System.out.println("是否为银行卡:"+checkBankCard(card));
- }
- /**
- * 校验银行卡卡号
- * @param cardId
- * @return
- */
- public static boolean checkBankCard(String cardId) {
- char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));
- if(bit == 'N'){
- return false;
- }
- 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+")) {
- //如果传的不是数据返回N
- return 'N';
- }
- 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实现银行卡卡号 Luhm 校验算法相关推荐
- 前端JS校验银行卡卡号和身份证号码(附ES6版方法)
1.银行卡卡号校验方法. function luhnCheck(bankno) { var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一 ...
- 银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...
编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62" ...
- 基于Python的Opencv 自动识别银行卡卡号系统
一. 摘要 此应用功能为自动识别并获取银行卡卡号,通过导入需要识别的银行卡图片,以及跟银行卡上卡号的数字相一致的数字模型,则可以成功实现识别并获取银行卡卡号的功能.如果你对此感兴趣的话,下面将会详细介 ...
- Python+OpenCV 识别银行卡卡号
Python+OpenCV 识别银行卡卡号 今天尝试一下用python+OpenCV,使用模板匹配的方式做个简单地识别银行卡卡号(大部分参考网上的,自己改了一部分,代码写的有点不太好,但是思路很清晰, ...
- 银行卡卡号格式规范 每隔4为一个空格
最近涉及到一个绑定银行卡的需求,需要格式化银行卡卡号.即:每隔4为做一个空格. 一个很简单的功能,大牛请自动忽略... 做个笔记O(∩_∩)O哈! bankCardNoEditTxt.addTextC ...
- 银行卡三元素检测 根据姓名+身份证号+银行卡卡号验证信息是否匹配
银行卡检测api,根据姓名+身份证号+银行卡卡号验证信息是否匹配. 接口名称:银行卡检测api 接口平台:聚合数据 接口地址:http://v.juhe.cn/verifybankcard3/quer ...
- 学习Opencv+Python之银行卡卡号识别
学习Opencv+Python之银行卡卡号识别 思路: 获取模板轮廓 获取模板中每个数字的轮廓 获取银行卡卡号轮廓 分别提取卡号中的每个数字的轮廓 对比识别 代码: # 导入工具包 from imut ...
- appium使用sendkeys输入银行卡卡号(每4个数字自动空一格)总是输入不正确的解决办法
appium使用sendkeys输入银行卡卡号(每4个数字自动空一格)总是输入不正确的解决办法 方法一: public static void inputComsumeInfo(WebElement ...
- android根据银行卡卡号前6位获得归属银行
根据银行卡号判断是哪个银行的卡,依据是银行卡号的前6位数,称之为bin号. 我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表.通过二分查找的方法,找到bin号在有序表的位置,然后读出银行 ...
- 根据银行卡卡号判断银行
根据银行卡号判断是哪个银行的卡,依据是银行卡号的前6位数,称之为bin号. 我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表.通过二分查找的方法,找到bin号在有序表的位置,然后读出银行 ...
最新文章
- SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值
- Toast 自定义位置和带图
- LDPC译码算法代码概述
- 代谢组学在疾病诊断如何应用?
- 第10课:动手实战基于 CNN 的电影推荐系统
- android常用开源库分享
- ajax传递timestamp,解决ajax请求自动增加时间戳问题
- android中修饰void的类型,方法添加Android中
- android settings的八个问题
- 为什么说bagging是减少方差,而boosting是减少偏差
- Node.js 实现远程桌面监控
- 数值分析的matlab实验总结,数值分析及其MATLAB实验(第2版)
- 漫威 DC 英雄综合实力排位,这人秒杀灭霸
- about cisco DNA
- Maxwell终极释放 单芯王者Titan X首测
- 算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)
- 2018年11月25日ICPC焦作站参赛总结
- 两种方式读取Json文件 数据
- Python图像处理丨详解图像去雾处理方法
- 算法评价指标——TAR,FAR,FRR,ERR
热门文章
- 内网访问高德地图nginx代理
- 实现京东商城地址选择效果(效果还挺一致的)
- C++实现鼠标左键点击关闭控制台
- 秀动app抢票脚本_GitHub标星2.5万的quot;Python抢票教程”!
- Dism++更新扫描时提示“系统找不到指定文件”
- Django setting ALLOWED_HOSTS
- 漫反射及具体光源的照明
- 谷歌统计插件ga的使用
- 招商银行笔试题之员工考勤记录
- [OpenAirInterface实战-16] :OAI 软件无线电USRP X300/X310硬件详解