Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 具有正整数格式的自定义UUID字符串表示唯一性_Java_Uuid - Fatal编程技术网

Java 具有正整数格式的自定义UUID字符串表示唯一性

Java 具有正整数格式的自定义UUID字符串表示唯一性,java,uuid,Java,Uuid,我有以下方法来创建看起来像正长数的随机ID(由于非技术原因,我不能使用UUID.randomUUID().toString(),这超出了这个问题的范围): 问题很简单:这种方法会产生独特的结果吗?(我的意思是,像在UUID.randomUUID())中一样,Java支持整数的无符号tostringLong.toUnsignedString(Long)您还需要添加一个分隔符以确保它是唯一的。可能是因为您只是牺牲了128中的2位来获得正的Long`s。您可以使用wiki公式计算碰撞概率。你考虑过这篇

我有以下方法来创建看起来像正长数的随机ID(由于非技术原因,我不能使用
UUID.randomUUID().toString()
,这超出了这个问题的范围):


问题很简单:这种方法会产生独特的结果吗?(我的意思是,像在
UUID.randomUUID()
)中一样,Java支持整数的无符号tostring
Long.toUnsignedString(Long)
您还需要添加一个分隔符以确保它是唯一的。可能是因为您只是牺牲了128中的2位来获得正的Long`s。您可以使用wiki公式计算碰撞概率。你考虑过这篇帖子吗?@vandench感谢你给我指出
Long.toUnsignedString(Long)
,以及关于分隔符的。。。实际上这是我问题的核心。。。您认为用
0
s左填充最低有效位会被视为有效的分隔符吗?填充会起作用,您只需要确保
123+21
!=<代码>12+321。你可以使用一个定界符,每个长度使用16个十六进制字符,找到最大的长度值并计算数字和填充,只要你能确定哪个数字是哪个,任何东西都可以工作。您甚至可以假设在Base64中将其表示为128位整数
Long.toUnsignedString(Long)
您还需要添加一个分隔符以确保它是唯一的。可能是因为您只是牺牲了128中的2位来获得正的Long`s。您可以使用wiki公式计算碰撞概率。你考虑过这篇帖子吗?@vandench感谢你给我指出
Long.toUnsignedString(Long)
,以及关于分隔符的。。。实际上这是我问题的核心。。。您认为用
0
s左填充最低有效位会被视为有效的分隔符吗?填充会起作用,您只需要确保
123+21
!=<代码>12+321。你可以使用一个定界符,每个长度使用16个十六进制字符,找到最大的长度值并计算数字和填充,只要你能确定哪个数字是哪个,任何东西都可以工作。您甚至可以假设它在Base64中表示为128位整数。
public String createRandomId() {
    UUID uuid = UUID.randomUUID();
    return String.valueOf(uuid.getMostSignificantBits() & Long.MAX_VALUE) +
            (uuid.getLeastSignificantBits() & Long.MAX_VALUE);
}