需要抽出贈品活動的得獎者、點名讓學生發言,或是決定誰去買飲料?這個免費的線上隨機抽取工具能夠公平地從您貼上的任何清單中進行抽取。將您的條目放入「項目」框中——每行一個,或是以逗號分隔——透過「數量」設定您想要的抽出個數,然後點擊「產生」。一份清單至少需要兩個條目,最多可容納 1000 個條目,每個條目最長可達 200 個字元。
每一次抽取都直接在您的瀏覽器中使用 Web Crypto API (crypto.getRandomValues) 完成,這會從您瀏覽器的底層系統隨機性中提供具備密碼學強度的隨機值。您的清單永遠不會發送到伺服器,不會被記錄,我們也絕不會看到——這一點在此類工具中比在多數產生器上更為重要,因為人們貼上的通常是客戶名單、班級點名表或同事的姓名。「從檔案載入」按鈕同樣遵守這項承諾:您的瀏覽器會讀取檔案並在本地填滿該文字方塊,不會向任何地方上傳任何內容。
這些選項是專為人們實際擁有的清單格式而設計。「項目分隔符號」預設為「自動偵測」,它會讀取換行符號和逗號,並判斷您的清單使用的是哪一種,因此從試算表、聊天訊息或文件中複製的清單無需重新格式化即可直接使用。當您的資料混合了多種格式時,可以將其鎖定為「換行」、「逗號」或「空格」——並請注意,「空格」始終是一個有意的選擇,並且永遠不會是自動的,因為像全名這樣的條目本身就包含空格,如果預設按空格分割,反而會破壞您的清單。「數量」決定了要抽取的條目數,範圍從 1 到 100。要從 200 名參賽者中抽出 3 名得獎者?貼上參賽者名單,將「數量」設為 3,然後點擊「產生」。有兩個控制項僅在抽出數量達到 2 或以上時才適用,在此之前將保持灰色不可用狀態:「不重複」決定同一個條目是否可以被抽中兩次,而「輸出格式」則設定被抽出的結果應如何分隔——「每個項目佔一行」、「以空格分隔」或「以逗號分隔」。
「項目」框內的一排按鈕可執行您原本在其他應用程式中進行的編輯操作。「從檔案載入」直接從純文字或 CSV 檔案中提取清單。「隨機播放」會重新排列框中條目的順序,「排序」會按字母順序排列它們,其中的數字也會被自然排序,再次點擊則反轉順序,而「清除」則會清空文字方塊。「填寫樣本資料」會放入一個簡短的範例清單,讓您只需點擊一下就能試用這個抽取工具,而「展開以適應內容」會展開文字方塊以完整顯示長清單,「折疊到預設大小」則將其縮回預設大小。在結果下方,「全部複製」會將每個抽取結果放入剪貼簿,「儲存為檔案」將它們儲存為一個檔案,而「紀錄」會在您的瀏覽器中保留最近 10 次的抽取結果,因此找回之前的紀錄只需點擊一下。
抽取實際上是如何進行的?當您點擊「產生」時,頁面會透過 crypto.getRandomValues 向瀏覽器請求隨機值,並利用它們在您的清單中選擇位置,而不是透過 Math.random() 這樣的 JavaScript 偽隨機函數。將原始的 32 位元隨機值轉換為一個位置,正是許多抽取工具悄悄出錯的地方:將該值對清單長度取模是最直白的方法,但它帶有偏差,因為除非 2^32 能被清單的長度整除,否則清單中靠前的條目出現頻率會略高於其他條目。這種缺陷被稱為 modulo bias,它是可以測量的,而不僅僅停留在理論上。相反地,本工具會丟棄任何超出清單長度最大整數倍的值並重新抽取——這種技術稱為 rejection sampling。它會消耗幾次額外的抽取次數,但換來的是確切的公平保證,而不是近似值。清單中的位置不會改變任何事情:在每一次抽取中,第一個條目和最後一個條目擁有完全相同的機率。
「不重複」區分了兩種截然不同的抽取方式,而在統計學中它們各有名稱。當開啟它時,抽取工具會使用 Fisher-Yates 演算法對您的清單副本打亂順序,然後從頂部開始提取條目——這與從帽子裡抽籤並且不放回去是一樣的,因此沒有人會被抽中兩次,並且該規模的每一個群組被抽出的可能性也是相等的。這就是 sampling without replacement(取後不放回),這正是您在抽取得獎者、分組或決定出場順序時所需要的。當關閉它時,每一次抽取都獨立於整個清單進行,所以同一個條目可能會出現不止一次——這就是 sampling with replacement(取後放回),當每個人在每一輪中都保持入選資格時(例如在重複抽籤或快速統計抽樣中),這就是您需要的。這兩種模式沒有哪一種比另一種更公平;它們只是在回答不同的問題。
一場公平的抽籤本來就不該在表面上看起來很公平。如果在十個名字中抽出五個,您會經常看到在原始清單中相鄰的兩個結果被雙雙抽中,或者在允許重複的情況下同一個名字連續出現兩次,而這每一次其實都是很平常的現象。每一次抽取都是獨立的:先前的結果對後來的結果沒有任何影響,而且任何人都沒有「輪到」中獎的說法。堅持認為事實並非如此的直覺就是 gambler's fallacy,也正是這種直覺使我們自己在進行隨機挑選時表現得很糟糕——當被要求隨機選擇時,我們會避開第一個和最後一個條目,避免重複相同的名字,並且把我們的選擇分配得比真正的隨機機率要均勻得多。看起來可疑地整齊的結果其實是人類行為的痕跡;真正的隨機性往往會產生聚集現象。
為什麼選擇這個隨機抽取工具?
- 僅在瀏覽器內抽取:您的清單只在您的裝置上讀取,絕不會被發送到任何地方
- Web Crypto API 隨機性:具備密碼學等級的安全,而非使用 Math.random()
- 無 modulo bias:使用 rejection sampling 確保每個條目的機率完全相等
- 任何清單格式:換行、逗號或空格,無需重新格式化
- 「不重複」模式:抽取獲勝者或團隊,確保無人被選中兩次
- 多達 1000 個條目,並且單次可抽出多達 100 個結果
- 內建清單工具:從檔案載入、隨機播放、排序、清除、樣本資料
- 紀錄和儲存為檔案:保留您可能需要用來證明公平性的抽取紀錄
- 無限制且免費:無需註冊,無使用限制,不在我們的伺服器上留下任何資料
只要做出的選擇必須經受住質疑,隨機抽取就會派上用場。老師在不偏袒任何人的情況下點名學生發言,並將全班分成各個專案小組。實況主和行銷人員在觀眾面前抽取贈品和抽獎得獎者,而觀眾必須相信結果是公平的。經理們分發沒人主動承擔的任務,團隊決定報告順序或誰來值班。研究人員提取隨機的紀錄樣本以進行稽核。家人決定要看什麼節目,或是飢腸轆轆的好友群決定要去吃哪家火鍋。它們的共同點在於任何人都能在事後清楚解釋這個選擇過程:該抽籤使用了密碼學等級的隨機性,它完全在您的裝置上發生,如果後來有人詢問,「紀錄」還可以保留該結果。
了解一些客觀存在的限制是值得的。抽取工具無法抽出比您的清單所包含的更多的獨立條目——三個贏家至少需要三個名字——它的上限為 1000 個條目(每個最多 200 個字元),並在一次抽取中最多產生 100 個結果。「隨機播放」和「排序」是逐行運作的,因此只有當逗號分隔的清單被轉換為每行一個條目時,才能對其進行重新排列;而且它們倆都是重排文字方塊的內容,而不是改變抽取機制本身,無論您的條目順序如何,抽取過程都同樣公平。從設計上講,每個條目也具有完全相同的權重,因此如果一次抽取中需要某個名字的機率加倍,則必須在清單中將該名字列出兩次。在這些限制條件之內,本工具的保證是堅如磐石的——在每一次的抽取中,您清單中的每一個條目都具有完全相同的機會。