diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
index e1cbc30..79daf31 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
@@ -14,6 +14,8 @@
   public static final String BANKCARD_PAYREFUND_TRANSCODE = "BC5513";
   public static final String BANKCARD_QUERYRESULT_TRANSCODE = "BC5514";
   public static final String BANKCARD_CHKFILE_TRANSCODE = "BC5515";
+  public static final String BANKCARD_CHKMAKESURE_TRANSCODE = "BC5516";
+  public static final String BANKCARD_BANKCARDLOSS_TRANSCODE = "BC5517";
 
   public static final String DLPAY_CATEGORIE = "C001"; //消费类别
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/QrCodeTotpUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/QrCodeTotpUtil.java
index fa51bb3..6cc621c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/QrCodeTotpUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/QrCodeTotpUtil.java
@@ -2,7 +2,7 @@
 
 public class QrCodeTotpUtil {
     public static String generateTOTP(String seed){
-        long X = 30;
+        long X = 5;
         long T0 = 0;
         String steps = "0";
         long time = System.currentTimeMillis() / 1000;
@@ -16,7 +16,7 @@
     }
 
     public static String generateTOTP(String seed,String returnDigits){
-        long X = 30;
+        long X = 5;
         long T0 = 0;
         String steps = "0";
         long time = System.currentTimeMillis() / 1000;
@@ -31,7 +31,7 @@
 
     public static boolean verifyCode(String totp, String secret, int offset) {
 
-        String second = "30";
+        String second = "5";
         long T0 = 0;
         String[] keys = new String[offset * 2 + 1];
         long time = System.currentTimeMillis() / 1000;
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
index b601151..526d447 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
@@ -27,6 +27,9 @@
 
     fun getChkfilename(checkdate: String, merchantBankcardno: String?): DlpayResp
 
+    fun makeSureCheckResult(trxdate: String, transcnt: Int, transamt: Long): DlpayResp
+
+    fun bankCardLoss(bankcardno: String, username: String, idtype: String, idno: String): DlpayResp
 }
 
 @Component("citizenCardAgent")
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
index aa5c0ae..bc1ecca 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
@@ -393,4 +393,113 @@
         }
     }
 
