package com.hikvision.cms.vss;
import java.util.regex.Pattern;
public class PwdTest {
public static void main(String[] args) {
// (一) 首先将密码输入分为数字,小写字母,大写字母,特殊符号4类,等级分为4个等级,具体如下:
// 等级0(风险密码):密码长度小于8位,或者只包含4类字符中的任意一类,或者密码与用户名一样,或者密码是用户名的倒写。
// 等级1(弱密码):包含两类字符,且组合为(数字+小写字母)或(数字+大写字母),且长度大于等于8位。
// 等级2(中密码):包含两类字符,且组合不能为(数字+小写字母)和(数字+大写字母),且长度大于等于8位。
// 等级3(强密码):包含三类字符及以上,且长度大于等于8位。
//
getPwdRank("admin", "112111");
getPwdRank("admin", "112111111111122");
getPwdRank("admin", "1ssssssssszz");
getPwdRank("admin", "123456AAAAAAAAAAAAAA");
getPwdRank("admin", "ZZZZZZzzz");
getPwdRank("admin", "123456ZddZZZZZZZZZZZ");
getPwdRank("admin", "y123456dddddd#");
getPwdRank("admin", "ZZZZZZzzz#");
}
private static int getPwdRank(String userName, String pwd) {
int rank = 0;
if (pwd.length() < 8 || userName.equals(pwd) || pwd.equals(new StringBuffer(userName).reverse().toString())) {
System.err.println(" 等级 " + rank + " 密码: " + pwd);
return rank;
}
boolean hasSpecial = Pattern.compile("[-~!@#$%^&*()\\{\\}\\[\\]:\\.]+").matcher(pwd).find();
boolean hasSmallWord = Pattern.compile("[a-z]+").matcher(pwd).find();
boolean hasBigWord = Pattern.compile("[A-Z]+").matcher(pwd).find();
boolean hasNum = Pattern.compile("[0-9]+").matcher(pwd).find();
int wordsKind = 0;
if (hasNum) {
wordsKind++;
}
if (hasBigWord) {
wordsKind++;
}
if (hasSmallWord) {
wordsKind++;
}
if (hasSpecial) {
wordsKind++;
}
// 等级0(风险密码):密码长度小于8位,或者只包含4类字符中的任意一类,或者密码与用户名一样,或者密码是用户名的倒写。
if (wordsKind == 1) {
rank = 0;
} else if (wordsKind == 2) {
// 等级1(弱密码):包含两类字符,且组合为(数字+小写字母)或(数字+大写字母),且长度大于等于8位。
if (hasNum && (hasBigWord || hasSmallWord)) {
rank = 1;
} else {
// 等级2(中密码):包含两类字符,且组合不能为(数字+小写字母)和(数字+大写字母),且长度大于等于8位。
rank = 2;
}
} else {
// 等级3(强密码):包含三类字符及以上,且长度大于等于8位。
rank = 3;
}
System.err.println(" 等级 " + rank + " 密码: " + pwd);
return rank;
}
}
等级 0 密码: 112111
等级 0 密码: 112111111111122
等级 1 密码: 1ssssssssszz
等级 1 密码: 123456AAAAAAAAAAAAAA
等级 2 密码: ZZZZZZzzz
等级 3 密码: 123456ZddZZZZZZZZZZZ
等级 3 密码: y123456dddddd#
等级 3 密码: ZZZZZZzzz#