从多个数字ID创建唯一的数字ID

时间:2016-10-31 15:25:27

标签: java algorithm

从多个数字64位ID开始生成唯一的64位ID有什么好算法?示例:

  

输入:[2,9875,0,223568,...]随机64位ID列表

     

输出:唯一的64位数字ID,对于给定的输入必须相同

我正在寻找避免ID冲突的方法。

我对这个不明确的问题道歉。

2 个答案:

答案 0 :(得分:4)

如果速度无关紧要,那么:

在md5算法中提供所有id,而不是简单地使用

a)前64位或
b)最后64位或
c)前64位xor后64位

如果速度重要

怎么样:

步骤1:重新排序所有64位ID的字节(对于输入的每个64位ID,以固定但不同的顺序排列。)(如果值不是真的,这可能会有所帮助随机分布)

步骤2: xor所有重新排列的64位ID,以获得新的64位ID。

如果您没有关于64位输入ID范围或值分布的额外信息,则无法避免在聪明的' /'最佳&#39中发生冲突;办法。因为无论你想出什么,你总会找到一组导致碰撞的输入。

答案 1 :(得分:0)

如果您想了解更多信息,

This旧问题对您有用,但您可以尝试这样做:

java.util.UUID.randomUUID().hashCode()

如果之前的解决方案无法解决您的问题,请尝试以下方法:

private static final AtomicLong COUNTER = new AtomicLong(System.currentTimeMillis()*100000);

this算法(GitHub链接)。