Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成随机长用户ID_Java_Random_Statistics_Long Integer_Stochastic - Fatal编程技术网

Java 生成随机长用户ID

Java 生成随机长用户ID,java,random,statistics,long-integer,stochastic,Java,Random,Statistics,Long Integer,Stochastic,我正在编写一个android应用程序,通过以下公式为每个客户端提供一个长用户ID: long userID=(long)(Math.random()*2*long.MAX\u值-long.MAX\u值) 我是否正确利用了最大值,即利用了所有可能的长值 我拥有10k、100k或1m用户的两个重复用户ID的机会有多大?我如何计算呢?您可以使用randomuid() 您可以使用以下任一选项: 使用以毫秒为单位的当前日期和时间,而不是使用random获取长用户id 使用随机UUID 简单唯一标识符 13

我正在编写一个android应用程序,通过以下公式为每个客户端提供一个长用户ID:

long userID=(long)(Math.random()*2*long.MAX\u值-long.MAX\u值)

我是否正确利用了最大值,即利用了所有可能的长值


我拥有10k、100k或1m用户的两个重复用户ID的机会有多大?我如何计算呢?

您可以使用
randomuid()


您可以使用以下任一选项:

  • 使用以毫秒为单位的当前日期和时间,而不是使用random获取长用户id

  • 使用随机UUID

  • 简单唯一标识符

    136年后,您可能会在同一实例上看到重复的ID,这对于中小型项目来说已经足够了

    例如:

    long id = SUID.id().get();
    

    您可能应该使用new Random().nextLong();相反,在使用了所有可能值的一半后(假设您有合适的随机算法),您可以预期第一个重复值,因此在您的情况下,它可能是
    2^34
    值。这就是为什么最好按照下面的建议使用UUID(128位)。或者,您可以使用无冲突(不保证重复)长Id,例如Twitter Flake Id生成器。谢谢tom,这正是我想知道的。我不希望有那么多用户,所以在我的例子中,我认为使用128位随机uuid足够安全。我将编写一个todo,以便在稍后阶段让我的服务器检查重复的用户。或者同时使用这两种方法(时间戳+随机)。这将使日期和时间的冲突非常不可能+1,因为这保证不会产生重复。不过,它会在一定程度上为用户ID引入个性化。感谢uuid的提示,这才是我真正想要的。所以我应该同时使用128位随机uuid和64位时间戳?好吧,你真的需要128位唯一ID还是64位就足够了?我认为即使64位也足够了-但我不会只基于时间使用ID,我认为它比随机64位值更安全。