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; } } }