2013-02-06 431 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位时间戳? –