转自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 整除。 
------------------------------------------

  
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

---------------------------------------------

如果其中一位数字换掉的话,直接导致最后校验位错误。

[java] view plaincopy
  1. public class Test {
  2. public static void main(String[] args) {
  3. String card = "6227007200120897790";
  4. System.out.println("      card: " + card);
  5. System.out.println("check code: " + getBankCardCheckCode(card));
  6. System.out.println("是否为银行卡:"+checkBankCard(card));
  7. }
  8. /**
  9. * 校验银行卡卡号
  10. * @param cardId
  11. * @return
  12. */
  13. public static boolean checkBankCard(String cardId) {
  14. char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));
  15. if(bit == 'N'){
  16. return false;
  17. }
  18. return cardId.charAt(cardId.length() - 1) == bit;
  19. }
  20. /**
  21. * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
  22. * @param nonCheckCodeCardId
  23. * @return
  24. */
  25. public static char getBankCardCheckCode(String nonCheckCodeCardId){
  26. if(nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0
  27. || !nonCheckCodeCardId.matches("\\d+")) {
  28. //如果传的不是数据返回N
  29. return 'N';
  30. }
  31. char[] chs = nonCheckCodeCardId.trim().toCharArray();
  32. int luhmSum = 0;
  33. for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
  34. int k = chs[i] - '0';
  35. if(j % 2 == 0) {
  36. k *= 2;
  37. k = k / 10 + k % 10;
  38. }
  39. luhmSum += k;
  40. }
  41. return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0');
  42. }
  43. }

java实现银行卡卡号 Luhm 校验算法相关推荐

  1. 前端JS校验银行卡卡号和身份证号码(附ES6版方法)

    1.银行卡卡号校验方法. function luhnCheck(bankno) { var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一 ...

  2. 银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...

    编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62" ...

  3. 基于Python的Opencv 自动识别银行卡卡号系统

    一. 摘要 此应用功能为自动识别并获取银行卡卡号,通过导入需要识别的银行卡图片,以及跟银行卡上卡号的数字相一致的数字模型,则可以成功实现识别并获取银行卡卡号的功能.如果你对此感兴趣的话,下面将会详细介 ...

  4. Python+OpenCV 识别银行卡卡号

    Python+OpenCV 识别银行卡卡号 今天尝试一下用python+OpenCV,使用模板匹配的方式做个简单地识别银行卡卡号(大部分参考网上的,自己改了一部分,代码写的有点不太好,但是思路很清晰, ...

  5. 银行卡卡号格式规范 每隔4为一个空格

    最近涉及到一个绑定银行卡的需求,需要格式化银行卡卡号.即:每隔4为做一个空格. 一个很简单的功能,大牛请自动忽略... 做个笔记O(∩_∩)O哈! bankCardNoEditTxt.addTextC ...

  6. 银行卡三元素检测 根据姓名+身份证号+银行卡卡号验证信息是否匹配

    银行卡检测api,根据姓名+身份证号+银行卡卡号验证信息是否匹配. 接口名称:银行卡检测api 接口平台:聚合数据 接口地址:http://v.juhe.cn/verifybankcard3/quer ...

  7. 学习Opencv+Python之银行卡卡号识别

    学习Opencv+Python之银行卡卡号识别 思路: 获取模板轮廓 获取模板中每个数字的轮廓 获取银行卡卡号轮廓 分别提取卡号中的每个数字的轮廓 对比识别 代码: # 导入工具包 from imut ...

  8. appium使用sendkeys输入银行卡卡号(每4个数字自动空一格)总是输入不正确的解决办法

    appium使用sendkeys输入银行卡卡号(每4个数字自动空一格)总是输入不正确的解决办法 方法一: public static void inputComsumeInfo(WebElement ...

  9. android根据银行卡卡号前6位获得归属银行

    根据银行卡号判断是哪个银行的卡,依据是银行卡号的前6位数,称之为bin号. 我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表.通过二分查找的方法,找到bin号在有序表的位置,然后读出银行 ...

  10. 根据银行卡卡号判断银行

    根据银行卡号判断是哪个银行的卡,依据是银行卡号的前6位数,称之为bin号. 我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表.通过二分查找的方法,找到bin号在有序表的位置,然后读出银行 ...

最新文章

  1. SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值
  2. Toast 自定义位置和带图
  3. LDPC译码算法代码概述
  4. 代谢组学在疾病诊断如何应用?
  5. 第10课:动手实战基于 CNN 的电影推荐系统
  6. android常用开源库分享
  7. ajax传递timestamp,解决ajax请求自动增加时间戳问题
  8. android中修饰void的类型,方法添加Android中
  9. android settings的八个问题
  10. 为什么说bagging是减少方差,而boosting是减少偏差
  11. Node.js 实现远程桌面监控
  12. 数值分析的matlab实验总结,数值分析及其MATLAB实验(第2版)
  13. 漫威 DC 英雄综合实力排位,这人秒杀灭霸
  14. about cisco DNA
  15. Maxwell终极释放 单芯王者Titan X首测
  16. 算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)
  17. 2018年11月25日ICPC焦作站参赛总结
  18. 两种方式读取Json文件 数据
  19. Python图像处理丨详解图像去雾处理方法
  20. 算法评价指标——TAR,FAR,FRR,ERR

热门文章

  1. 内网访问高德地图nginx代理
  2. 实现京东商城地址选择效果(效果还挺一致的)
  3. C++实现鼠标左键点击关闭控制台
  4. 秀动app抢票脚本_GitHub标星2.5万的quot;Python抢票教程”!
  5. Dism++更新扫描时提示“系统找不到指定文件”
  6. Django setting ALLOWED_HOSTS
  7. 漫反射及具体光源的照明
  8. 谷歌统计插件ga的使用
  9. 招商银行笔试题之员工考勤记录
  10. [OpenAirInterface实战-16] :OAI 软件无线电USRP X300/X310硬件详解