使用RNGCryptoServiceProvider類創建唯一的最多8位數字符串,再在前面拼接上年月日時分秒產生的字符串,最大限度的保證生成的字符串是唯一的。
大家也可以根據自己的需求修改,日期可以取值到毫秒,這樣更能保證生成的字符串是唯一的。
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22private
static
string
GetUniqueKey()
{
int
maxSize = 8;
int
minSize = 5;
char
[] chars =
new
char
[62];
string
a;
a =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
;
chars = a.ToCharArray();
int
size = maxSize;
byte
[] data =
new
byte
[1];
RNGCryptoServiceProvider crypto =
new
RNGCryptoServiceProvider();
crypto.GetNonZeroBytes(data);
size = maxSize;
data =
new
byte
[size];
crypto.GetNonZeroBytes(data);
StringBuilder result =
new
StringBuilder(size);
foreach
(
byte
b
in
data)
{
result.Append(chars[b % (chars.Length - 1)]);
}
return
result.ToString();
}
然後調用方法,如下做了演示,每次產生的結果都不一樣
? 1 2 3 4 5 6for
(
int
i = 0; i < 10; i++)
{
string
str =
string
.Format(
"{0}{1}"
, DateTime.Now.ToString(
"yyyyMMddHHmmss"
), GetUniqueKey());
Console.WriteLine(str);
}
Console.ReadKey();