1. /*
  2. 校验过程:
  3. 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
  4. 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,将个位十位数字相加,即将其减去9),再求和。
  5. 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
  6. */
  7. /**
  8. * 校验银行卡卡号
  9. */
  10. public static boolean checkBankCard(String bankCard) {
  11. if(bankCard.length() < 15 || bankCard.length() > 19) {
  12. return false;
  13. }
  14. char bit = getBankCardCheckCode(bankCard.substring(0, bankCard.length() - 1));
  15. if(bit == 'N'){
  16. return false;
  17. }
  18. return bankCard.charAt(bankCard.length() - 1) == bit;
  19. }
  20. /**
  21. * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
  22. * @param nonCheckCodeBankCard
  23. * @return
  24. */
  25. public static char getBankCardCheckCode(String nonCheckCodeBankCard){
  26. if(nonCheckCodeBankCard == null || nonCheckCodeBankCard.trim().length() == 0
  27. || !nonCheckCodeBankCard.matches("\\d+")) {
  28. //如果传的不是数据返回N
  29. return 'N';
  30. }
  31. char[] chs = nonCheckCodeBankCard.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. }

java检验银行卡号的更多相关文章

  1. Java 根据银行卡号获取银行名称以及图标

    转 https://blog.csdn.net/N_007/article/details/78835526 参考 CNBankCard 中国各大银行卡号查询 一.支付宝接口获取名称 根据 卡号 获取 ...

  2. java校验银行卡号

    public class CheckBankCard { /* 校验过程: 1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. 2.从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如 ...

  3. eclipse scala语法用java检验 报错问题

    传送门 https://stackoverflow.com/questions/8522149/eclipse-not-recognizing-scala-code 还是 直接用eclipse的 sc ...

  4. jquery.ajax

    var params = {};//定义一个数组 var USERNAME= $("#USERNAME").val(); params["USERNAME"]= ...

  5. Monkey压力测试操作步骤说明

    一.需配置java环境和android环境 JDK安装包:链接:https://pan.baidu.com/s/1SlnBOS0f3m2wVpEZBPfmag                      ...

  6. 1.0 Hadoop的介绍、搭建、环境

    HADOOP背景介绍 1.1 Hadoop产生背景 HADOOP最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能,但随着抓取网页数量的增加,遇到了 ...

  7. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  8. Java中的数是用补码表示的检验

    一.基本介绍(关于下列五个定义来自http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html#!comments,谢原 ...

  9. 银行卡号Luhm校验Java实现代码

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class CheckBankNumber { //Des ...

随机推荐

  1. (转)Elasticsearch search-guard 插件部署

    我之前写了ELK+shield的部署文档,由于shield是商业收费的,很多人都推崇开源项目search-guard来做ELK的安全组件,准确来说是elasticsearch的安全组件.search- ...

  2. 利用SSH secure Shell实现windows与linux之间传输文件

    在windows下安装SSH secure Shell.默认安装后有两个快捷方式. linux下需要安装openssh-server utuntu默认安装了opens是-client,所以不需要安装, ...

  3. BZOJ 2118 墨墨的等式(最短路)

    很开拓眼界的题.. 题意:给出一个n元一次方程形如a1*x1+a2*x2...+an*xn=B,求满足解集为非负整数的B值在[L,R]范围内的种数.(n<=12,ai<=5e5,L< ...

  4. 获取网站图标Icon

    通常情况下,做网站的都会给自己的网站添加一个Icon,浏览器上一长排的标签页,用Icon来区分就显得更加醒目.现在想找一个没有Icon的网站并不好找,可见没有Icon的网站是多么的业余啊." ...

  5. 【BZOJ4889】不勤劳的图书管理员(树套树)

    [BZOJ4889]不勤劳的图书管理员(树套树) 题面 又是权限题,烦死了 洛谷真好 题解 分开考虑每一次交换产生的贡献. 假设交换\((x,y)\) 检查\(x\)与\(y\)对于区间\([x+1, ...

  6. 【BZOJ1923】外星千足虫(线性基)

    [BZOJ1923]外星千足虫(线性基) 题面 BZOJ 洛谷 Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用"点足 ...

  7. SCWS中文分词,词典词性标注详解

    SCWS中文分词词典条目多达26万条之巨,在整理的时候已经把很多明显不对的标注或词条清理了 ---- 附北大词性标注版本 ----Ag 形语素 形容词性语素.形容词代码为a,语素代码g前面置以A. a ...

  8. HDU.1556 Color the ball (线段树 区间更新 单点查询)

    HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...

  9. tmp_table_size ---> 优化 MYSQL 经验总结

    数据库连接突然增多到1000的问题 查看了一下,未有LOCK操作语句. 但是明显有好多copy to tmp table的SQL语句,这条语读的时间比较长,且这个表会被加读锁,相关表的update语句 ...

  10. “Spring.Context.Support.ContextRegistry”的类型初始值设定项引发异常。-解决方法

    注释掉web/app.config中的: