隨機數字產生器

在任意範圍內產生一個隨機數字、一份清單,或多組數字——全部直接在您的瀏覽器中使用密碼學安全的隨機性產生,絕不經過伺服器。

按下產生以抽選
選項

需要一種快速又公平的方式取得隨機數字嗎?這個免費的線上隨機數字產生器可在您選擇的任何範圍內產生一個數字——或整份數字清單——從簡單的 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),正是這種直覺也讓人類自己成為糟糕的隨機數字產生器——當被要求自己想出一個隨機序列時,我們會刻意避免重複,把數值分布得比真正的機率所呈現的更加均勻。看起來出奇整齊的結果,其實正是人類的痕跡;而真正的隨機性反而會產生成簇的聚集。

為什麼選擇這個隨機數字產生器?

隨機數字的用途遠比大多數人想像的更廣泛。教師藉此公平地隨機點名學生回答問題。直播主和行銷團隊在必須讓觀眾相信結果的場合,當眾抽出贈品和抽獎的得獎者。玩家用它取代遺失的骰子,或決定誰先開始,而各類比賽則用它抽籤決定出場順序。研究人員選取隨機樣本,以便研究結果能夠推廣到自願參與者之外的更廣泛群體。開發者用它產生測試資料、為模擬設定種子,並在 QA 過程中選取識別碼。所有這些用途的共同點,是一個日後可以被解釋清楚的隨機選擇過程:因為這個抽取過程使用了密碼學安全的隨機性,並且完全在您的裝置上完成,一旦有人提出質疑,您可以清楚說明並記錄這次抽取的過程。

這個產生器有幾個客觀的局限,值得您了解。「不重複」模式無法產生超出範圍本身所含數量的數字:1 到 10 之間根本不存在 20 個互不相同的數值。每次抽取都是獨立的,先前的結果不會影響之後的結果,因此重新整理頁面並不會重置任何週期——因為這裡本來就沒有週期存在。而且,儘管這些數字來自密碼學安全的隨機源,這裡的抽取只是一次公平的選擇,而不是一種預測:官方彩券開獎使用的是它們自己的物理設備或經過認證的設備,您瀏覽器中計算出的任何結果都與它們沒有任何關聯。在這些局限之內,結果仍具有明確的機率保證——在每一次抽取中,您所選範圍內的每個數字被抽中的機率都完全相等。

FAQ

這種隨機性具有密碼學安全性嗎?

這個工具使用您瀏覽器的 Web Crypto API(crypto.getRandomValues),它從作業系統提供的密碼學安全隨機性來源取得隨機性。與簡單的偽隨機函式不同,它的輸出被設計為在實際中不可預測,而拒絕抽樣確保範圍內每個數字被抽中的機率相同,不會偏向數值較小的那些數字。

如何在特定範圍內產生隨機數字?

在「最小值」欄位中輸入可能的最小數值,在「最大值」欄位中輸入最大數值,然後按下「產生」。兩個邊界都計入結果範圍之內,所以 1 到 10 的區間既能出現 1,也能出現 10。

我可以一次產生多個隨機數字嗎?

可以。在「數量」欄位中填入您需要的數量(最多 1000 個),產生器會一鍵準備好整份清單。之後您可以使用複製按鈕將所有結果複製到剪貼簿,也可以直接儲存為檔案。

我可以一次產生多組數字嗎?

可以。將「輸出格式」從「換行」切換為「以空格分隔」或「以逗號分隔」,即可顯示「組數」欄位。填入您所需的獨立抽籤數量——例如 20 組、每組 3 個數字,用於 20 輪抽籤——然後選擇是否允許不同組之間的數字重複。

我可以對產生的數字進行排序嗎?

可以。使用「排序方式」將每份清單依升序或降序排列,或者保持在「無」以維持數字產生時的原始順序。

如何避免出現重複的數字?

開啟「不重複」開關。開啟後,清單中的每個數字都能保證互不相同——非常適合抽獎、獎品抽籤,或是將人員分組。請注意,數量不能超過範圍本身的大小:1 到 10 之間無法產生 20 個互不相同的數字。

為什麼同一個數字會不斷重複出現?

因為獨立的抽取本來就可能重複,這正是隨機性真實的樣子。每一次抽取都會忽略之前的所有結果,所以在 1 到 10 的範圍內,同一個數字連續出現兩次的機率始終是十分之一——這是正常現象,不是故障。如果您需要沒有重複的清單,請開啟「不重複」——這是刻意限制抽取範圍,而不是在修復某種缺陷。

為什麼隨機序列看起來不像是隨機的?

因為真正的隨機性是沒有可預測的模式,而不是看起來均勻分布的。人們通常期望隨機結果會整齊地分散開來,所以像 7、7、8 這樣的聚集、重複和短序列會讓人感覺像是出了問題,但這恰恰正是機率本身所產生的結果。在人眼中顯得整齊的序列,往往正是那個其實並不隨機的序列。

瀏覽器中產生的隨機性可以信任嗎?

可以,只要它來自 Web Crypto API,正如這裡所使用的一樣。crypto.getRandomValues 使用作業系統提供的密碼學安全隨機性來源產生隨機值,而不是像 Math.random() 這樣的 JavaScript 偽隨機數產生器。對於任何重要的用途,都應該對 Math.random() 保持懷疑:它是確定性的(deterministic),從未被設計為不可預測。

隨機數字可以被預測或影響嗎?

在正常使用情況下,僅憑先前的結果無法實際預測下一個結果。這些數值來自您作業系統中密碼學安全的產生器,因此觀察先前的結果無法透露關於下一個結果的任何資訊,而且抽取過程完全在您的裝置上完成——沒有伺服器可以被竄改,也沒有任何請求可以被人攔截。我們自己同樣無法影響您的結果,因為我們從不會看到它們。

它適合用來選出贈品或抽獎的得獎者嗎?

適合。為每位參與者分配一個號碼,在該範圍內產生一個結果,號碼相符的參與者即為得獎者。由於隨機來源採用密碼學安全的隨機性,抽取過程也完全在您的裝置上完成,如果有參與者對結果提出質疑,這個過程可以清楚說明並記錄。至於選擇彩券號碼,這個工具起到的是隨機選擇的作用,而不是預測工具:官方彩券開獎與這個工具完全沒有關聯。

重新整理頁面會改變隨機性嗎?

不會,也完全沒有必要。每一次抽取本來就會向作業系統請求全新的數值,所以無論您連續按下十次「產生」,還是每按一次就重新整理一次頁面,結果始終是相互獨立的。這裡沒有需要重新開始的週期,也沒有會過期的狀態——重新整理只會清除畫面上顯示的結果。

這個產生器是免費的嗎?你們會儲存我的數字嗎?

這個工具完全免費,無需註冊。所有數字都在您的瀏覽器中本機產生,永遠不會離開您的裝置,所以即使我們想要,也無法儲存或查看您的結果。