需要一種快速又公平的方式取得隨機數字嗎?這個免費的線上隨機數字產生器可在您選擇的任何範圍內產生一個數字——或整份數字清單——從簡單的 1 到 10 範圍,到跨越數十億的範圍都可以。在「最小值」和「最大值」中設定最小值和最大值,用「數量」選擇需要多少個數字,然後按下「產生」。兩個邊界值都會包含在結果中,因此 1 到 10 的範圍可以同時產生 1 和 10。
每個結果都直接在您的瀏覽器中使用 Web Crypto API(crypto.getRandomValues)產生——它使用作業系統提供的密碼學安全隨機性來源來產生隨機值。沒有任何內容傳送到伺服器,伺服器上也不會保存任何紀錄,我們也永遠不會看到您的數字。產生過程即時完成、完全私密,即使在網路連線緩慢的情況下,頁面載入後依然能正常運作。
這些選項是為人們真正需要隨機數字的實際情境而設計的。開啟「不重複」可確保沒有任何數字重複出現——這正是抽獎、彩券式抽籤,或將人員分組而不重複時所需要的設定。需要從 500 名參與者中選出 20 名得獎者?將「最小值」設為 1、「最大值」設為 500,開啟「不重複」,將「數量」設為 20,然後按下「產生」。「排序方式」可將結果依升序或降序排列,一個按鈕即可一次複製所有結果。將「輸出格式」從「換行」切換為「以空格分隔」或「以逗號分隔」,即可顯示「組數」:一鍵產生多組獨立抽籤——例如二十組、每組 3 個數字,用於二十輪抽籤——而「允許組間重複」則決定同一個數字是否可以出現在多於一組當中。
這種隨機性究竟是如何產生的?您的瀏覽器透過 Web Crypto API 提供密碼學安全的隨機值,而不是透過諸如 Math.random() 這樣的 JavaScript 偽隨機數產生器。當您按下「產生」時,頁面會使用 crypto.getRandomValues 請求隨機值,並用它們在您選定的範圍內產生數字。這種隨機性的底層來源由作業系統提供,因此頁面本身不需要維護自己的種子(seed)或偽隨機序列。
將原始數值對應到您所選的範圍內,往往是產生器最容易悄悄出錯的環節,這值得單獨用一段來說明。將數值對範圍大小取餘數看似是最直接的方法,但恰恰也是有偏差的方法:如果 2^32 無法被範圍大小整除,最小的一些數字出現的頻率就會略高於其他數字。這個缺陷被稱為取模偏差(modulo bias),它是可以測量的,並非只是理論問題。這個產生器的做法是:捨棄任何超出範圍最大整數倍的數值,然後重新抽取一個新值——這種技術被稱為拒絕抽樣(rejection sampling)。這樣做需要多花幾次抽取,但換來的是精確的保證:「最小值」與「最大值」之間的每一個數字,被抽中的機率都完全相等,而不只是接近相等。
是什麼讓一個數字真正做到隨機?當先前的結果無法透露關於下一個結果的任何資訊時,這個數字就足夠隨機了——而實際上可以從三個角度來理解。像 Math.random() 這樣的普通偽隨機函式執行的是一種確定性(deterministic)演算法:任何知道其內部狀態的人都能重現整個序列——這對於打亂簡報投影片順序來說完全沒問題,但對於任何結果不應被預測的場合都不適用。這個工具所使用的密碼學安全產生器,本質上也是一種演算法,但它被設計為使用作業系統提供的密碼學安全隨機性來源產生難以預測的值,並且經過建構,即使觀察其輸出也無法透露關於下一個值的任何資訊。物理隨機性,來自諸如大氣雜訊或放射性衰變這類來源,屬於與以上兩者不同的另一類別,不過對於在某個範圍內抽取一個數字而言,這種實際差異幾乎不存在。這正是瀏覽器提供獨立的 crypto API,而不是直接改進 Math.random() 的原因:兩者解決的是不同的問題,而當結果對某人而言真正重要時,只有其中一種是安全的。
一個真正隨機的序列,本來就不是為了在人眼中顯得隨機而設計的。在 1 到 10 之間抽取十個數字,您會經常看到重複、像 7、7、8 這樣接近的一對,或是連續幾個較大數字組成的短序列——而這一切都完全正常。真正的隨機性是沒有可預測的模式,而不是看起來均勻分布的:每一次抽取都是獨立的,之前出現的數字完全不會影響之後的數字,也沒有任何數字會「欠」一次出現。堅持相反看法的直覺被稱為賭徒謬誤(gambler's fallacy),正是這種直覺也讓人類自己成為糟糕的隨機數字產生器——當被要求自己想出一個隨機序列時,我們會刻意避免重複,把數值分布得比真正的機率所呈現的更加均勻。看起來出奇整齊的結果,其實正是人類的痕跡;而真正的隨機性反而會產生成簇的聚集。
為什麼選擇這個隨機數字產生器?
- 僅在瀏覽器中產生:數字在您的裝置上產生,絕不會傳送到任何地方
- 基於 Web Crypto API 的隨機性:密碼學安全性,而非 Math.random()
- 沒有取模偏差:拒絕抽樣確保範圍內每個數字被抽中的機率都相同
- 任意範圍:從 1 到 10,到跨越數十億的數值都可以,兩個邊界值均包含在內
- 「不重複」模式:為抽獎和分組產生沒有重複的清單
- 多組數字:一鍵產生多組獨立抽籤
- 排序與輸出格式:升序或降序、換行、空格或逗號
- 紀錄與儲存為檔案:保留一份日後可能需要說明的抽籤紀錄
- 無限制且免費:無需註冊、沒有使用次數限制、我們的伺服器上不會保留任何內容
隨機數字的用途遠比大多數人想像的更廣泛。教師藉此公平地隨機點名學生回答問題。直播主和行銷團隊在必須讓觀眾相信結果的場合,當眾抽出贈品和抽獎的得獎者。玩家用它取代遺失的骰子,或決定誰先開始,而各類比賽則用它抽籤決定出場順序。研究人員選取隨機樣本,以便研究結果能夠推廣到自願參與者之外的更廣泛群體。開發者用它產生測試資料、為模擬設定種子,並在 QA 過程中選取識別碼。所有這些用途的共同點,是一個日後可以被解釋清楚的隨機選擇過程:因為這個抽取過程使用了密碼學安全的隨機性,並且完全在您的裝置上完成,一旦有人提出質疑,您可以清楚說明並記錄這次抽取的過程。
這個產生器有幾個客觀的局限,值得您了解。「不重複」模式無法產生超出範圍本身所含數量的數字:1 到 10 之間根本不存在 20 個互不相同的數值。每次抽取都是獨立的,先前的結果不會影響之後的結果,因此重新整理頁面並不會重置任何週期——因為這裡本來就沒有週期存在。而且,儘管這些數字來自密碼學安全的隨機源,這裡的抽取只是一次公平的選擇,而不是一種預測:官方彩券開獎使用的是它們自己的物理設備或經過認證的設備,您瀏覽器中計算出的任何結果都與它們沒有任何關聯。在這些局限之內,結果仍具有明確的機率保證——在每一次抽取中,您所選範圍內的每個數字被抽中的機率都完全相等。