我想在ASP.NET C#Web应用程序中创建一个随机密码生成器。
我创建了它,但它仅适用于整数格式。如果我给任何字符它显示调试错误为“我的输入格式错误”。
但我想输入字符串和整数。例如,我的文本框字段可能是
DFT-001
我想为这个值设置一个随机密码,而且我的长度应该仅限于8位数或字符。
我目前的代码:
public static string CreateRandomPassword(int PasswordLength)
{
string _allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789-";
Random randNum = new Random();
char[] chars = new char[PasswordLength];
int allowedCharCount = _allowedChars.Length;
for (int i = 0; i < PasswordLength; i++)
{
chars[i] = _allowedChars[(int)((_allowedChars.Length) * randNum.NextDouble())];
}
return new string(chars);
}
protected void Button1_Click(object sender, EventArgs e)
{
userid.Text = "Your id is: " + id.Text;
if(id .Text!="")
{
string myInt = id.Text.ToString();
password.Text = "Your password is: " + CreateRandomPassword(int.Parse(myInt));
}
}
答案 0 :(得分:4)
根据您的要求,您可以采取一些措施来纠正此问题。
public static string CreateRandomPassword() //If you are always going to want 8 characters then there is no need to pass a length argument
{
string _allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789-";
Random randNum = new Random((int)DateTime.Now.Ticks); //Don't forget to seed your random, or else it won't really be random
char[] chars = new char[8];
//again, no need to pass this a variable if you always want 8
for (int i = 0; i < 8; i++)
{
chars[i] = _allowedChars[randNum.Next(_allowedChars.Length)];
//No need to over complicate this, passing an integer value to Random.Next will "Return a nonnegative random number less than the specified maximum."
}
return new string(chars);
}
protected void Button1_Click(object sender, EventArgs e)
{
userid.Text = "Your id is: " + id.Text;
if(id .Text!="")
{
password.Text = "Your password is: " + CreateRandomPassword();
}
}
如果我已经明白你想要做什么,那么这应该会让你到那儿。
答案 1 :(得分:3)
不应该是:
password.Text = CreateRandomPassword(int.Prase(myInt))
然而,你很奇怪:
如果您的用户ID是345678,那么您创建的密码包含345,678个字符!请检查您的程序逻辑。
答案 2 :(得分:1)
在asp.net
答案 3 :(得分:1)
如果使用Random
作为局部变量(即使使用Ticks
作为种子),根据多次调用函数的速度,密码看起来会相似。
解决方法是将其用作static
变量,以确保结果真正随机。
private static Random rand = new Random();
另一个是使用.net内置解决方案,如Path.GetRandomFileName()
这会给你带来像
// w143kxnu.idj
仅使用前8个字符,并将一些字符任意更改为Upper()
。
答案 4 :(得分:0)
将Button_Click方法更改为以下内容将为您提供8个字符的随机密码:
static const int PASSWORD_LENGTH = 8;
protected void Button1_Click(object sender, EventArgs e)
{
userid.Text = "Your id is: " + id.Text;
if(id .Text!="")
{
string myInt = id.Text.ToString();
password.Text = "Your password is: " + CreateRandomPassword(PASSWORD_LENGTH);
}
}
否则,如果id.Text
包含任何字母,则会失败,这很可能是您遇到的错误。
答案 5 :(得分:0)
有2个问题。第一个id.Text.ToString()
可能包含一些字符,使其无法解析为int
。 “helo123”无法直接解析为int。这导致“输入格式错误”。只有在您确定ID仅包含数字时才应执行此操作。
其次,CreateRandomPassword(int.Parse(myInt))
创建的密码与id的值一样长。您应该CreateRandomPassword(10)
或CreateRandomPassword(randNum.Next(5, 12))
。如果您的ID为500,则您的密码长度为500个字符,如果您的字段应为32个字符,则可能会因“输入格式错误”而失败。
答案 6 :(得分:0)
首先我们从“0123456789”中取6(任意)随机数。
然后我们创建一个返回随机数的函数。
private string GetRandomNumber()
{
var chars = "0123456789";
var random = new Random();
var result = new string(
Enumerable.Repeat(chars, 6)
.Select(s => s[random.Next(s.Length)])
.ToArray());
return result;
}
Visit Here查看完整示例。