java正则表达式判断强密码和随机生成强密码
` 提示:在java中使用正则表达式判断是否为强密码
前言
项目中遇到需要判断管理员登陆密码为强密码,同时可以自动随机生成强密码,写了一个函数。
提示:以下是本篇文章正文内容,下面案例可供参考
一、定义几个常量
// 先把需要验证的规则放入一个字符数组中
private static final char[] CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@#$%^&+="
.toCharArray();
//定义正则表达式规则至少要一个大写字母一个小写字母一个特殊字符,密码长度在8~16位之间
private static final String PASSWORD_REGEX = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]){1,2}+(?=\\S+$).{8,16}$";
//判断密码中是否有中文
private static final String NO_CHINESE_REGEX = "^[^\\u4e00-\\u9fa5]+$";
//根据上面两个规则创建两个模式用于校验
private static final Pattern PASSWORD_PATTERN = Pattern.compile(PASSWORD_REGEX);
private static final Pattern NO_CHINESE_PATTERN = Pattern.compile(NO_CHINESE_REGEX);
二、生成强密码
/**
* 随机生成强密码
* @param length 密码长度
* @return password
*/
public static String generatePassword(int length) {
//判断密码是否在8~16位之间超出或小于都会设置默认长度
length = length < 8 ? 8 : length;
length = length > 16 ? 16 : length;
//调用获取随机强密码函数
String result = getRandomPassword(length);
// 如果规则满足条件直接返回强密码,否则再次调用
Matcher m = PASSWORD_PATTERN.matcher(result);
Matcher m1 = NO_CHINESE_PATTERN.matcher(result);
if (m.matches() && m1.matches()) {
return result;
}
return generatePassword(length);
}
//随机生成强密码
private static String getRandomPassword(int length) {
StringBuilder sb = new StringBuilder();
//线程安全随机数
ThreadLocalRandom r = ThreadLocalRandom.current();
for (int x = 0; x < length; ++x) {
//添加CHAR里面的随机下标
sb.append(CHAR[r.nextInt(CHAR.length)]);
}
return sb.toString();
}
三.校验密码强度
/**
* 校验密码复杂度,至少包含8个字符,最多包含20个自负
* 至少包含一个数字,一个大写字母,一个小写字母,一个特殊字符,同时不能包含空白区域
* @param password 密码
* @return true/false
*/
public static boolean checkPasswordComplexity(String password) {
if(StringUtils.isBlank(password)){
return false;
}
if (password.length()> 8 && password.length() < 16) {
//密码至少包含:大小写英文字母、数字、特殊符号,密码长度大于8位,小于16位
String regex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,16}$";
// 判断密码是否匹配规则
return Pattern.matches(regex, password);
}
else {
return false;
}
}
总结
以上就是java如何使用正则表达式判断是否为强密码和如何随机生成强密码,如有不足,希望指正。