2013-02-06 432 views
1

我寫Android應用給每個客戶端長的用戶ID通過以下公式:生成隨機長的用戶ID

long userID = (long) (Math.random() * 2 * Long.MAX_VALUE - Long.MAX_VALUE);

我是否利用正確MAX_VALUE即採取一切可能的長值的優勢?

我有兩個重複的用戶ID與10k,100k或1m用戶的機會是什麼?我怎麼計算這個?

+2

你應該使用新的隨機()nextLong();相反... –

+1

在使用所有可能值的一半之後,您可以期待第一個重複項(假設您有適當的隨機算法),所以在您的情況下它可能是'2^34'值。這就是爲什麼使用UUID(128位)更好的原因如下。或者,您可以使用無衝突(無重複保證)的長ID,例如Twitter Flake Id生成器。 – Tom

+0

謝謝湯姆,這就是我想知道的。 我不希望有那麼多用戶,所以在我的情況下,我認爲使用128位隨機uuid足夠安全。我會寫一個待辦事項,以便在稍後階段我會讓我的服務器檢查重複的用戶。 –

回答

6

您可以使用以下提到的那些中任一個產生隨機UUID:

  1. 而不是使用隨機獲得一個長期用戶ID,使用以毫秒錶示的當前日期和時間。

  2. 使用隨機UUID

+0

或者同時使用(時間戳+隨機)。這將使衝突極不可能 –

+0

日期和時間+1,因爲這是保證不重複。然而,它會在一定程度上將用戶ID個性化。 –

+0

感謝與uuid的提示,這似乎是我正在尋找。 所以我應該同時使用128位隨機uuid以及64位時間戳? –