SheepDev

雜湊、ID與隨機數

隨機 ID 要多長?從碰撞機率判斷

使用工具

短隨機 ID 方便但擔心重複。候選總數只是起點,還需產生數量及是否均勻獨立。用理論熵與碰撞工具分別改變條件;結果評估指定模型,不認證實際 ID 方案安全。

十六種字元、八位,候選數為 2³²

十六進位 ID 候選空間
alphabet = 16
length = 8
16⁸ = 4,294,967,296
log₂(16⁸) = 32 bits

填字元種類 16、長度 8。0~9、a~f 均勻獨立選擇,得 4294967296 種、32 bit,不是八 bit。八位十進數字空間不同;固定連字號增加外觀長度卻不增隨機選擇。

字元種類應按儲存與比較實際區分的值計數。忽略大小寫的儲存不能把 A、a 當獨立選擇。先查產生集與後續正規化,工具不會由實際字串清單推斷。

產生越多,比較的配對增長更快

10,000 個 ID 的配對數
k = 10,000
k × (k − 1) ÷ 2 = 49,995,000 pairs

十六種、八位、產生 10000 個,至少一對碰撞約 1.16%。候選約四十三億看似很大,但問題是任意一對而非匹配固定參考。萬件含近五千萬對,不能只看件數占候選比例。

collisionProbability 是比例,0.01 為 1% 不是 0.01%。也不表示每百個 ID 一個重複,而是整組產生結果至少有一處重複的機率。

固定產生數再比較長度

十六種字元每增一位,空間乘十六。保持 10000 件,比較八、九、十位,才能隔離長度影響。先逐項改變,再對候選方案檢查預計最大件數。

件數應涵蓋同一命名空間中重複會衝突的全量,不僅一批。每天萬件保留多年不能只填一天。分空間能否重用取決於識別規則,不能預設加日期前綴就解決。

檢查實際產生是否均勻獨立

模型假設均勻獨立。時刻、序號、偏隨機或重複 Seed 序列不能直接套用;必含字元類等條件也改變候選集。採用結果前需對照實際產生程式。

大件數時還檢查近似適用範圍。機率未算出不等於零,顯示空間大小也不代表所有欄位已算。應查看 method 與未計算狀態,不誇大近似精度。

不易重複不等於可作秘密權杖

公開商品 ID 不重複與密碼重設權杖不可猜是不同要求。後者需另看不可預測性、產生、嘗試控制、有效期。工具計算參數模型,不評估實際密碼安全。

最後需定可接受風險與碰撞偵測、重新產生等處理。低機率不自動取消唯一性限制與並行處理。範例用於比較長度,不是通用推薦字元數。

參考資料

使用工具

指南 →