Подтвердить что ты не робот

Членство Генерировать пароль только буквенно-цифровой пароль?

Как я могу использовать Memberhip.GeneratePassword для возврата пароля, который ТОЛЬКО содержит альфа-или числовые символы? Метод по умолчанию гарантирует минимальное и не максимальное количество не буквенно-цифровых паролей.

4b9b3361

Ответ 1

string newPassword = Membership.GeneratePassword(15, 0);
newPassword = Regex.Replace(newPassword, @"[^a-zA-Z0-9]", m => "9" );

Это регулярное выражение заменит все не буквенно-цифровые символы цифровым символом 9.

Ответ 2

Простым способом получить 8-значный буквенно-цифровой пароль будет генерировать руководство и использовать его в качестве основы:

string newPwd = Guid.NewGuid().ToString().Substring(0, 8);

Если вам нужен более длинный пароль, просто пропустите тире с помощью подстрок:

string newPwd = Guid.NewGuid().ToString().Substring(0, 11);
newPwd = newPwd.Substring(0, 8) + newPwd.Substring(9, 2); // to skip the dash.

Если вы хотите убедиться, что первый символ - альфа, вы можете просто заменить его при необходимости фиксированной строкой, если (newPwd [0] >= '0' && newPwd [0] <= '9 ")...

Я надеюсь, что кто-то найдет это полезным.: -)

Ответ 3

Я понял, что могут быть способы сделать это. Метод GUID замечательный, за исключением того, что он не смешивает алфавиты UPPER и нижнего регистра. В моем случае это производилось только в нижнем регистре.

Поэтому я решил использовать Regex для удаления не-альфа, а затем подстроить результаты на нужную мне длину.

string newPassword = Membership.GeneratePassword(50, 0); 

newPassword = Regex.Replace(newPassword, @"[^a-zA-Z0-9]", m => ""); 

newPassword = newPassword.Substring(0, 10);

Ответ 4

Вы также можете попытаться сгенерировать пароли и объединить не буквенно-цифровые символы, пока не достигнете требуемой длины пароля.

public string GeneratePassword(int length)
{
    var sb = new StringBuilder(length);

    while (sb.Length < length)
    {
        var tmp = System.Web.Security.Membership.GeneratePassword(length, 0);

        foreach(var c in tmp)
        {
            if(char.IsLetterOrDigit(c))
            {
                sb.Append(c);

                if (sb.Length == length)
                {
                    break;
                }
            }
        }
    }

    return sb.ToString();
}

Ответ 5

Я также предпочитаю GUID-метод - здесь короткая версия:

string password = Guid.NewGuid().ToString("N").Substring(0, 8);

Ответ 6

Существует аналогичный подход с решением breigo. Возможно, это не так эффективно, но настолько ясное и короткое

string GeneratePassword(int length)
{
     var password = "";
     while (password.Length < length)
     {
          password += string.Concat(Membership.GeneratePassword(1, 0).Where(char.IsLetterOrDigit));
     }
     return password;
}