2010-12-10 49 views
2

如何在沒有數據庫的情況下在c#中生成唯一編號?生成沒有數據庫的唯一編號

(最大17位)。

編輯:數字只。

+0

定義「唯一」。 – ybungalobill 2010-12-10 11:06:45

+6

獨特性如何?獨特的當前過程?機器?宇宙? – 2010-12-10 11:06:47

+0

@Malachi:記住隨機可能產生兩次相同的數字;所以它不一定是唯一的。 – 2010-12-10 11:07:38

回答

6

你可以看看Twitter的開源Snowflake project尋找靈感,它解決了類似的問題。它是用Scala編寫的,但是簡化版本在C#中編碼非常簡單。

前提是獲取當前的時間戳,並將其左移一位,將右側的位留給一個簡單的序列號,每當時間戳增量時將其復位爲0。通過處理位長和改變時間戳的粒度(例如決定是使用秒還是毫秒),你應該能夠很容易地生成可以適合17位的東西。

0

您可以使用GUID,GUID(全局唯一標識符)是一個128位整數,可用於唯一標識某些內容。

System.Guid.NewGuid()

+1

2^128 = 3.4 * 10^38> 10^17即你違反17位數的要求 – CodesInChaos 2010-12-10 15:24:05