推荐使用hutool工具类
验证类
强密码校验(包含大小写字母和特殊字符,密码长度8-16位)
!ReUtil.isMatch("^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\\\\W_]).{8,16}$", userHead.getPassword())
手机号校验
String run(String param, Map<String, Object> map) {
if (StringUtils.isBlank(param)) {
return "手机号码为空或无效内容"
}
def validPhoneMap = new HashMap<>()
validPhoneMap.put("台湾", "^(\\\\+?886\\\\-?|0)?9\\\\d{8}\\$")
validPhoneMap.put("香港", "^(\\\\+?852\\\\-?)?[569]\\\\d{3}\\\\-?\\\\d{4}\\$")
validPhoneMap.put("澳门", "^(\\\\+?853\\\\-?)?6\\\\d{7}\\$")
validPhoneMap.put("马来西亚", "^(\\\\+?6?01){1}(([145]{1}(\\\\-|\\\\s)?\\\\d{7,8})|([236789]{1}(\\\\s|\\\\-)?\\\\d{7}))\\$")
validPhoneMap.put("菲律宾", "^(\\\\+?0?63\\\\-?)?\\\\d{10}\\$")
validPhoneMap.put("泰国", "^(\\\\+?0?66\\\\-?)?\\\\d{10}\\$")
validPhoneMap.put("新加坡", "^(\\\\+?0?65\\\\-?)?\\\\d{10}\\$")
/*以下是其他国家的手机号校验正则*/
validPhoneMap.put("阿尔及利亚", "^(\\\\+?213|0)(5|6|7)\\\\d{8}\\$")
validPhoneMap.put("叙利亚", "^(!?(\\\\+?963)|0)?9\\\\d{8}\\$")
validPhoneMap.put("沙特阿拉伯", "^(!?(\\\\+?966)|0)?5\\\\d{8}\\$")
validPhoneMap.put("美国", "^(\\\\+?1)?[2-9]\\\\d{2}[2-9](?!11)\\\\d{6}\\$")
validPhoneMap.put("捷克共和国", "^(\\\\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}\\$")
validPhoneMap.put("德国", "^(\\\\+?49[ \\\\.\\\\-])?([\\\\(]{1}[0-9]{1,6}[\\\\)])?([0-9 \\\\.\\\\-\\\\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?\\$")
validPhoneMap.put("丹麦", "^(\\\\+?45)?(\\\\d{8})\\$")
validPhoneMap.put("希腊", "^(\\\\+?30)?(69\\\\d{8})\\$")
validPhoneMap.put("澳大利亚", "^(\\\\+?61|0)4\\\\d{8}\\$")
validPhoneMap.put("英国", "^(\\\\+?44|0)7\\\\d{9}\\$")
validPhoneMap.put("加拿大", "^(\\\\+?1)?[2-9]\\\\d{2}[2-9](?!11)\\\\d{6}\\$")
validPhoneMap.put("印度", "^(\\\\+?91|0)?[789]\\\\d{9}\\$")
validPhoneMap.put("新西兰", "^(\\\\+?64|0)2\\\\d{7,9}\\$")
validPhoneMap.put("南非", "^(\\\\+?27|0)\\\\d{9}\\$")
validPhoneMap.put("赞比亚", "^(\\\\+?26)?09[567]\\\\d{7}\\$")
validPhoneMap.put("西班牙", "^(\\\\+?34)?(6\\\\d{1}|7[1234])\\\\d{7}\\$")
validPhoneMap.put("芬兰", "^(\\\\+?358|0)\\\\s?(4(0|1|2|4|5)?|50)\\\\s?(\\\\d\\\\s?){4,8}\\\\d\\$")
validPhoneMap.put("法国", "^(\\\\+?33|0)[67]\\\\d{8}\\$")
validPhoneMap.put("以色列", "^(\\\\+972|0)([23489]|5[0248]|77)[1-9]\\\\d{6}")
validPhoneMap.put("匈牙利", "^(\\\\+?36)(20|30|70)\\\\d{7}\\$")
validPhoneMap.put("意大利", "^(\\\\+?39)?\\\\s?3\\\\d{2} ?\\\\d{6,7}\\$")
validPhoneMap.put("日本", "^(\\\\+?81|0)\\\\d{1,4}[ \\\\-]?\\\\d{1,4}[ \\\\-]?\\\\d{4}\\$")
validPhoneMap.put("挪威", "^(\\\\+?47)?[49]\\\\d{7}\\$")
validPhoneMap.put("比利时", "^(\\\\+?32|0)4?\\\\d{8}\\$")
validPhoneMap.put("波兰", "^(\\\\+?48)? ?[5-8]\\\\d ?\\\\d{3} ?\\\\d{2} ?\\\\d{2}\\$")
validPhoneMap.put("巴西", "^(\\\\+?55|0)\\\\-?[1-9]{2}\\\\-?[2-9]{1}\\\\d{3,4}\\\\-?\\\\d{4}\\$")
validPhoneMap.put("葡萄牙", "^(\\\\+?351)?9[1236]\\\\d{7}\\$")
validPhoneMap.put("俄罗斯", "^(\\\\+?7|8)?9\\\\d{9}\\$")
validPhoneMap.put("塞尔维亚", "^(\\\\+3816|06)[- \\\\d]{5,9}\\$")
validPhoneMap.put("土耳其", "^(\\\\+?90|0)?5\\\\d{9}\\$")
validPhoneMap.put("越南", "^(\\\\+?84|0)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})\\$")
/* 以下是匹配所有手机号校验正则*/
validPhoneMap.put("所有", "^(\\\\+?0)?([0-9]*[1-9][0-9]*)\\$")
if (!param.contains("+") || param.contains("+86") || param.contains("+86-")) {
def isTrue = Pattern.matches("^(\\\\+?86\\\\-?)?1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\\\\d{8}\\$", param)
if (isTrue) {
return null
}
} else {
for (def entry : validPhoneMap.entrySet()) {
def isTrue = Pattern.matches(entry.getValue(), param)
if (isTrue) {
return null
}
}
}
return "手机号码格式不正确";
}
证件号码校验
String run(String param,Map<String,Object> map) {
if (StringUtils.isBlank(param)) {
return "证件类型为空或无效内容"
}
String idNo = map.get("证件号码")
if (StringUtils.isBlank(idNo)) {
return "证件号码为空或无效内容"
}
def validMap = new HashMap<>()
validMap.put("身份证", "(^\\\\d{8}(0\\\\d|10|11|12)([0-2]\\\\d|30|31)\\\\d{3}\\$)|(^\\\\d{6}(18|19|20)\\\\d{2}(0[1-9]|10|11|12)([0-2]\\\\d|30|31)\\\\d{3}(\\\\d|X|x)\\$)")
validMap.put("护照", "(^[EeKkGgDdSsPpHh]\\\\d{8}\\$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\\\\d{7}\\$)")
validMap.put("港澳台通行证", "(^[HMhm]{1}([0-9]{10}|[0-9]{8})\\$)|(^\\\\d{8}|^[a-zA-Z0-9]{10}|^\\\\d{18}\\$)")
validMap.put("港澳台居民大陆居住证", "^8[123]0000(?:19|20)\\\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\\\d|3[01])\\\\d{3}[\\\\dX]\\$")
validMap.put("外国人居留证", "^[A-Z]{3}\\\\d{6}(?:0[1-9]|1[021])(?:0[1-9]|[21]\\\\d|3[10])\\\\d{2}\\$")
if(null == validMap.get(param)){
return "证件类型不匹配"
}
def isTrue = false
if (param == "身份证") {
isTrue = verifyID(idNo)
} else if (validMap.get(param) != null) {
isTrue = Pattern.matches(validMap.get(param), idNo)
} else {
isTrue = true
}
if (isTrue) {
return null
}
return "证件号码格式不正确"
}
//身份证校验(完整)
boolean verifyID(String idcode){
//长度校验
if(idcode.length()!=18){
return false;
}
// 加权因子
int[] weight_factor = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
// 校验码
String[] check_code = ['1', '0', 'X' , '9', '8', '7', '6', '5', '4', '3', '2'];
String code = idcode;
String last = idcode[17];//最后一位
String seventeen = code.substring(0,17);
// ISO 7064:1983.MOD 11-2
// 判断最后一位校验码是否正确
String[] arr = seventeen.split("");
int len = arr.length;
int num = 0;
for(int i = 0; i < len; i++){
num = num + Integer.valueOf(arr[i]) * Integer.valueOf(weight_factor[i]);
}
// 获取余数
int resisue = num%11;
String last_no = check_code[resisue];
String idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;
// 判断格式是否正确
def format = Pattern.matches(idcard_patter,idcode);
// 返回验证结果,校验码和格式同时正确才算是合法的身份证号码
return last.equals(last_no) && format;
}