+    override fun makeSureCheckResult(trxdate: String, transcnt: Int, transamt: Long): DlpayResp {
+        var resp = DlpayResp()
+        val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+        if (!checkCitizencardConfig(config, resp)) {
+            return resp
+        }
+
+        val systime = systemUtilService.sysdatetime
+        val refno = systemUtilService.refno
+        val params = hashMapOf<String, String>()
+        params["transcode"] = YnrccUtil.BANKCARD_CHKMAKESURE_TRANSCODE
+        params["transdate"] = systime.hostdate
+        params["transtime"] = systime.hosttime
+        params["refno"] = refno
+        params["stltrxdate"] = trxdate
+        params["stlamt"] = transamt.toString()
+        params["jnlcount"] = transcnt.toString()
+        params["sign_type"] = "MD5"
+        val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+        params["sign"] = sign
+
+        val postData = MultivaluedMapImpl()
+        params.forEach { (t, u) -> postData.add(t, u) }
+
+        val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/checkmakesure"
+        logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+        try {
+            val client = Client.create()
+            client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+            client.setReadTimeout(YnrccUtil.AGENT_READ_TIMEOUT * 1000)
+            val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
+            return if (200 == respClient.status) {
+                val jsonStr = respClient.getEntity(String::class.java)
+                logger.error("refno=[$refno],trxdate=[$trxdate], url=[$url], return=[$jsonStr]")
+                resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
+                resp
+            } else {
+                resp.code = "99"
+                resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+                logger.error(resp.message)
+                resp
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            resp.code = YnrccUtil.CODE_EXCEPTION
+            resp.message = "请求前置抛出异常"
+            logger.error(resp.message)
+            return resp
+        }
+    }
+
+    override fun bankCardLoss(bankcardno: String, username: String, idtype: String, idno: String): DlpayResp {
+        var resp = DlpayResp()
+        val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+        if (!checkCitizencardConfig(config, resp)) {
+            return resp
+        }
+        val idType = IDTypes.findByValue(idtype)
+        if (idType < 0) {
+            resp.code = YnrccUtil.PARAM_VALUE_ERROR
+            resp.message = "证件类型未识别[$idtype]"
+            logger.error(resp.message)
+            return resp
+        }
+
+        val systime = systemUtilService.sysdatetime
+        val refno = systemUtilService.refno
+        val params = hashMapOf<String, String>()
+        params["transcode"] = YnrccUtil.BANKCARD_BANKCARDLOSS_TRANSCODE
+        params["transdate"] = systime.hostdate
+        params["transtime"] = systime.hosttime
+        params["refno"] = refno
+        params["bankcardno"] = bankcardno
+        params["username"] = username
+        params["idtype"] = idType.toString()
+        params["idno"] = idno
+        params["sign_type"] = "MD5"
+        val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+        params["sign"] = sign
+
+        val postData = MultivaluedMapImpl()
+        params.forEach { (t, u) -> postData.add(t, u) }
+
+        val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/bankcardloss"
+        logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+        try {
+            val client = Client.create()
+            client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+            client.setReadTimeout(YnrccUtil.AGENT_READ_TIMEOUT * 1000)
+            val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
+            return if (200 == respClient.status) {
+                val jsonStr = respClient.getEntity(String::class.java)
+                logger.error("refno=[$refno],bankcardno=[$bankcardno], url=[$url], return=[$jsonStr]")
+                resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
+                resp
+            } else {
+                resp.code = "99"
+                resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+                logger.error(resp.message)
+                resp
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            resp.code = YnrccUtil.CODE_EXCEPTION
+            resp.message = "请求前置抛出异常"
+            logger.error(resp.message)
+            return resp
+        }
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
index 9cc9393..f26dafa 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
@@ -60,7 +60,7 @@
         val qrcode = AesUtil.encryptCFB("$uid:$encdata", rootkey, iv, "AES/CFB/NoPadding")
 
         val key = MD5.encodeByMD5ToURLSafeBase64(qrcode)
-        redisTemplate.opsForValue().set(key,qrcode, Duration.ofMinutes(3))
+        redisTemplate.opsForValue().set(key,qrcode, Duration.ofSeconds(20))
         resp.retcode = 0
         resp.retmsg = key
         return resp
@@ -74,7 +74,7 @@
             val rootkey = systemUtilService.getBusinessValue("aes.cfb.rootkey")
             val iv = systemUtilService.getBusinessValue("aes.cfb.iv")
             val totpoffset = systemUtilService.getBusinessValue("aes.cfb.totp.offset")
-            var offset = 20
+            var offset = 3
             if (NumberUtils.isDigits(totpoffset)) {
                 offset = Integer.valueOf(totpoffset).toInt()
             }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java
index c54c0a1..2f2af64 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java
@@ -19,6 +19,9 @@
   public static final String OPTYPE_PAYREFUND = "payrefund"; //消费退款
   public static final String OPTYPE_QUERYRESULT = "queryresult"; //消费结果查询
   public static final String OPTYPE_CHKDTL = "chkdtl"; //流水对账
+  public static final String OPTYPE_CHK_MAKESURE = "chkmakesure"; //流水对账
+  public static final String OPTYPE_BANKCARD_LOSS = "bankcardloss"; //流水对账
+
 
   public static final String TRANSTYPE_SIGNCARD = "1"; //签约
 
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java
index bc5954f..c1b8ca5 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java
@@ -38,6 +38,10 @@
   private String captcha; //签约验证码
   private String scenario;//消费场景
 
+  private String stltrxdate; //（核心记账日期）不允许为当前营业日期
+  private Long stlamt; //清算金额
+  private Integer jnlcount; //交易流水笔数
+
   /**
    * 市民卡绑定请求XML
    */
@@ -158,6 +162,43 @@
     return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
 
+  /**
+   * 对账确认接口请求报文
+   * */
+  public String getChkMakeSureXml() throws UnsupportedEncodingException {
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(transcode).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<STLTRXDATE>").append(stltrxdate).append("</STLTRXDATE>")
+        .append("<STLAMT>").append(stlamt/100.00).append("</STLAMT>")
+        .append("<JNLCOUNT>").append(jnlcount).append("</JNLCOUNT>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
+  }
+
+  /**
+   * 银行口挂请求报文
+   * */
+  public String getLossBankcardXml()throws UnsupportedEncodingException {
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(transcode).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<BC_NO>").append(bcNo).append("</BC_NO>")
+        .append("<NAME>").append(name).append("</NAME>")
+        .append("<ID_TYPE>").append(idType).append("</ID_TYPE>")
+        .append("<ID_NO>").append(idNo).append("</ID_NO>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
+  }
+
   public String getTransdate() {
     return transdate;
   }
@@ -309,4 +350,28 @@
   public void setScenario(String scenario) {
     this.scenario = scenario;
   }
+
+  public String getStltrxdate() {
+    return stltrxdate;
+  }
+
+  public void setStltrxdate(String stltrxdate) {
+    this.stltrxdate = stltrxdate;
+  }
+
+  public Long getStlamt() {
+    return stlamt;
+  }
+
+  public void setStlamt(Long stlamt) {
+    this.stlamt = stlamt;
+  }
+
+  public Integer getJnlcount() {
+    return jnlcount;
+  }
+
+  public void setJnlcount(Integer jnlcount) {
+    this.jnlcount = jnlcount;
+  }
 }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
index 398cd67..5b34717 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
@@ -524,4 +524,107 @@
     };
     return new ResponseEntity(stream, HttpStatus.OK);
   }
+
+  /**
+   * 对账确认接口BC5516
+   * */
+  @PostMapping("/checkmakesure")
+  public DlpayResp makeCheckdtlSure(@FormParam("transcode") String transcode, @FormParam("transdate") String transdate,
+                                    @FormParam("transtime") String transtime, @FormParam("refno") String refno,
+                                    @FormParam("stltrxdate") String stltrxdate, @FormParam("stlamt") Long stlamt,
+                                    @FormParam("jnlcount") Integer jnlcount, @FormParam("sign_type") String sign_type,
+                                    @FormParam("sign") String sign){
+    DlpayResp resp = new DlpayResp();
+    if (!ynrccParamCheckService.checkChkMakesureParam(transcode, transdate, transtime, refno, stltrxdate, stlamt, jnlcount, sign_type, sign, resp)) {
+      logger.error(resp.errPrint());
+      return resp;
+    }
+
+    Map<String, String> params = new HashMap<>(0);
+    params.put("transcode", transcode);
+    params.put("transdate", transdate);
+    params.put("transtime", transtime);
+    params.put("refno", refno);
+    params.put("stltrxdate", stltrxdate);
+    params.put("stlamt", stlamt.toString());
+    params.put("jnlcount", jnlcount.toString());
+    params.put("sign_type", sign_type);
+    params.put("sign", sign);
+    if (!checkYnrccSign(params, resp)) {
+      return resp;
+    }
+
+    try{
+      DlpayReq req = new DlpayReq();
+      req.setTranscode(transcode);
+      req.setTransdate(transdate);
+      req.setTranstime(transtime);
+      req.setSn(refno);
+      req.setStltrxdate(stltrxdate);
+      req.setStlamt(stlamt);
+      req.setJnlcount(jnlcount);
+      return ynrccApiService.sendToYnrcc(DlpayUtil.OPTYPE_CHK_MAKESURE, req);
+    } catch (BussinessException be) {
+      resp.setCode(ErrorCode.BUSSINESS_ERROR);
+      resp.setMessage(be.getMessage());
+      logger.error(resp.errPrint());
+      return resp;
+    }catch (Exception e){
+      doSystemError(e, resp);
+      return resp;
+    }
+  }
+
+  /**
+   * 口挂接口 BC5517
+   * */
+  @PostMapping("/bankcardloss")
+  public DlpayResp bankcardLoss(@FormParam("transcode") String transcode, @FormParam("transdate") String transdate,
+                                @FormParam("transtime") String transtime, @FormParam("refno") String refno,
+                                @FormParam("bankcardno") String bankcardno, @FormParam("username") String username,
+                                @FormParam("idtype") String idtype, @FormParam("idno") String idno,
+                                @FormParam("sign_type") String sign_type, @FormParam("sign") String sign){
+    DlpayResp resp = new DlpayResp();
+    if (!ynrccParamCheckService.checkLossBankcardParam(transcode, transdate, transtime, refno, bankcardno, username, idtype, idno, sign_type, sign, resp)) {
+      logger.error(resp.errPrint());
+      return resp;
+    }
+
+    Map<String, String> params = new HashMap<>(0);
+    params.put("transcode", transcode);
+    params.put("transdate", transdate);
+    params.put("transtime", transtime);
+    params.put("refno", refno);
+    params.put("bankcardno", bankcardno);
+    params.put("username", username);
+    params.put("idtype", idtype);
+    params.put("idno", idno);
+    params.put("sign_type", sign_type);
+    params.put("sign", sign);
+    if (!checkYnrccSign(params, resp)) {
+      return resp;
+    }
+
+    try{
+      DlpayReq req = new DlpayReq();
+      req.setTranscode(transcode);
+      req.setTransdate(transdate);
+      req.setTranstime(transtime);
+      req.setSn(refno);
+      req.setBcNo(bankcardno);
+      req.setName(username);
+      req.setIdType(idtype);
+      req.setIdNo(idno);
+      return ynrccApiService.sendToYnrcc(DlpayUtil.OPTYPE_BANKCARD_LOSS, req);
+    } catch (BussinessException be) {
+      resp.setCode(ErrorCode.BUSSINESS_ERROR);
+      resp.setMessage(be.getMessage());
+      logger.error(resp.errPrint());
+      return resp;
+    }catch (Exception e){
+      doSystemError(e, resp);
+      return resp;
+    }
+  }
+
 }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java
index 9673aff..35b38ed 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java
@@ -24,4 +24,9 @@
   boolean checkQueryResultParam(String transcode, String transdate, String transtime, String refno, String orignRefno, String sign_type, String sign, DlpayResp resp);
 
   boolean checkChkfileParam(String transcode, String transdate, String transtime, String refno, String checkdate, String merchant_bankcardno, String sign_type, String sign, DlpayResp resp);
+
+  boolean checkChkMakesureParam(String transcode, String transdate, String transtime, String refno, String stltrxdate, Long stlamt, Integer jnlcount, String sign_type, String sign, DlpayResp resp);
+
+  boolean checkLossBankcardParam(String transcode, String transdate, String transtime, String refno, String bankcardno, String username, String idtype, String idno, String sign_type, String sign, DlpayResp resp);
+
 }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
