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