2010-04-17 222 views
-3

我要生成在.NET具有以下格式的唯一標識符:唯一標識符

XXXXX-XXXXX

其中x是一個數{0-9};

+7

請定義「唯一」的範圍。 – Armin 2010-04-17 08:03:51

+2

聞起來像功課。在這裏獲得幫助的最佳實踐是向你展示你已經完成的事情。來吧,試試看,這裏的人會讓你擺脫困境。 – 2010-04-17 08:08:47

+3

Alex,閱讀此博客條目。它會嚇到你sh **** ss:http://blogs.msdn.com/ericlippert/archive/2010/03/22/socks-birthdays-and-hash-collisions.aspx – 2010-04-18 17:16:14

回答

-1

嗯,它不會像真正的Guid那樣獨一無二,但你可以使用隨機生成每個數字。一定要使用專用靜態隨機對象,以避免得到相同的隨機序列:

private static m_random as new System.Random(); 
public string MySpecialID() 
{ 
    return string.Format("{0}{1}{2}{3}{4}-{5}{6}{7}{8}{9}", 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10)); 
} 
+1

你也可以生成兩個隨機數介於0到99999之間,填充零(使用格式)?我覺得會有分佈差異,但我的大腦在凌晨4點不起作用。 – Sapph 2010-04-17 08:17:23

+5

經過120,000次插入後,該算法的碰撞機率有超過50%。 – 2010-04-17 09:03:43

17

我要生成與以下格式.NET的唯一標識符:XXXXX-XXXXX其中x是一個數字{ 0-9}

好的,沒問題。我們不需要爲此編寫程序。我們只會親手做。

00000-00000是具有該格式的唯一標識符。完成。

哦,你想要多一個?那麼,你可能應該在問題陳述中說過。 :)

該語言中有100億個字符串,並且按順序生成它們是微不足道的。因此,爲您的第一個唯一標識符生成00000-00000。然後00000-00001爲您的第二個唯一標識符。然後00000-00002爲您的第三個唯一標識符。等等。您將能夠以這種方式生成100億個唯一標識符;你所要做的就是跟蹤哪一個是以前生成的最高值。

+1

不要傻,使用自動增量,如果你想要完成像你所說的那樣微不足道的事情。這不是一個答案。事實上它是一個笑話。 – 2010-04-18 12:01:00

+8

我向你保證,這是一個答案,並不愚蠢。 – 2010-04-18 15:18:11

+1

這在程序運行之間創建相同ID的可能性要高得多。您必須確保在世界各地運行的程序的所有實例都知道最近的ID是什麼。這只是一個非常具體的(很可能是假想的)情況下的好答案。 – 2010-04-18 16:31:19