diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java
index ceaae42..09514e3 100644
--- a/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java
+++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java
@@ -36,7 +36,6 @@
   @NotEmpty(message = "证件号不能为空，且仅支持数字和字母")
   private String idno;
   @Sign
-  @NotEmpty(message = "手机号格式错误")
   @MobileNumber(message = "手机号格式错误")
   private String mobile;
   @Sign
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java b/common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java
index 812ad55..9d67476 100644
--- a/common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java
+++ b/common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java
@@ -29,6 +29,10 @@
       if (StringUtils.isEmpty(idno)) {
         return false;
       }
+      if (IDTypes.IDTYPE_IDCARD.value().equals(idtype) && idno.length() != 18) {
+        return false;
+      }
+      return true;
     } catch (IllegalAccessException e) {
       e.printStackTrace();
     } catch (InvocationTargetException e) {
diff --git a/common/src/test/java/com/supwisdom/dlpay/api/bean/CitizenCardPayinitParamTest.java b/common/src/test/java/com/supwisdom/dlpay/api/bean/CitizenCardPayinitParamTest.java
index f39af2e..3fa5c38 100644
--- a/common/src/test/java/com/supwisdom/dlpay/api/bean/CitizenCardPayinitParamTest.java
+++ b/common/src/test/java/com/supwisdom/dlpay/api/bean/CitizenCardPayinitParamTest.java
@@ -1,12 +1,16 @@
 package com.supwisdom.dlpay.api.bean;
 
+import com.supwisdom.dlpay.api.util.IDTypes;
+import com.supwisdom.dlpay.api.util.SexTypes;
 import org.junit.Test;
 
 import javax.validation.ConstraintViolation;
 import javax.validation.Validation;
 import javax.validation.Validator;
 import javax.validation.ValidatorFactory;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -25,23 +29,41 @@
   public void testCitizenPay() {
     CitizenCardPayinitParam param = new CitizenCardPayinitParam();
 
-    Set<ConstraintViolation<CitizenCardPayinitParam>> violations = validator.validate(param);
+    List<ConstraintViolation<CitizenCardPayinitParam>> violations = validate(param);
+    String message = getViolationMessage(violations);
+    assertFalse(message, violations.isEmpty());
+  }
+
+  private <T> List<ConstraintViolation<T>> validate(T param) {
+    Set<ConstraintViolation<T>> violations = validator.validate(param);
+    List<ConstraintViolation<T>> result = StreamSupport.stream(violations.spliterator(), false)
+        .collect(Collectors.toList());
+    return result;
+  }
+
+  private <T> String getViolationMessage(List<ConstraintViolation<T>> violations) {
     StringBuilder message = new StringBuilder();
-    for (ConstraintViolation<CitizenCardPayinitParam> item : violations) {
+    for (ConstraintViolation<T> item : violations) {
       message.append(item.getMessage()).append("\n");
     }
-    assertFalse(message.toString(), violations.isEmpty());
+    return message.toString();
   }
 
   @Test
   public void testOpenUserParam() {
     OpenUserParam param = new OpenUserParam();
-    param.setIdtype("12323");
-    Set<ConstraintViolation<OpenUserParam>> violations = validator.validate(param);
-    StringBuilder message = new StringBuilder();
-    for (ConstraintViolation<OpenUserParam> item : violations) {
-      message.append(item.getMessage()).append("\n");
-    }
-    assertFalse(message.toString(), violations.isEmpty());
+    List<ConstraintViolation<OpenUserParam>> result = validate(param);
+    assertFalse(getViolationMessage(result), result.isEmpty());
+
+    param.setIdtype(IDTypes.IDTYPE_IDCARD.value());
+    param.setIdno("123213");
+    param.setUid("1231323");
+    param.setName("lily");
+    param.setSex(SexTypes.MALE.value());
+    param.setMobile("+8618272733888");
+
+    result = validate(param);
+    assertTrue(getViolationMessage(result), result.isEmpty());
+
   }
 }
\ No newline at end of file
diff --git a/payapi-sdk/build.gradle b/payapi-sdk/build.gradle
index 2c27e28..7f5aafa 100644
--- a/payapi-sdk/build.gradle
+++ b/payapi-sdk/build.gradle
@@ -78,4 +78,4 @@
 }
 
 jar.dependsOn(fullJar)
-publish.dependsOn(fullJar)
\ No newline at end of file
+publish.dependsOn(jar)
\ No newline at end of file
