android银行卡号验证算法详解
2018-09-06 11:52
771 查看
现行 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关于银行卡号的验证算法
- 使用javascript实现银行卡号的Luhn校验或验证算法
- Android luhn算法 银行卡号校验
- javascript实现银行卡号的Luhn验证或校验算法-简单易懂
- 银行卡号验证js(Luhn算法)
- Android 身份证、手机号、邮箱、银行卡号验证(正则表达式)
- 正则表达式验证手机号 身份证号 银行卡号 姓名输入
- Android-->自定义模版EditText(多用于手机号码,银行卡号等输入)
- Android 数据加密-base64编码算法详解
- Android签名机制之---签名验证过程详解
- 银行卡号和身份证号的验证
- 人脸验证算法Joint Bayesian详解及实现(Python版)
- iOS开发正则表达式,验证是否是邮箱,手机号,银行卡号,URL等等
- 银行卡号算法
- 银行卡号验证
- 图铭Android平台银行卡号识别系统
- js jquery验证银行卡号信息正则学习
- Java Android 根据银行卡号判断银行名称
- 信用卡卡号验证算法
- Android实现银行卡号扫描识别功能