我需要生成一个限制为6个块的唯一ID。该ID 应包含大写字母和数字。
我该怎么办?我在使用日期,但我失败了。
更多细节......
这个Id不需要重复,但应该单独生成,而不是基于最后一个序列。 我可以用任何语言做到这一点。
答案 0 :(得分:0)
我发了一篇博文来生成一个强大的SQL Server密码。您可以根据需要进行调整。有关更好的格式博文here.
我们要求我们的密码必须每90天更改一次。我想自动化这个,听起来很容易,但并不容易。为什么?因为密码有很多规则。
首先,我必须将它存储在web.config中。所以没有XML特殊字符。
quot "
amp &
apos '
lt <
gt >
接下来,如果在OLE DB或ODBC连接字符串中使用,则密码不得包含以下字符:[] {}(),; ? *! @
最后,强密码必须包含至少三个以下类别的字符:
English uppercase characters (A through Z)
English lowercase characters (a through z)
Base 10 digits (0 through 9)
Nonalphabetic characters (for example: !, $, #, %)
因此,记住所有这些规则,我创建了一个简单的类。我可以打电话给
public class PasswordGenerator
{
private static string CHARS_LCASE = "abcdefgijkmnopqrstwxyz";
private static string CHARS_UCASE = "ABCDEFGHJKLMNPQRSTWXYZ";
private static string CHARS_NUMERIC = "23456789";
private static string CHARS_SPECIAL = "*-+_%/";
private static string CHARS_ALL = CHARS_LCASE + CHARS_UCASE + CHARS_NUMERIC + CHARS_SPECIAL;
public static string GeneratePassword(int length)
{
char[] chars = new char[length];
Random rand = new Random();
for (int i = 0; i < length; i++)
{
switch (i)
{
case 0:
chars[i] = CHARS_LCASE[rand.Next(0, CHARS_LCASE.Length)];
break;
case 1:
chars[i] = CHARS_UCASE[rand.Next(0, CHARS_UCASE.Length)];
break;
case 2:
chars[i] = CHARS_NUMERIC[rand.Next(0, CHARS_NUMERIC.Length)];
break;
case 3:
chars[i] = CHARS_SPECIAL[rand.Next(0, CHARS_SPECIAL.Length)];
break;
default:
chars[i] = CHARS_ALL[rand.Next(0, CHARS_ALL.Length)];
break;
}
}
return new string(chars);
}
}
所以现在我只需要调用它来获取新密码:
PasswordGenerator.GeneratePassword(13)