隨機數生成器 (加密學安全, 帶去重模式)
選最小、最大、數量即可生成加密學安全的隨機整數。開啟「去重」用於抽獎與彩票 (無放回抽取)。
運作原理
為什麼這真的是隨機
我們用 crypto.getRandomValues — 瀏覽器加密學安全的隨機源 — 而非 Math.random()。CSPRNG 輸出無法從過去值預測, 這對彩票抽取、博彩相關應用、以及任何「真正隨機」是要求而非「任意」的場景至關重要。
我們也用棄卻取樣確保所選範圍內分佈完全均勻。素樸的 'random % range' 在 range 不能整除 2³² 時引入偏差。棄卻取樣丟棄會導致偏差的值並重試, 所以你範圍內的每個數有完全相同的機率。
去重模式與允許重複模式
預設模式: 每個數獨立 — 可能有重複。這是日常使用中通常意義的「隨機」(擲骰、選電影、隨機化測試)。
去重模式: 無放回抽樣 — 一旦抽出某數, 同一批次內不再抽到。適合: 彩票 (1-49 中選 6 個)、抽獎、組隊分配、任何「從 M 中選 N 個」場合。需要 數量 ≤ 範圍。
常見用例
彩票 / 抽獎: 1-49 中 6 個唯一數, 或你的抽獎規則。開啟「去重」。
擲骰: 1-6 範圍 (D20 用 1-20)。關閉「去重」讓每次擲獨立。
測試隨機抽樣: 1-10000 中選 10 個使用者 ID 抽查。「去重」避免重複。
模擬拋硬幣: 0-1 範圍多次。統計正反次數檢查公平性 (大樣本會接近 50/50)。
常見問題
›對抽獎或彩票公平嗎?
隨機性加密學安全且無偏。法律上是否「公平」用於官方彩票取決於司法轄區規則 — 許多要求經過認證的硬體 RNG。
›與 Math.random() 的差別?
Math.random() 用演算法, 攻擊者可從過去輸出預測後續。crypto.getRandomValues 用 OS 級加密 RNG 不可預測。需要真正公平就用本工具。
›可以得負數嗎?
可以。把最小值設為負值。
›範圍最大是多少?
受 JavaScript 安全整數範圍限制 (~2⁵³), 但實際十億級毫無問題。棄卻取樣技術正確處理任何範圍。
›為什麼數量 > 範圍時「去重」失敗?
如果你想從 1-5 選 10 個唯一數, 4 個不存在。校驗提示擴大範圍或減少數量。
›適合擲骰嗎?
適合 — 設範圍 1-6 (或你的骰), 關閉「去重」讓每次擲獨立。
›可以儲存種子復現嗎?
不能 — 安全隨機按設計無種子。需可復現「隨機」用於測試時, 用帶種子 PRNG 庫。
›資料會上傳嗎?
不會。生成完全在本地。
相關工具
最後更新: