using DeviceRepairAndOptimization.Data;
using DeviceRepairAndOptimization.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace DeviceRepairAndOptimization.Utils
{
public class PassWordValidata
{
///
/// 验证对象合集
///
List> ValidCollect;
private static PassWordValidata manager;
public static PassWordValidata Instance
{
get
{
if (manager == null)
manager = new PassWordValidata();
return manager; ;
}
}
///
/// 规则数量
///
public int RulesCount
{
get
{
int count = 0;
if (ValidCollect == null)
return count;
return ValidCollect.Count;
}
}
StringBuilder build = new StringBuilder();
///
/// 当前密码设定规则
///
public string PassWordRulesText { get { return build.ToString(); } }
///
/// 默认的特殊字符集
///
private char[] DefaultSpecialCharacters = new char[]
{
'~','`','!','@','#','$','%','^','&','*','(',')','-','_','+','-','[',']','{','}','|','\\',':',';','"','\'','<','>','.','/','?'
};
public int PasswordMinLength = 8;
public string PasswordMinLengthText = string.Empty;
///
/// 规则初始化
///
public PassWordValidata()
{
if (ValidCollect == null)
{
ValidCollect = new List>();
List rules = SystemConfigMaintenance.Instance.GetAll();
if (rules.Any(x => x.Code.Contains("PWD_")))
{
rules = rules.Where(x => x.Code.Contains("PWD_")).ToList();
foreach (sysConfig item in rules)
{
// 最小密码长度
if (item.Code.Equals("PWD_MIN_LENGTH", StringComparison.OrdinalIgnoreCase))
{
int.TryParse(item.Value, out PasswordMinLength);
PasswordMinLengthText = $"最小密码长度不能小于{PasswordMinLength}!";
//if (StrLength > 0)
//{
// build.Append($"{item.Name}为{item.Value}");
// ValidCollect.Add((s) =>
// {
// return !string.IsNullOrWhiteSpace(s) && s.Length >= StrLength;
// });
//}
}
// 必须存在小写字母
else if (item.Code.Equals("PWD_HAS_LETTER", StringComparison.OrdinalIgnoreCase) && item.Status)
{
build.Append($",{item.Name}");
ValidCollect.Add((s) =>
{
return Regex.IsMatch(s, "[a-z]");
});
}
// 必须存在大写字母
else if (item.Code.Equals("PWD_HAS_CAPITAL", StringComparison.OrdinalIgnoreCase) && item.Status)
{
build.Append($",{item.Name}");
ValidCollect.Add((s) =>
{
return Regex.IsMatch(s, "[A-Z]");
});
}
// 必须存在数字
else if (item.Code.Equals("PWD_HAS_NUMBER", StringComparison.OrdinalIgnoreCase) && item.Status)
{
build.Append($",{item.Name}");
ValidCollect.Add((s) =>
{
return Regex.IsMatch(s, "\\d");
});
}
// 必须存在特殊字符
else if (item.Code.Equals("PWD_HAS_SPECIALCHAR", StringComparison.OrdinalIgnoreCase) && item.Status)
{
build.Append($",{item.Name}");
ValidCollect.Add((s) =>
{
return (s.Where(A => { return DefaultSpecialCharacters.Contains(A); })?.Count() ?? 0) > 0;
});
}
}
}
}
}
///
/// 获取匹配的规则数量
///
///
///
public int GetTrueNumber(string value)
{
int number = 0;
if (ValidCollect != null && ValidCollect.Count > 0)
{
foreach (var item in ValidCollect)
{
if (item(value))
number++;
}
}
return number;
}
///
/// 确定序列中的所有元素是否满足条件
///
///
///
public bool CheckAll(string value)
{
return ValidCollect.All(p => p(value)) && value.Length > PasswordMinLength;
}
}
}