银联付款用途(NUSAGE)字段根据银联规则增加校验

This commit is contained in:
zhanglei 2021-12-24 09:32:30 +08:00
parent 936ad68197
commit 04f361c45c

View File

@ -75,7 +75,7 @@ public class CmbToPayController extends BaseFlowStartAction {
JSONObject jsonObj = JSONObject.fromObject(map);
return jsonObj.toString();
}*/
List<String> contract_id_list = java.util.Arrays.asList(contract_ids.split("@"));
List<String> contract_id_list = Arrays.asList(contract_ids.split("@"));
if(contract_id_list==null || contract_id_list.size()<=0) {
map.put("code", "1") ;
map.put("msg", "尚未选择合同,请检查") ;
@ -352,8 +352,19 @@ public class CmbToPayController extends BaseFlowStartAction {
String BNKFLG = checkCMB(BANK_NAME);
//NUSAGE = "客户["+CRTACC+"]发起申请";
String BUSNAR = "[实际付款][客户:"+CRTACC+"][支付金额:"+TRSAMT+"]";
/*
*银企直连此字符串的规则
* 0.此字段在银企直连中最大为62
* 1.字符串长度为N那么最多可输入汉字数为N-2/2
* 2.如果中文中夹杂英文字符或数字那么要做分段处理每段汉字长度都要+2中国TCL集团 (2*2+2)+(3)+(2*2+2)=15
* */
//cusLength:customerName最大长度以银企直连算法
int cusLength = 62-(2+contractNoZC.length()+contractNo.length());
customerName = getCMBlength(customerName,cusLength);
NUSAGE = customerName+"-"+contractNoZC+"-"+contractNo;
pay_detail = new SDKDcPayReqxVO();
pay_detail.setYURREF(YURREF);
pay_detail.setDBTACC(DBTACC);
@ -564,4 +575,40 @@ public class CmbToPayController extends BaseFlowStartAction {
return "N";
}
}
private String getCMBlength(String str,int length){
int count = 0;
boolean ChineseFlag = false;
char[] c = str.toCharArray();
for(int i = 0; i < c.length; i ++){
//二进制超过8位则为汉字
String len = Integer.toBinaryString(c[i]);
if(ChineseFlag){
if(len.length() > 8){
count=count+2;
ChineseFlag = true;
}else{
count ++;
ChineseFlag = false;
}
}else{
if(len.length() > 8){
count=count+2+2;
ChineseFlag = true;
}else{
count ++;
ChineseFlag = false;
}
}
if(count==length){
str = str.substring(0,i+1);
break;
}else if(count>length){
str = str.substring(0,i);
break;
}
}
return str;
}
}