package com.unicom.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @Auth wxr
* @Date 2019-12
*/
public class PasswordVerify {
//包含橫向連續的鍵盤輸入或者連續的數字和字母
private static final String[] KEYBOARD_METADATA = {"qwertyuiop[]\\", "asdfghjkl;'", "zxcvbnm,./", "1234567890-=",
"0123456789012345678", "abcdefghijklmnopqrstuvwxyz"};
//包含連續的斜向鍵盤輸入或者常用的數據庫、操作系統等詞組
private static final String[] COTAINEDSTR_METADATA = {"qaz", "wsx", "edc", "rfv", "tgb", "yhn", "ujm", "ik,", "ol.", "p;/", "esz", "rdx",
"tfc", "ygv", "uhb", "ijn", "okm", "pl,", "[;.", "]'/", "1qa", "2ws", "3ed", "4rf", "5tg", "6yh", "7uj", "8ik", "9ol", "0p;", "-['",
"=[;", "-pl", "0ok", "9ij", "8uh", "7yg", "6tf", "5rd", "4es", "3wa", "root", "admin", "mysql", "oracle", "system", "windows",
"linux", "java", "python", "unix"};
/**
* 判斷是否包含連續的斜向鍵盤輸入或者常用的數據庫、操作系統等詞組
*
* @param lowerCasPassword 轉換成小寫的密碼串
* @return 返回不符合規范的字符序列
*/
private static String containTargetStrVerify(String lowerCasPassword) {
for (String string : COTAINEDSTR_METADATA) {
if (lowerCasPassword.contains( string )) {
return string;
}
}
return null;
}
/**
* 判斷是否包含連續的橫向鍵盤輸入或者連續的數字和字母
*
* @param lowerCasPassword 轉換成小寫的密碼串
* @param limitCount 限制連續字符數的最大值
* @return 返回不符合規范的字符序列
*/
private static String containTargetSequenceVerify(String lowerCasPassword, int limitCount) {
char[] chars = lowerCasPassword.toCharArray( );
for (int c = 0; c < chars.length - limitCount; c++) {
char passwordChar = chars[c];
String repeatStr = "";
for (int i = 0; i < limitCount + 1; i++) {
repeatStr += c;
}
if (lowerCasPassword.contains( repeatStr )) {
return repeatStr;
}
for (String strings : KEYBOARD_METADATA) {
if (strings.contains( String.valueOf( passwordChar ) )) {
String substring = lowerCasPassword.substring( c, c + limitCount + 1 );
if (strings.contains( substring )) {
return substring;
}
}
}
}
return null;
}
/**
* 判斷是否含有特殊字符、大寫字母、小寫字母、數字中的三種及以上
* <p>
* true為包含,false