一、密码规则定义:
密码长度大于12位,且必须包含大小写字母、数字、特殊字符。
特殊字符(英文)有:
~!@#$%^&*()_+-={}[],./<>?:|
二、校验规则
- 校验长度大于12位
- 校验是否包含大写字母
- 校验是否包含小写字母
- 校验是否包含数字
- 校验是否包含特殊字符
三、代码
package util;
import java.util.HashMap;
import java.util.Map;
/**
*
* 强密码校验器
*
*/
public class StrongPwdValidator {
private final static Integer MIN_LENGTH = 12;
// 字母表
private final static String SMALL_LETTERS = "abcdefghijklmnopqrstuvwxyz";
private final static String BIG_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 特殊字符
private final static String SPECIAL_CHARS = "~!@#$%^&*()_+-={}[],./<>?:|";
private final static String NUMBERS = "1234567890";
/**
* 先判断传入密码的长度是否够12位,其次判断是否包含各个类型的符号.
* 密码要求: 大小写字母特殊字符以及数字, 且长度大于12位.
* @param pwd
* @return
*/
public static Map<Boolean,String> isStrongPwd(String pwd){
Map<Boolean, String> map = new HashMap<>(1);
boolean isLongEnough = (pwd.length() >= MIN_LENGTH)?true:false;
if (!isLongEnough){
//长度不够
map.put(false,"the password length is lower than 12.");
return map;
}else {
//长度够了
boolean hasBigLetters = false;
boolean hasSmallLetters = false;
boolean hasNumbers = false;
boolean hasSpecialChars = false;
int len = pwd.length();
for (int i = 0; i < len; i++){
if(!hasSmallLetters && SMALL_LETTERS.indexOf(pwd.charAt(i)) > -1){
hasSmallLetters = true;
}
if(!hasBigLetters && BIG_LETTERS.indexOf(pwd.charAt(i)) > -1){
hasBigLetters = true;
}
if(!hasNumbers && NUMBERS.indexOf(pwd.charAt(i)) > -1){
hasNumbers = true;
}
if(!hasSpecialChars && SPECIAL_CHARS.indexOf(pwd.charAt(i)) > -1){
hasSpecialChars = true;
}
}
if (!hasBigLetters){
map.put(false,"no big letters in your password");
return map;
}else if(!hasSmallLetters){
map.put(false,"no small letters in your password");
return map;
}else if(!hasNumbers){
map.put(false,"no numbers in your password");
return map;
}else if(!hasSpecialChars){
map.put(false,"no special characters in your password: ~!@#$%^&*()_+-={}[],./<>?:|");
return map;
}
map.put(true,"password is validated");
return map;
}
}
}
四、 测试用例
@Test
public void m2(){
String pwd1 = "ruankun521";
String pwd2 = "@Sicau.edu.cn1";
String pwd3 = "ruanqiongQdd122~";
String pwd4 = "Rqx3-1=2df23";
System.out.println(StrongPwdValidator.isStrongPwd(pwd1));
System.out.println(StrongPwdValidator.isStrongPwd(pwd2));
System.out.println(StrongPwdValidator.isStrongPwd(pwd3));
System.out.println(StrongPwdValidator.isStrongPwd(pwd4));
}
五、结果
{false=the password length is lower than 12.}
{true=password is validated}
{true=password is validated}
{true=password is validated}
Process finished with exit code 0