检测密码强度
public class PasswordStrength {
/**
* 判断输入密码字符的类型。1:数字;2:大写;4:小写;8:其他
*
* @param ch 密码字符
* @return
*/
// public static void main(String[] args) {
// System.out.println(PasswordStrength.checkStrength("Aa345!!"));
// }
private static int charMode(char ch) {
int mode = 1;
if (ch >= 48 && ch <= 57) {// 数字
mode <<= 0;
} else if (ch >= 65 && ch <= 90) {// 大写
mode <<= 1;
} else if (ch >= 97 && ch <= 122) {// 小写
mode <<= 2;
} else {// 特殊符号
mode <<= 3;
}
return mode;
}
/**
* 计算密码模式
*
* @param num
* @return
*/
private static int bitTotal(int num) {
int modes = 0;
for (int i = 0; i < 4; i++) {
if ((num & 1) == 1) {
modes++;
}
num >>>= 1;
}
return modes;
}
/**
* 检测密码强度(数字、大写字母、小写字母、特殊符号四种类型的个数,其中0表示密码太短)。0:非常弱;1:弱;2:中;3:强;4:非常强
*
* @param password 密码
* @return 密码字符类型种类:1~4;0:表示密码太短不检测
*/
public static int checkStrength(String password) {
if (password.length() < 8) {
return 0; // 密码太短,不检测级别
}
int modes = 0;
for (int i = 0; i < password.length(); i++) {
modes |= charMode(password.charAt(i));
}
return bitTotal(modes);
}
}