会员资格生成密码仅限字母数字密码?

时间:2010-04-12 20:21:41

标签: asp.net regex asp.net-membership membership

如何使用Membership.GeneratePassword返回仅包含字母或数字字符的密码?默认方法仅保证最小数量而非最大数量的非字母数字密码。

7 个答案:

答案 0 :(得分:55)

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

此正则表达式将使用数字字符9替换所有非字母数字字符。

答案 1 :(得分:15)

获取8个字符的字母数字密码的简单方法是生成一个guid并将其作为基础:

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.

如果你想确保第一个字符是alpha,你可以在需要时用固定字符串替换if(newPwd [0]> ='0'&& newPwd [0]< =' 9' )...

我希望有人能发现这有用。 : - )

答案 2 :(得分:13)

我意识到可能有办法做到这一点。 GUID方法很棒,除了它不混合UPPER和小写字母。在我的情况下,它只生成小写。

所以我决定使用正则表达式删除非alphas然后将结果子串到我需要的长度。

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

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

newPassword = newPassword.Substring(0, 10);

答案 3 :(得分:1)

您还可以尝试生成密码并连接非字母数字字符,直到达到所需的密码长度。

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

答案 4 :(得分:0)

我也更喜欢GUID方法 - 这是简短的版本:

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

答案 5 :(得分:0)

与breigo的解决方案有类似的方法。 也许这不是那么有效但是如此清晰和短暂

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

答案 6 :(得分:0)

从@ SollyM的回答开始,在它周围放置一个while循环,以防止所有字符的非常不可能的事件,或者太多的字符是特殊字符,然后子串抛出异常。

 name  | age
-------+----
Ashis  | 60
Arun   | 22
Nirmal | 48
Ram    | 67
Amar   | 35