现行 16 位银联卡现行卡号开头 6 位是 622126~622925 之间的,7 到 15 位是银行自定义的, 可能是发卡分行,发卡网点,发卡序号,第 16 位是校验码。

16 位卡号校验位采用 Luhm 校验方法计算:

1、将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2

2、将奇位乘积的个十位全部相加,再加上所有偶数位上的数字

3、将加法和加上校验位能被 10 整除。

public class CheckIdCard {

/**

* 校验银行卡卡号

*

* @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');

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程圈。

android判断银行卡号格式不正确的是什么意思,android银行卡号验证算法详解相关推荐

  1. 判断字符串格式_Python基础教程,第四讲,字符串详解

    本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...

  2. Android 判断手机号格式是否正确

    第一种:通过正则直接判断 public static boolean isPhone(String str) {String regex = "^(1)\\d{10}$";//正则 ...

  3. php 表单校验函数库(判断email格式是否正确、http地址是否合法有效、手机号码是否合法)...

    /*** 表单校验函数库*//*** 判断email格式是否正确* @param $email*/ function is_email($email) {return strlen($email) & ...

  4. 输入一个QQ邮箱或者网易邮箱,判断其格式是否正确 要求:长度不能超过15,@前面不能用字母 正确格式2156636@qq.com

    package com.coding.syudy05; /*** 输入一个QQ邮箱或者网易邮箱,判断其格式是否正确* 要求:长度不能超过15,@前面不能用字母* 正确格式2156636@qq.com* ...

  5. Java判断日期格式是否正确

    Java判断日期格式是否正确 Java中有一个能判断日期格式是否正确的方法SimpleDateFormat.setLenient(boolean lenient).该方法的默认值为true,会将错误的 ...

  6. JAVA判断身份证格式是否正确

    /*** 判断身份证格式是否正确* @param idNum 身份证* @return 响应数据*/public static boolean vId(String idNum) {return vI ...

  7. ios利用正则表达式判断手机号码格式是否正确

    //判断手机号码格式是否正确 + (BOOL)valiMobile:(NSString *)mobile { mobile = [mobile stringByReplacingOccurrences ...

  8. java正则判断日期格式_Java中用正则表达式判断日期格式是否正确

    1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...

  9. 判断邮箱 格式是否正确

    /练习:判断邮箱格式是否正确 //1.有且只能有一个@ contains @ indexof @=lastindexof //2.不能以@开头 indexof != 0 //3.@之后至少有一个. / ...

最新文章

  1. 删除 win10 资源 默认 音乐 视频 文件夹
  2. 如何优化才能赢得搜索引擎“欢心”,提升抓取量?
  3. Android Studio-目录结构
  4. 【数据竞赛】十组不同类型的组合特征!
  5. HR 的那些黑话大全,太扎心了!(漫画)
  6. (转)非极大抑制(Non-Maximum Suppression)
  7. mysq5.7 主主同步
  8. 【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析
  9. 基于python的文件加密传输_基于python实现文件加密功能
  10. 微信iOS多设备多字体适配方案总结
  11. MetaException(message:Hive Schema version 2.1.0 does not match metastore‘s schema version 1.2.0 Meta
  12. Paradigm 已对 NFT 艺术品铸造和收藏协议 ZORA 进行投资
  13. DB2之CLOB对象用法
  14. dubbo这样的RPC接口与HTTP接口相比,有什么优势,以及HTTP请求中的三次握手
  15. 你真的了解 MySQL 数据库的运行状况吗?
  16. Asp.net自定义控件开发任我行(4)-ViewState保存控件状态
  17. 我们为什么不画高保真原型图
  18. Docker容器 Dead 状态分析
  19. 4章Servlet技术:http头查看+Serverlet入门
  20. JavaScript基础——滚动事件、加载事件、三大家族

热门文章

  1. 新款苹果电脑_苹果发布新款MacBookAir 搭载M1芯片7999起
  2. mysql 5.7.13安装_安装MySQL 5.7.13
  3. linux 内核驱动的poll,嵌入式Linux驱动开发(五)——poll机制原理以及驱动实现...
  4. android后台时不显示,Android后台下载问题
  5. 编译器构造 c语言描,编译器构造C语言描述
  6. mysql 账户管理_Mysql账户管理_MySQL
  7. movsw 汇编_[转]汇编语言:MOVSB,MOVSW,MOVSD
  8. svm 支持向量机 回归 预测_机器学习:简单理解支持向量机SVM
  9. java 输出数据类型_输入输出和java数据类型
  10. 系统接口对接的进度工作应该谁来干_项目的交付进度总是延迟,项目经理找了很久才发现是这4类原因...