使用RNGCryptoServiceProvider类创建唯一的最多8位数字符串,再在前面拼接上年月日时分秒产生的字符串,最大限度的保证生成的字符串是唯一的。
大家也可以根据自己的需求修改,日期可以取值到毫秒,这样更能保证生成的字符串是唯一的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
private 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
6
|
for ( int i = 0; i < 10; i++) { string str = string .Format( "{0}{1}" , DateTime.Now.ToString( "yyyyMMddHHmmss" ), GetUniqueKey()); Console.WriteLine(str); } Console.ReadKey(); |