2015-05-31 125 views
0

我正嘗試創建唯一的隨機標識符策略。我不想存儲或查詢已經使用過的所有id,我想用一個序列生成數字0 - > Integer.MAX_VALUE作爲唯一源。我缺少的東西是一個函數,它會將每個數字從序列投影到另一個範圍內的另一個數字。來自序列的唯一隨機int

你能指點一些快速雙射功能嗎? (最好用Java)。

在此先感謝

+1

所以你想要一個簡單的計數器?這是什麼意思:*「我是我缺少的東西是一個函數,將從序列中的每個數字投影到另一個在同一範圍內。」*? – Tom

+1

爲什麼停在'Integer.MAX_VALUE'。爲什麼不停在Long.MAX_VALUE'?你是針對特定的數據庫嗎?爲什麼不讓DB處理這個問題? –

+0

它可以很長:) – malejpavouk

回答

1

如果你想生產「難以猜測的」隨機數,你可以採取SecureRandom.nextLong()System.nanoTime()其追加。 nanoTime部分更容易猜測,但在很短的時間內不會重複。未來龍的部分可能會在未來重演,但是很難猜測。

請注意,如果您的應用程序中有任何硬編碼的拒絕雙射函數,並且有人可以獲取並反轉它(獲取源代碼,反編譯類文件等),那麼您的ID將會受到影響:容易找到給定的下一個/前一個數字。