public bool PasswordIsValid(PasswordGeneratorSettings settings, string password) { const string RegexLowerCase = @"[a-z]"; const string RegexUpperCase = @"[A-Z]"; const string RegexNumeric = @"[\d]"; const string RegexSpecial = @"([!#$%&*@\\])+"; bool lowerCaseIsValid = !settings.IncludeLowerCase || (settings.IncludeLowerCase && Regex.IsMatch(password, RegexLowerCase)); bool upperCaseIsValid = !settings.IncludeUpperCase || (settings.IncludeUpperCase && Regex.IsMatch(password, RegexUpperCase)); bool numericIsValid = !settings.IncludeNumbers || (settings.IncludeNumbers && Regex.IsMatch(password, RegexNumeric)); bool symbolsAreValid = !settings.IncludeSpecial || (settings.IncludeSpecial && Regex.IsMatch(password, RegexSpecial)); return(lowerCaseIsValid && upperCaseIsValid && numericIsValid && symbolsAreValid); }
/// <summary> /// Generate Password based of the PasswordGeneratorSettings Criteria. /// </summary> /// <param name="_passwordGeneratorSettings"></param> /// <returns></returns> public string GeneratePassword(PasswordGeneratorSettings _passwordGeneratorSettings) { const int MaximumIdenticalCharacters = 2; char[] password = new char[_passwordGeneratorSettings.PasswordLength]; int characterSetLength = _passwordGeneratorSettings.CharacterSet.Length; System.Random random = new System.Random(); for (int characterPosition = 0; characterPosition < _passwordGeneratorSettings.PasswordLength; characterPosition++) { password[characterPosition] = _passwordGeneratorSettings.CharacterSet[random.Next(characterSetLength - 1)]; bool moreThanTwoIdenticalInARow = characterPosition > MaximumIdenticalCharacters && password[characterPosition] == password[characterPosition - 1] && password[characterPosition - 1] == password[characterPosition - 2]; if (moreThanTwoIdenticalInARow) { characterPosition--; } } return(string.Join(null, password)); }