android判断银行卡号格式不正确的是什么意思,android银行卡号验证算法详解
現行 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银行卡号验证算法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: debian gnu linux8,De
- 下一篇: android+webview+打不开,