index 1d492e0..5c80430 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
@@ -64,6 +64,14 @@
       sendXml = req.getChkfileXml();
       logger.error("请求【获取对账单=" + req.getChkdate() + "】发送报文：\n" + sendXml);
 
+    } else if (DlpayUtil.OPTYPE_CHK_MAKESURE.equals(optype)){
+      sendXml = req.getChkMakeSureXml();
+      logger.error("请求【对账确认="+req.getStltrxdate()+"】发送报文：\n"+ sendXml);
+
+    } else if(DlpayUtil.OPTYPE_BANKCARD_LOSS.equals(optype)){
+      sendXml = req.getLossBankcardXml();
+      logger.error("请求【银行卡口挂】发送报文：\n"+ sendXml);
+
     } else {
       throw new BussinessException("请求类型[" + optype + "]错误!");
     }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
index cd6429e..6b925f7 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
@@ -244,4 +244,60 @@
 
     return true;
   }
+
+  @Override
+  public boolean checkChkMakesureParam(String transcode, String transdate, String transtime, String refno, String stltrxdate, Long stlamt, Integer jnlcount, String sign_type, String sign, DlpayResp resp) {
+    if (!checkYnrccBaseParam(transcode, transdate, transtime, refno, sign_type, sign, resp)) {
+      return false;
+    }
+
+    if (!StringUtil.checkDatetimeValid(stltrxdate, "yyyyMMdd")) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[待清算流水日期]");
+      return false;
+    }
+
+    if(null == stlamt){
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[清算金额]");
+      return false;
+    }
+
+    if(null==jnlcount || jnlcount<0){
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[交易流水笔数]");
+      return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public boolean checkLossBankcardParam(String transcode, String transdate, String transtime, String refno, String bankcardno, String username, String idtype, String idno, String sign_type, String sign, DlpayResp resp) {
+    if (!checkYnrccBaseParam(transcode, transdate, transtime, refno, sign_type, sign, resp)) {
+      return false;
+    }
+    if (StringUtil.isEmpty(bankcardno)) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[用户银行卡号为空]");
+      return false;
+    }
+    if (StringUtil.isEmpty(username)) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[用户名为空]");
+      return false;
+    }
+    if(StringUtil.isEmpty(idtype)){
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[证件类型为空]");
+      return false;
+    }
+    if (StringUtil.isEmpty(idno)) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[证件号为空]");
+      return false;
+    }
+
+    return true;
+  }
 }
