diff --git a/common/build.gradle b/common/build.gradle
index 88e5750..3347b79 100644
--- a/common/build.gradle
+++ b/common/build.gradle
@@ -7,6 +7,7 @@
     implementation 'org.slf4j:slf4j-api:1.7.26'
     implementation 'javax.validation:validation-api:2.0.1.Final'
     implementation 'javax.servlet:javax.servlet-api:4.0.1'
+    implementation 'commons-beanutils:commons-beanutils:1.9.3'
 
     compileOnly 'org.projectlombok:lombok:1.18.8'
     annotationProcessor 'org.projectlombok:lombok:1.18.8'
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/annotation/IDNoCheck.java b/common/src/main/java/com/supwisdom/dlpay/api/annotation/IDNoCheck.java
new file mode 100644
index 0000000..bf486db
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/annotation/IDNoCheck.java
@@ -0,0 +1,36 @@
+package com.supwisdom.dlpay.api.annotation;
+
+import com.supwisdom.dlpay.api.validator.IDNoCheckValidator;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.*;
+
+@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Constraint(validatedBy = IDNoCheckValidator.class)
+@Documented
+public @interface IDNoCheck {
+  String message() default "{constraintdescriptor.fieldmatch}";
+
+  Class<?>[] groups() default {};
+
+  Class<? extends Payload>[] payload() default {};
+
+  /**
+   * @return The idno field
+   */
+  String idno();
+
+  /**
+   * @return The idtype field
+   */
+  String idtype();
+
+  /**
+   * 证件类型字典
+   *
+   * @return
+   */
+  String[] value();
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/annotation/MobileNumber.java b/common/src/main/java/com/supwisdom/dlpay/api/annotation/MobileNumber.java
new file mode 100644
index 0000000..8558151
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/annotation/MobileNumber.java
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.api.annotation;
+
+import com.supwisdom.dlpay.api.validator.MobileNumberValidator;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.*;
+
+@Constraint(validatedBy = {MobileNumberValidator.class})
+@Documented
+@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MobileNumber {
+  String message() default "手机号码不合法";
+
+  Class<?>[] groups() default {};
+
+  Class<? extends Payload>[] payload() default {};
+}
\ No newline at end of file
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 d76fc80..5ec9602 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
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.api.bean;
 
 import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.MobileNumber;
 import com.supwisdom.dlpay.api.annotation.Sex;
 import com.supwisdom.dlpay.api.annotation.Sign;
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
@@ -32,11 +33,12 @@
   private String idno;
   @Sign
   @NotEmpty(message = "手机号格式错误")
+  @MobileNumber(message = "手机号格式错误")
   private String mobile;
   @Sign
   private String tel;
   @Sign
-  @Email
+  @Email(message = "电子邮件格式不合法")
   private String email;
   @Sign
   private String address;
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/util/MobileNumberCheck.java b/common/src/main/java/com/supwisdom/dlpay/api/util/MobileNumberCheck.java
new file mode 100644
index 0000000..161868e
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/util/MobileNumberCheck.java
@@ -0,0 +1,163 @@
+package com.supwisdom.dlpay.api.util;
+
+import java.util.regex.Pattern;
+
+public class MobileNumberCheck {
+
+  /**
+   * 座机电话格式验证
+   **/
+  private static final String PHONE_CALL_PATTERN = "^(?:\\(\\d{3,4}\\)|\\d{3,4}-)?\\d{7,8}(?:-\\d{1,4})?$";
+
+  /**
+   * 中国电信号码格式验证 手机段： 133,153,180,181,189,177,1700,173
+   **/
+  private static final String CHINA_TELECOM_PATTERN = "(?:^(?:\\+86)?1(?:33|53|7[37]|8[019])\\d{8}$)|(?:^(?:\\+86)?1700\\d{7}$)";
+
+  /**
+   * 中国联通号码格式验证 手机段：130,131,132,155,156,185,186,145,176,1707,1708,1709,175
+   **/
+  private static final String CHINA_UNICOM_PATTERN = "(?:^(?:\\+86)?1(?:3[0-2]|4[5]|5[56]|7[56]|8[56])\\d{8}$)|(?:^(?:\\+86)?170[7-9]\\d{7}$)";
+  /**
+   * 简单手机号码校验，校验手机号码的长度和1开头
+   */
+  private static final String SIMPLE_PHONE_CHECK = "^(?:\\+86)?1\\d{10}$";
+  /**
+   * 中国移动号码格式验证
+   * 手机段：134,135,136,137,138,139,150,151,152,157,158,159,182,183,184
+   * ,187,188,147,178,1705
+   **/
+  private static final String CHINA_MOBILE_PATTERN = "(?:^(?:\\+86)?1(?:3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\\d{8}$)|(?:^(?:\\+86)?1705\\d{7}$)";
+
+  /**
+   * 仅手机号格式校验
+   */
+  private static final String PHONE_PATTERN = new StringBuilder(300)
+      .append(CHINA_MOBILE_PATTERN).append("|")
+      .append(CHINA_TELECOM_PATTERN).append("|")
+      .append(CHINA_UNICOM_PATTERN).toString();
+
+  /**
+   * 手机和座机号格式校验
+   */
+  private static final String PHONE_TEL_PATTERN = new StringBuilder(350)
+      .append(PHONE_PATTERN).append("|").append("(")
+      .append(PHONE_CALL_PATTERN).append(")").toString();
+
+
+  /**
+   * 匹配多个号码以,、或空格隔开的格式，如 17750581369
+   * 13306061248、(596)3370653,17750581369,13306061248 (0596)3370653
+   *
+   * @param input
+   * @param separator 可以自己指定分隔符，如"、, "表示可以以顿号、逗号和空格分隔
+   * @return
+   */
+  public static boolean checkMultiPhone(String input, String separator) {
+    separator = escapeMetacharacterOfStr(separator);
+    String regex = "^(?!.+["
+        + separator
+        + "]$)(?:(?:(?:(?:\\(\\d{3,4}\\)|\\d{3,4}-)?\\d{7,8}(?:-\\d{1,4})?)|(?:1\\d{10}))(?:["
+        + separator + "]|$))+$";
+    return match(regex, input);
+  }
+
+  /**
+   * 转义字符串中的[]-^\元字符
+   *
+   * @param input
+   * @param separator
+   * @return
+   */
+  private static String escapeMetacharacterOfStr(String input) {
+    String regex = "[-^\\[\\]\\\\]";
+    return input.replaceAll(regex, "\\\\$0");
+  }
+
+  /**
+   * 仅手机号码校验
+   *
+   * @param input
+   * @return
+   */
+  public static boolean isPhone(String input) {
+    return match(PHONE_PATTERN, input);
+  }
+
+  /**
+   * 手机号或座机号校验
+   *
+   * @param input
+   * @return
+   */
+  public static boolean isPhoneOrTel(String input) {
+    System.out.println(PHONE_TEL_PATTERN);
+    return match(PHONE_TEL_PATTERN, input);
+  }
+
+  /**
+   * 验证电话号码的格式
+   *
+   * @param str 校验电话字符串
+   * @return 返回true, 否则为false
+   * @author LinBilin
+   */
+  public static boolean isPhoneCallNum(String str) {
+    return match(PHONE_CALL_PATTERN, str);
+  }
+
+  /**
+   * 验证【电信】手机号码的格式
+   *
+   * @param str 校验手机字符串
+   * @return 返回true, 否则为false
+   * @author LinBilin
+   */
+  public static boolean isChinaTelecomPhoneNum(String str) {
+    return match(CHINA_TELECOM_PATTERN, str);
+  }
+
+  /**
+   * 验证【联通】手机号码的格式
+   *
+   * @param str 校验手机字符串
+   * @return 返回true, 否则为false
+   * @author LinBilin
+   */
+  public static boolean isChinaUnicomPhoneNum(String str) {
+    return match(CHINA_UNICOM_PATTERN, str);
+  }
+
+  /**
+   * 验证【移动】手机号码的格式
+   *
+   * @param str 校验手机字符串
+   * @return 返回true, 否则为false
+   * @author LinBilin
+   */
+  public static boolean isChinaMobilePhoneNum(String str) {
+    return match(CHINA_MOBILE_PATTERN, str);
+  }
+
+  /**
+   * 简单手机号码校验，校验手机号码的长度和1开头
+   *
+   * @param str
+   * @return
+   */
+  public static boolean isPhoneSimple(String str) {
+    return match(SIMPLE_PHONE_CHECK, str);
+  }
+
+  /**
+   * 匹配函数
+   *
+   * @param regex
+   * @param input
+   * @return
+   */
+  private static boolean match(String regex, String input) {
+    return Pattern.matches(regex, input);
+  }
+
+}
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
new file mode 100644
index 0000000..5fba275
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java
@@ -0,0 +1,28 @@
+package com.supwisdom.dlpay.api.validator;
+
+import com.supwisdom.dlpay.api.annotation.IDNoCheck;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+public class IDNoCheckValidator implements ConstraintValidator<IDNoCheck, String> {
+  private String idnoField;
+  private String idtypeField;
+  private String[] idtypeList;
+
+  @Override
+  public boolean isValid(String value, ConstraintValidatorContext context) {
+    return false;
+  }
+
+  @Override
+  public void initialize(IDNoCheck constraintAnnotation) {
+    idnoField = constraintAnnotation.idno();
+    idtypeField = constraintAnnotation.idtype();
+    if (StringUtils.isEmpty(idnoField) || StringUtils.isEmpty(idtypeField)) {
+      throw new IllegalArgumentException("IDNO 和 IDType 字段必须指定");
+    }
+    idtypeList = constraintAnnotation.value();
+  }
+}
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/validator/MobileNumberValidator.java b/common/src/main/java/com/supwisdom/dlpay/api/validator/MobileNumberValidator.java
new file mode 100644
index 0000000..0be737f
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/validator/MobileNumberValidator.java
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.api.validator;
+
+import com.supwisdom.dlpay.api.annotation.MobileNumber;
+import com.supwisdom.dlpay.api.util.MobileNumberCheck;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+public class MobileNumberValidator implements ConstraintValidator<MobileNumber, String> {
+
+  @Override
+  public boolean isValid(String value, ConstraintValidatorContext context) {
+    return MobileNumberCheck.isPhone(value);
+  }
+
+  @Override
+  public void initialize(MobileNumber constraintAnnotation) {
+  }
+}
diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
index a8ea0ab..ff65c09 100644
--- a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
+++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
@@ -32,7 +32,6 @@
     HttpMessageConvertersAutoConfiguration.class})
 @EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk")
 @ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
-@TestPropertySource()
 public class CitizenCardPayProxyTest {
   private final static String appid = "700001";
   private final static String secret = "5f788ce433ec44f299351cdf7f137e81";
