銷帳編號 銷編 銷帳編號檢核碼
銀行電子通路,最常在前端就希望可以做Account Check
以防止客戶利用滲透隨便自己亂打銷帳編號,
萬一主機也沒有擋掉,那就好笑了...
不過正常這當然還是以主機為主,前端Servlet為輔.....
util如下
public class PageUtil {
/**
* 16 Digits Account Check!!! (Rule from iBancs)
* @param account 16 digits
* @param amount less than 7 digits
* @param rule 21 digits
* @return result
*/
public static boolean chk16digitsAccount(String account, String amount, String rule) {
boolean result = false;
amount = StringUtils.formatWithZero(amount, 7);
int[] intActAmt = new int[(account.length()-2) + amount.length()];
for(int i=0; i < intActAmt.length; i++){
if(i < account.length()-2)
intActAmt[i] = account.charAt(i)-'0';
else
intActAmt[i] = amount.charAt(i-(account.length()-2))-'0';
}
int[] intRul = new int[rule.length()];
for(int i=0; i < rule.length(); i++){
intRul[i] = rule.charAt(i)-'0';
}
int sum = 0;
String actChkCode = null;
for(int i=0; i < intActAmt.length; i++){
sum += intActAmt[i]*intRul[i];
if(i==13)
actChkCode = String.valueOf((10-(sum%10))%10);
}
String amtChkCode = String.valueOf((10-(sum%10))%10);
if (actChkCode.equals(account.substring(14,15)) && amtChkCode.equals(account.substring(15,16)))
result = true;
return result;
}
/*
public static void main(String[] args){
System.out.println(chk16digitsAccount("9825100213001277","6200","234567891234567891234"));
}
*/
}
這邊主要是做16碼帳號檢核
其中要注意的就是
intActAmt[i] = account.charAt(i)-'0';
這邊使用charAt(i) 會直接抓出string 於i 的位置之ascii編碼,因此要減去 ' 0 ' (的 acsii編碼),
才會是我們所要的數字,不然在轉int array(int[])時,會塞入acsii編碼對應數字,而不是我們要的int type