parent
96ec101283
commit
97e83574bc
@ -0,0 +1,623 @@ |
||||
package com.zbkj.service.util; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import org.apache.commons.lang3.StringUtils; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import java.util.regex.Matcher; |
||||
import java.util.regex.Pattern; |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 正则表达式 |
||||
* </pre> |
||||
* |
||||
* @author yuwenjie |
||||
* @version $Id: PatternUtil.java, v 0.1 2015年5月28日 下午6:00:14 yuwenjie Exp $ |
||||
*/ |
||||
public class PatternUtils { |
||||
|
||||
private static Map<String, String> map = new HashMap<String, String>() { |
||||
/** |
||||
* <pre> |
||||
* |
||||
* </pre> |
||||
*/ |
||||
private static final long serialVersionUID = -433258398793880977L; |
||||
|
||||
{ |
||||
|
||||
put("一", "一"); |
||||
put("二", "二"); |
||||
put("三", "三"); |
||||
put("四", "四"); |
||||
put("五", "五"); |
||||
put("六", "六"); |
||||
put("七", "七"); |
||||
put("八", "八"); |
||||
put("九", "九"); |
||||
put("十", "十"); |
||||
|
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验优惠券兑换码 是否合法 |
||||
* </pre> |
||||
* |
||||
* @param exChangeCode |
||||
* @return |
||||
*/ |
||||
public static Pattern exchangePattern = Pattern.compile("[a-zA-Z0-9]{16}"); |
||||
|
||||
public static boolean checkExchange(String exChangeCode) { |
||||
if (StringUtils.isBlank(exChangeCode)) |
||||
return false; |
||||
Matcher matcher = exchangePattern.matcher(exChangeCode); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验图形验证码 4位 |
||||
* </pre> |
||||
* |
||||
* @param securityCode |
||||
* @return |
||||
*/ |
||||
public static Pattern securityCodePattern = Pattern.compile("[a-zA-Z0-9]{4}"); |
||||
|
||||
public static boolean checkSecurityCode(String securityCode) { |
||||
if (StringUtils.isBlank(securityCode)) |
||||
return false; |
||||
Matcher matcher = securityCodePattern.matcher(securityCode); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验图形验证码 4位 |
||||
* </pre> |
||||
* |
||||
* @param securityCode |
||||
* @return |
||||
*/ |
||||
public static Pattern number6Pattern = Pattern.compile("[0-9]{6}"); |
||||
|
||||
public static boolean checkNumber6(String number) { |
||||
if (StringUtils.isBlank(number)) |
||||
return false; |
||||
Matcher matcher = number6Pattern.matcher(number); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验手机号码 |
||||
* </pre> |
||||
* |
||||
* @param phone |
||||
* @return |
||||
*/ |
||||
public static Pattern phonePattern = Pattern.compile("^((13)|(14)|(15)|(16)|(17)|(18)|(19))\\d{9}$"); |
||||
|
||||
public static boolean checkPhone(String phone) { |
||||
if (StringUtils.isBlank(phone) || phone.length() != 11) |
||||
return false; |
||||
Matcher matcher = phonePattern.matcher(phone); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验email |
||||
* </pre> |
||||
* |
||||
* @param email |
||||
* @return |
||||
*/ |
||||
public static Pattern emailPattern = Pattern.compile(".+@(\\w+.)+[a-zA-Z0-9]{2,3}"); |
||||
|
||||
public static boolean checkEmail(String email) { |
||||
if (StringUtils.isBlank(email)) |
||||
return false; |
||||
Matcher matcher = emailPattern.matcher(email); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验密码,必须包含数字 字母 以及特殊字符 位置不限 10-20位 |
||||
* </pre> |
||||
* |
||||
* @param password |
||||
* @return |
||||
*/ |
||||
public static Pattern passwordPattern = Pattern.compile( |
||||
"(?=.*[a-zA-Z])(?=.*[0-9])(?=.*?[-!\\(\\)\\~@#$%\\^\\&\\*_\\+\\-\\=])[a-zA-Z0-9-!\\(\\)\\~@#$%\\^\\&\\*_\\+\\-\\=]{10,20}"); |
||||
|
||||
public static boolean checkPassWord(String password) { |
||||
if (StringUtils.isBlank(password)) |
||||
return false; |
||||
Matcher matcher = passwordPattern.matcher(password); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
public static boolean checkJumeiAddressSevenChinaNumber(String address) { |
||||
|
||||
char[] chars = address.toCharArray(); |
||||
Integer count = 0; |
||||
for (int i = 0; i < chars.length; i++) { |
||||
char c = chars[i]; |
||||
if (map.containsValue(c + "")) { |
||||
count++; |
||||
} else { |
||||
count = 0; |
||||
} |
||||
|
||||
if (count >= 7) { |
||||
return true; |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验是否为.meitun.com的域名下的链接 |
||||
* </pre> |
||||
* |
||||
* @param url |
||||
* @return |
||||
*/ |
||||
public static boolean checkHttp(String url) { |
||||
// if(StringUtils.isBlank(url)) return false;
|
||||
// Pattern pattern =
|
||||
// Pattern.compile("(http|https)://(.+){1}\\.meitun\\.com/(.+)*");
|
||||
// Matcher matcher = pattern.matcher(url);
|
||||
// return matcher.matches();
|
||||
if (StringUtils.isBlank(url)) |
||||
return false; |
||||
|
||||
url = url.substring(url.indexOf("://") + 3); |
||||
|
||||
if (url.indexOf("/") != -1) |
||||
url = url.substring(0, url.indexOf("/")); |
||||
|
||||
return url.contains(".meitun.com"); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验是否为内网IP |
||||
* </pre> |
||||
* |
||||
* @param ip |
||||
* @return |
||||
*/ |
||||
public static final Pattern innerIpPattern = Pattern.compile( |
||||
"(10|172|192)\\.([0-1][0-9]{0,2}|[2][0-5]{0,2}|[3-9][0-9]{0,1})\\.([0-1][0-9]{0,2}|[2][0-5]{0,2}|[3-9][0-9]{0,1})\\.([0-1][0-9]{0,2}|[2][0-5]{0,2}|[3-9][0-9]{0,1})"); |
||||
|
||||
public static boolean isInnerIp(String ip) { |
||||
Matcher matcher = innerIpPattern.matcher(ip); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验是否为合法IP |
||||
* </pre> |
||||
* |
||||
* @param ip |
||||
* @return |
||||
*/ |
||||
public static final Pattern isIpPattern = Pattern |
||||
.compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); |
||||
|
||||
public static boolean isIp(String ip) { |
||||
Matcher matcher = isIpPattern.matcher(ip); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验是否为纯数字 |
||||
* </pre> |
||||
* |
||||
* @param number |
||||
* @return |
||||
*/ |
||||
public static final Pattern numberPattern = Pattern.compile("^[-]?\\d+$"); |
||||
|
||||
public static boolean isNumber(String number) { |
||||
Matcher matcher = numberPattern.matcher(number); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验聚美方式的用户名 |
||||
* </pre> |
||||
* |
||||
* @param userName |
||||
* @return |
||||
*/ |
||||
public static final Pattern jumeiUserNamePattern = Pattern.compile("^[\u4E00-\u9FA5A-Za-z,,..。·\\s\u3000]{2,30}$"); |
||||
|
||||
public static boolean checkJumeiUserName(String userName) { |
||||
Matcher matcher = jumeiUserNamePattern.matcher(userName); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验用户收货地址(聚美) |
||||
* </pre> |
||||
* |
||||
* @param address |
||||
* @return |
||||
*/ |
||||
public static final Pattern jumeiAddressPattern = Pattern |
||||
.compile("^(?=.*?[\u4E00-\u9FA5])[a-zA-Z0-9\u4E00-\u9FA5-\\-##(\\()\\)-——::,,]{6,100}$"); |
||||
|
||||
public static boolean checkJumeiAddress(String address) { |
||||
Matcher matcher = jumeiAddressPattern.matcher(address); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 较远用户收货地址中是否有连续7个数字(聚美) |
||||
* </pre> |
||||
* |
||||
* @param address |
||||
* @return |
||||
*/ |
||||
public static final Pattern jumeiAddressSevenNumberPattern = Pattern.compile("^.*\\d{7}.*$"); |
||||
|
||||
public static boolean checkJumeiAddressSevenNumber(String address) { |
||||
Matcher matcher = jumeiAddressSevenNumberPattern.matcher(address); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 替换聚美方式的用户名 |
||||
* </pre> |
||||
* |
||||
* @param str |
||||
* @return |
||||
*/ |
||||
public static String replaceForJumei(String str) { |
||||
if (StringUtils.isBlank(str)) |
||||
return ""; |
||||
return str.replaceAll("[,,..。·]", "·").replaceAll("[\\s|\u3000]", ""); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 替换收货地址中的中文特殊字符(聚美) |
||||
* </pre> |
||||
* |
||||
* @param str |
||||
* @return |
||||
*/ |
||||
public static String replaceAddressForJumei(String str) { |
||||
if (StringUtils.isBlank(str)) |
||||
return ""; |
||||
return str.replaceAll("[——-]", "-").replaceAll("#", "#").replaceAll("(", "(").replaceAll("(", "(") |
||||
.replaceAll(")", ")").replaceAll(":", ":").replaceAll(",", ","); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 删除制表符,空格等 |
||||
* </pre> |
||||
* |
||||
* @param str |
||||
* @return |
||||
*/ |
||||
public static final Pattern strnPattern = Pattern.compile("\\s*|t|r|n"); |
||||
|
||||
public static String removeSTRN(String str) { |
||||
if (StringUtils.isBlank(str)) |
||||
return null; |
||||
Matcher m = strnPattern.matcher(str); |
||||
return m.replaceAll(""); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验是否为json格式 |
||||
* </pre> |
||||
* |
||||
* @param json |
||||
* @return |
||||
*/ |
||||
public static Boolean checkJson(String json) { |
||||
if (StringUtils.isBlank(json)) |
||||
return false; |
||||
try { |
||||
JSONObject.parse(json); |
||||
} catch (Exception e) { |
||||
return false; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验是否为纯中文 |
||||
* </pre> |
||||
* |
||||
* @param str |
||||
* @return |
||||
*/ |
||||
public static final Pattern chinesePattern = Pattern.compile("[\\u4e00-\\u9fa5]*"); |
||||
|
||||
public static Boolean checkIsChinese(String str) { |
||||
if (StringUtils.isBlank(str)) |
||||
return false; |
||||
Matcher matcher = chinesePattern.matcher(str); |
||||
return matcher.matches(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验是否包含中文 |
||||
* </pre> |
||||
* |
||||
* @param str |
||||
* @return |
||||
*/ |
||||
public static final Pattern containChinesePattern = Pattern.compile("[\u4e00-\u9fa5]"); |
||||
|
||||
public static Boolean checkContainChinese(String str) { |
||||
if (StringUtils.isBlank(str)) |
||||
return false; |
||||
Matcher matcher = containChinesePattern.matcher(str); |
||||
if (matcher.find()) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 删除制表符,空格等 |
||||
* </pre> |
||||
* |
||||
* @param str |
||||
* @return |
||||
*/ |
||||
public static final Pattern tCodePattern = Pattern.compile("(tcode)=([^&]+)", Pattern.CASE_INSENSITIVE); |
||||
|
||||
public static String getTcode(String str) { |
||||
if (StringUtils.isBlank(str)) |
||||
return null; |
||||
Matcher matcher = tCodePattern.matcher(str); |
||||
while (matcher.find()) { |
||||
String s = matcher.group(); |
||||
return s.split("=")[1]; |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* <pre> |
||||
* 校验是否包含中文 |
||||
* </pre> |
||||
* |
||||
* @param str |
||||
* @return |
||||
*/ |
||||
public static final Pattern YYYY_MM_DD_HH_MM_SS = Pattern |
||||
.compile("^\\d{4}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D*$"); |
||||
public static final Pattern YYYY_MM_DD = Pattern.compile("^\\d{4}\\D+\\d{1,2}\\D+\\d{1,2}$"); |
||||
|
||||
public static String getTimeFomart(String str) { |
||||
if (StringUtils.isBlank(str)) |
||||
return null; |
||||
str = str.trim(); |
||||
if (checkTimeFormat(YYYY_MM_DD_HH_MM_SS, str)) { |
||||
return DateUtils.YYYY_MM_DD_HH_MM_SS; |
||||
} |
||||
if (checkTimeFormat(YYYY_MM_DD, str)) { |
||||
return DateUtils.YYYY_MM_DD; |
||||
} |
||||
if(str.length()==14){ |
||||
return DateUtils.YYYYMMDDHHMMSS; |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* @param pattern |
||||
* @param str |
||||
* @return |
||||
*/ |
||||
private static Boolean checkTimeFormat(Pattern pattern, String str) { |
||||
Matcher matcher = pattern.matcher(str); |
||||
if (matcher.find()) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* 校验证件号 |
||||
* @param cerNumber |
||||
* @return |
||||
*/ |
||||
public static Boolean checkIdentity(String cerNumber) { |
||||
if (cerNumber.length() == 15 || cerNumber.length() == 18) { |
||||
if (!cardCodeVerifySimple(cerNumber)) { |
||||
return false; |
||||
} |
||||
if (cerNumber.length() == 18 && !cardCodeVerify(cerNumber)) { |
||||
return false; |
||||
} |
||||
} else { |
||||
return false; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
// 第一代身份证正则表达式(15位)
|
||||
public static final Pattern isIDCard1 = Pattern.compile("^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$"); |
||||
// 第二代身份证正则表达式(18位)
|
||||
public static final Pattern isIDCard2 = Pattern.compile("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[A-Z])$"); |
||||
private static boolean cardCodeVerifySimple(String cerNumber) { |
||||
Matcher matcher1 = isIDCard1.matcher(cerNumber); |
||||
if (matcher1.find()) { |
||||
return true; |
||||
} |
||||
|
||||
Matcher matcher2 = isIDCard2.matcher(cerNumber); |
||||
if (matcher2.find()) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
private static boolean cardCodeVerify(String cerNumber) { |
||||
int i = 0; |
||||
String r = "error"; |
||||
String lastnumber = ""; |
||||
|
||||
i += Integer.parseInt(cerNumber.substring(0, 1)) * 7; |
||||
i += Integer.parseInt(cerNumber.substring(1, 2)) * 9; |
||||
i += Integer.parseInt(cerNumber.substring(2, 3)) * 10; |
||||
i += Integer.parseInt(cerNumber.substring(3, 4)) * 5; |
||||
i += Integer.parseInt(cerNumber.substring(4, 5)) * 8; |
||||
i += Integer.parseInt(cerNumber.substring(5, 6)) * 4; |
||||
i += Integer.parseInt(cerNumber.substring(6, 7)) * 2; |
||||
i += Integer.parseInt(cerNumber.substring(7, 8)) * 1; |
||||
i += Integer.parseInt(cerNumber.substring(8, 9)) * 6; |
||||
i += Integer.parseInt(cerNumber.substring(9, 10)) * 3; |
||||
i += Integer.parseInt(cerNumber.substring(10, 11)) * 7; |
||||
i += Integer.parseInt(cerNumber.substring(11, 12)) * 9; |
||||
i += Integer.parseInt(cerNumber.substring(12, 13)) * 10; |
||||
i += Integer.parseInt(cerNumber.substring(13, 14)) * 5; |
||||
i += Integer.parseInt(cerNumber.substring(14, 15)) * 8; |
||||
i += Integer.parseInt(cerNumber.substring(15, 16)) * 4; |
||||
i += Integer.parseInt(cerNumber.substring(16, 17)) * 2; |
||||
i = i % 11; |
||||
lastnumber = cerNumber.substring(17, 18); |
||||
if (i == 0) { |
||||
r = "1"; |
||||
} |
||||
if (i == 1) { |
||||
r = "0"; |
||||
} |
||||
if (i == 2) { |
||||
r = "x"; |
||||
} |
||||
if (i == 3) { |
||||
r = "9"; |
||||
} |
||||
if (i == 4) { |
||||
r = "8"; |
||||
} |
||||
if (i == 5) { |
||||
r = "7"; |
||||
} |
||||
if (i == 6) { |
||||
r = "6"; |
||||
} |
||||
if (i == 7) { |
||||
r = "5"; |
||||
} |
||||
if (i == 8) { |
||||
r = "4"; |
||||
} |
||||
if (i == 9) { |
||||
r = "3"; |
||||
} |
||||
if (i == 10) { |
||||
r = "2"; |
||||
} |
||||
if (r.equals(lastnumber.toLowerCase())) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* 校验银行卡卡号 |
||||
* 校验过程: |
||||
* 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 |
||||
* 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,将个位十位数字相加,即将其减去9),再求和。 |
||||
* 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。 |
||||
* @param bankCard |
||||
* @return |
||||
*/ |
||||
public static boolean checkBankCard(String bankCard) { |
||||
if (bankCard.length() < 15 || bankCard.length() > 19) { |
||||
return false; |
||||
} |
||||
char bit = getBankCardCheckCode(bankCard.substring(0, bankCard.length() - 1)); |
||||
if (bit == 'N') { |
||||
return false; |
||||
} |
||||
return bankCard.charAt(bankCard.length() - 1) == bit; |
||||
} |
||||
|
||||
/** |
||||
* 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 |
||||
* @param nonCheckCodeBankCard |
||||
* @return |
||||
*/ |
||||
public static char getBankCardCheckCode(String nonCheckCodeBankCard) { |
||||
if (nonCheckCodeBankCard == null || nonCheckCodeBankCard.trim().length() == 0 |
||||
|| !nonCheckCodeBankCard.matches("\\d+")) { |
||||
// 如果传的不是数据返回N
|
||||
return 'N'; |
||||
} |
||||
char[] chs = nonCheckCodeBankCard.trim().toCharArray(); |
||||
int luhmSum = 0; |
||||
for (int i = chs.length - 1, j = 0; i >= 0; i--, j++) { |
||||
int k = chs[i] - '0'; |
||||
if (j % 2 == 0) { |
||||
k *= 2; |
||||
k = k / 10 + k % 10; |
||||
} |
||||
luhmSum += k; |
||||
} |
||||
return (luhmSum % 10 == 0) ? '0' : (char) ((10 - luhmSum % 10) + '0'); |
||||
} |
||||
|
||||
public static final Pattern numericParttern = Pattern.compile("^[-]?\\d*.?\\d*$"); |
||||
public static boolean isNumeric(String str) { |
||||
return numericParttern.matcher(str).matches(); |
||||
} |
||||
|
||||
public static final Pattern imagePattern = Pattern.compile(".+\\.(gif|jpg|jpeg|bmp|png)$"); |
||||
public static boolean isImage(String str) { |
||||
return imagePattern.matcher(str).matches(); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue