1、是否符合最小密码长度
/// <summary>
/// 是否符合最小密码长度
/// </summary>
/// <param name="passwordString">密码字符串</param>
/// <param name="length">密码字长度</param>
/// <returns></returns>
public bool IsMatchMinLength(string passwordString, int length) {
if (length < 1) {
throw new Exception("密码最小长度验证值不能小于1");
}
if (passwordString == null )
{
return false;
}
return passwordString.Length >= length;
}
2、是否符合最大密码长度
/// <summary>
/// 是否符合最大密码长度
/// </summary>
/// <param name="passwordString">密码字符串</param>
/// <param name="length">密码字长度</param>
/// <returns></returns>
public bool IsMatchMaxLength(string passwordString, int length)
{
if (length < 1)
{
throw new Exception("密码最大长度验证值不能小于1");
}
if (passwordString == null)
{
return false;
}
return passwordString.Length <= length;
}
3、连续3位及以上数字不能连号 | 连续3位及以上字母不能连号
/// <summary>
/// 连续3位及以上数字不能连号 | 连续3位及以上字母不能连号
/// </summary>
/// <param name="passwordString">密码字符串</param>
/// <param name="errorMessage">异常信息</param>
/// <returns></returns>
public bool IsMatchABC123CBA321(string passwordString, ref string errorMessage)
{
errorMessage = "";
if (passwordString == null) {
errorMessage = "密码字符串为空(null)";
return false;
}
char[] passwordChars = passwordString.ToCharArray();
bool flag = false;
int pLength = passwordChars.Length - 1;
for (int pInd = 1; pInd < pLength; pInd++)
{
int firstIndex = (int)passwordChars[pInd - 1];
int secondIndex = (int)passwordChars[pInd];
int thirdIndex = (int)passwordChars[pInd + 1];
// 顺序连号判断 如123、abc
if (thirdIndex - secondIndex == 1 && secondIndex - firstIndex == 1)
{
flag = true;
errorMessage = "密码不能存在连号的字符串“"
+ Convert.ToString(passwordChars[pInd - 1])
+ Convert.ToString(passwordChars[pInd])
+ Convert.ToString(passwordChars[pInd + 1])
+ "”";
break;
}
// 倒序连号判断 321、cba
if (firstIndex - secondIndex == 1 && secondIndex - thirdIndex == 1)
{
flag = true;
errorMessage = "密码不能存在连号的字符串“"
+ Convert.ToString(passwordChars[pInd - 1])
+ Convert.ToString(passwordChars[pInd])
+ Convert.ToString(passwordChars[pInd + 1])
+ "”";
break;
}
}
return !flag;
}
4、密码不能包括连续3个及以上相同字符
/// <summary>
/// 密码不能包括连续3个及以上相同字符
/// </summary>
/// <param name="passwordString">密码字符串</param>
/// <param name="errorMessage">异常信息</param>
/// <returns></returns>
public bool IsMatchAAA(string passwordString, ref string errorMessage)
{
errorMessage = "";
if (passwordString == null)
{
errorMessage = "密码字符串为空(null)";
return false;
}
char[] passwordChars = passwordString.ToCharArray();
int passwordLength = passwordChars.Length;
// 重复字符缓存变量
List<string> repeatStringList = new List<string>();
// 临时重复字符
string repeatString = "";
// 是否重复
bool isCharRepeat = false;
// 最后字符索引
int lastInd = passwordLength - 1;
char firstChar = passwordChars[0];
for (int pInd = 1; pInd < passwordLength; pInd++) {
char currentChar = passwordChars[pInd];
// 判断是否重复
if (currentChar == firstChar)
{
isCharRepeat = true;
repeatString += Convert.ToString(firstChar);
// 最后字符处理
if (lastInd == pInd) {
repeatString += Convert.ToString(firstChar);
isCharRepeat = false;
repeatStringList.Add(repeatString);
repeatString = "";
}
}
else {
// 若上一循环是重复的处理。
if (isCharRepeat)
{
repeatString += Convert.ToString(firstChar);
isCharRepeat = false;
}
// 满足连续3个及以上相同字符的条件,缓存重复的字符串
if (repeatString.Length >= 3)
{
repeatStringList.Add(repeatString);
}
// 更新参考字符
firstChar = currentChar;
// 清空临时重复字
repeatString = "";
}
}
// 是否存在连续3个及以上相同字符
bool isRepeat3 = repeatStringList.Count > 0;
// 获取相同的字符串
if (isRepeat3) {
errorMessage = "密码不能包括连续3个及以上相同字符。相同的字符串有 "
+ string.Format("“{0}”", string.Join("”,“", repeatStringList));
}
return !isRepeat3;
}