2012-07-27 61 views
0

我想生成一个类似TMP-0001354的Uniq号码,TMP将始终是相同的,只有号码会得到更改,这不应该在表格中重复。如何生成Uniq号码C#

我想要一个exp。代码应该在C#中,我将在表中插入记录时调用该函数。 SQL服务器数据库我正在使用

我想这个我不知道它会工作正常与否。

private string RandomNumberGenerator() 
    { 
     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(); 
    } 

有人请帮帮我。

+2

表?数据库表? DataTable for C#?你在说什么类型的桌子? – 2012-07-27 06:10:51

+0

使用DateTime.Now.Ticks() – Mikos 2012-07-27 06:10:59

+0

查看HiLo密钥算法。 – 2012-07-27 06:11:50

回答

2

对于生成的uniq数使用此的数字(可以从0开始):

string number_s = "TMP-" + RandomNumber(0, 9) + RandomNumber(0, 9) + RandomNumber(0, 9) + RandomNumber(0, 9) + RandomNumber(0, 9) + RandomNumber(0, 9) + RandomNumber(0, 9); 

或此(较短,但会以1开头):

string number_s = "TMP-" + RandomNumber(1000000, 9999999); 

这是RandomNumber代码:

private static readonly Random random = new Random(); 
     private static readonly object syncLock = new object(); 
     public int RandomNumber(int min, int max) 
     { 
      lock (syncLock) 
      { // synchronize 
       return random.Next(min, max); 
      } 
     } 

它为我好。希望我帮助你。

0

您可以使用迷你散列,guid,也可以使用时间年月日秒数或时间戳。

有许多方法可以使一个唯一的ID

2
System.Guid.NewGuid().ToString() 

这会产生一个唯一的编号。将常量部分附加到这个GUID中。

+0

GUID有特殊格式。不在'TMP-0000000'中 – Ria 2012-07-27 06:17:35

+0

'TMP-'只是一个不变的前缀。如果我们将该前缀添加到唯一编号,则化合物是唯一的。这个问题的主要关注点是避免重复而不是严格的格式。该标识符具有2个部分“TMP-”部分和“唯一号码”部分。那是我如何看待这个问题?如果唯一的数字部分是刚性w.r.t数字的数字,那么我确实同意你的GUID的格式不会在这里工作。 – user1071979 2012-07-27 06:27:09