我有一个简单的问题。我有一个keygen为我的应用程序生成随机密码。它生成大写字母和数字,但我希望它像某些程序一样格式化它们的代码xxxx-xxxx-xxxx
。到目前为止我的代码是这个
Random random = new Random(0);
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = getrandomcode();
}
public string getrandomcode()
{
char[] tokens = {'0', '1', '2', '3', '4', '5', '7', '8', '9', 'A', 'B', 'C',
'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
char[] codeArray = new char[24];
for (int i = 0; i < 24; i++)
{
int index = random.Next(tokens.Length - 1);
codeArray[i] = tokens[index];
}
return new String(codeArray);
}
它简单易懂,所以我希望有一种方法可以实现这个代码的“ - ”。
提前感谢!
答案 0 :(得分:6)
在“for”循环中包含此内容:
if (i % 5 == 4)
{
codeArray[i] = '-';
}
else
{
int index = random.Next(tokens.Length - 1);
codeArray[i] = tokens[index];
}
答案 1 :(得分:3)
或者如果你想使用正则表达式,试试这个:
textBox1.Text = Regex.Replace(getrandomcode(), @"(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})", "$1-$2-$3-$4-$5")
答案 2 :(得分:0)
试试这个:
for (int i = 0; i < 24; i++)
{
if (i % 5 == 4) {
codeArray[i] = '-';
} else {
int index = random.Next(tokens.Length - 1);
codeArray[i] = tokens[index];
}
}
如果您希望密码包含24个非短划线字符,请将24更改为29。
但我还要告诉你,使用0种子的随机函数不是一种非常安全的生成密码的方法。如果应用程序停止并重新启动,它将在第一次第二次生成时生成相同的密码集。最好不要传递初始化参数,在这种情况下,它将使用时间为随机数生成器播种。
如果这些密码将被用于重要的东西或全世界都可以访问的东西(或两者兼而有之),那么即使这个密码也不是真正的随机安全。您应该查看加密随机数生成器,如System.Security.Cryptography.RNGCryptoServiceProvider