Как я могу использовать Memberhip.GeneratePassword для возврата пароля, который ТОЛЬКО содержит альфа-или числовые символы? Метод по умолчанию гарантирует минимальное и не максимальное количество не буквенно-цифровых паролей.
Членство Генерировать пароль только буквенно-цифровой пароль?
Ответ 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;
}