来自序列的唯一随机整数
Unique random int from sequence
我正在尝试创建唯一的随机标识符策略。我不想存储或查询所有已使用的 ID,我想使用生成数字 0 -> Integer.MAX_VALUE 的序列作为唯一性来源。我所缺少的是一个函数,它将序列中的每个数字投影到同一范围内的另一个数字。
你能指出一些快速双射函数吗? (最好在 Java)。
提前致谢
如果你想产生 "unguessable" 个随机数,你可以取 SecureRandom.nextLong()
并附加 System.nanoTime()
。 nanoTime 部分更容易猜到,但在很短的时间后不会重复。 nextLong部分以后可能会重复,但是很难猜。
请注意,如果您的应用程序中有任何硬编码的确定性双射函数,并且有人能够获取并反转它(获取源代码、反编译 class 文件等),那么您的 ID 将被泄露: 很容易找到 next/previous 个数字。
我正在尝试创建唯一的随机标识符策略。我不想存储或查询所有已使用的 ID,我想使用生成数字 0 -> Integer.MAX_VALUE 的序列作为唯一性来源。我所缺少的是一个函数,它将序列中的每个数字投影到同一范围内的另一个数字。
你能指出一些快速双射函数吗? (最好在 Java)。
提前致谢
如果你想产生 "unguessable" 个随机数,你可以取 SecureRandom.nextLong()
并附加 System.nanoTime()
。 nanoTime 部分更容易猜到,但在很短的时间后不会重复。 nextLong部分以后可能会重复,但是很难猜。
请注意,如果您的应用程序中有任何硬编码的确定性双射函数,并且有人能够获取并反转它(获取源代码、反编译 class 文件等),那么您的 ID 将被泄露: 很容易找到 next/previous 个数字。