線上隨機抽取工具

貼上任何姓名、任務或想法清單,讓這個工具公平地做出選擇。每次抽取都在您的瀏覽器中執行,並使用密碼學等級的安全隨機性,因此您的清單絕不會離開您的裝置。

按下產生以抽選
預設情況下,分隔符號是自動確定的,或者您可以在下面選擇它。
進階選項

需要抽出贈品活動的得獎者、點名讓學生發言,或是決定誰去買飲料?這個免費的線上隨機抽取工具能夠公平地從您貼上的任何清單中進行抽取。將您的條目放入「項目」框中——每行一個,或是以逗號分隔——透過「數量」設定您想要的抽出個數,然後點擊「產生」。一份清單至少需要兩個條目,最多可容納 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,也正是這種直覺使我們自己在進行隨機挑選時表現得很糟糕——當被要求隨機選擇時,我們會避開第一個和最後一個條目,避免重複相同的名字,並且把我們的選擇分配得比真正的隨機機率要均勻得多。看起來可疑地整齊的結果其實是人類行為的痕跡;真正的隨機性往往會產生聚集現象。

為什麼選擇這個隨機抽取工具?

只要做出的選擇必須經受住質疑,隨機抽取就會派上用場。老師在不偏袒任何人的情況下點名學生發言,並將全班分成各個專案小組。實況主和行銷人員在觀眾面前抽取贈品和抽獎得獎者,而觀眾必須相信結果是公平的。經理們分發沒人主動承擔的任務,團隊決定報告順序或誰來值班。研究人員提取隨機的紀錄樣本以進行稽核。家人決定要看什麼節目,或是飢腸轆轆的好友群決定要去吃哪家火鍋。它們的共同點在於任何人都能在事後清楚解釋這個選擇過程:該抽籤使用了密碼學等級的隨機性,它完全在您的裝置上發生,如果後來有人詢問,「紀錄」還可以保留該結果。

了解一些客觀存在的限制是值得的。抽取工具無法抽出比您的清單所包含的更多的獨立條目——三個贏家至少需要三個名字——它的上限為 1000 個條目(每個最多 200 個字元),並在一次抽取中最多產生 100 個結果。「隨機播放」和「排序」是逐行運作的,因此只有當逗號分隔的清單被轉換為每行一個條目時,才能對其進行重新排列;而且它們倆都是重排文字方塊的內容,而不是改變抽取機制本身,無論您的條目順序如何,抽取過程都同樣公平。從設計上講,每個條目也具有完全相同的權重,因此如果一次抽取中需要某個名字的機率加倍,則必須在清單中將該名字列出兩次。在這些限制條件之內,本工具的保證是堅如磐石的——在每一次的抽取中,您清單中的每一個條目都具有完全相同的機會。

FAQ

如何從清單中抽取一個隨機姓名?

將姓名貼到「項目」框中——每行一個,或以逗號或空格分隔——將「數量」保持為 1,然後點擊「產生」。一個名字將被立刻抽出。如果需要一次抽取多個名字,請將「數量」增加到您需要的數值。

這樣的選擇真的公平嗎?

是的。每一次抽取都使用了您瀏覽器的 Web Crypto API (crypto.getRandomValues) 並結合 rejection sampling,這消除了常規實作中容易產生的 modulo bias。無論某個條目在清單中的位置如何,它被選中的機率都完全相等;並且在抽取多個不同條目時,使用了 Fisher-Yates 演算法進行順序打亂,因此該規模的每一個群組被抽出的可能性也是相等的。

我的清單會被上傳到你們的伺服器嗎?

不會。整個抽取過程都在您的瀏覽器本地執行:您的清單、抽取結果和紀錄絕不會離開您的裝置,因此貼上姓名、電子郵件或任何私密清單都是安全的。「從檔案載入」也是本地操作——您的瀏覽器會自行讀取該檔案,不會上傳任何內容。

我可以貼上用逗號或空格分隔的清單,而不是每個項目佔一行嗎?

可以。「項目分隔符號」預設為「自動偵測」,它能自行區分換行符號和逗號,因此從試算表、聊天訊息或文件中複製的清單可以直接使用。以空格分隔的清單需要多做一步——將「項目分隔符號」設定為「空格」——因為像全名這樣的條目本身就包含空格,系統永遠不會自動基於空格對它們進行分割。如果您的資料混合了多種格式,請將「項目分隔符號」鎖定為「換行」或「逗號」。

「不重複」開關有什麼作用?

當開啟「不重複」時,被抽中的每個條目都是不同的——就像從帽子裡抽籤而不放回去一樣,這正是您在抽取得獎者或分組時所需要的。當它關閉時,同一個條目可以被多次抽中,統計學家稱之為 sampling with replacement。

為什麼「不重複」和「輸出格式」這兩個控制項是灰色的?

因為它們僅在您抽取多個條目時才適用,正如旁邊的提示所述:「僅當數量大於1時才適用」。將「數量」增加到 2 或更高,這兩個控制項就會變為可用;在數量為 1 時,沒有任何內容可以重複,也沒有任何結果需要分隔。

「輸出格式」選項有什麼作用?

它設定了如何顯示和複製多個被抽中的結果:顯示為「每個項目佔一行」,用於快速聊天訊息的「以空格分隔」,或者用於貼到試算表或腳本中的「以逗號分隔」。一旦「數量」達到 2 或以上,它就會變得可用。

「隨機播放」和「排序」按鈕有什麼作用?

「隨機播放」會重新排列「項目」框中條目的順序,而「排序」會按字母順序排列它們,其中的數字也會被自然排序——再次點擊會反轉該順序。兩者改變的只是您的清單的顯示方式,而不是抽籤機制的運作方式:無論條目的順序如何,該抽取工具都同樣公平。

清單可以包含多少個項目,我一次可以抽取多少個?

清單可容納 2 到 1000 個條目,每個條目最多 200 個字元,並且一次抽取最多返回 100 個結果。空行和周圍的空格將被忽略,因此從試算表或文件貼上的清單可以直接原樣使用。

它適合用於抽取贈品或抽獎活動的得獎者嗎?

適合,而且這是最常見的用途之一。貼上參賽者名單,將「數量」設定為獎品數量,保持開啟「不重複」以確保無人能中獎兩次,然後點擊「產生」。由於該抽籤使用了密碼學等級的隨機性並且完全在您的裝置上執行,這個過程很容易解釋,而且如果參賽者事後提出質疑,「紀錄」還可以保留該結果。

我可以用它將人們分成不同的小組嗎?

可以。將「數量」設定為第一組的人數並點擊「產生」——抽出的名字就是第一組。將這些名字從清單中刪除,然後重複該操作以抽取下一組。保持開啟「不重複」可以確保無人同時出現在兩個小組中。

為什麼同一個名字會連續出現兩次?

因為獨立的抽籤本來就會出現重複,而這正是隨機性的真實模樣。每一次抽取都會忽略之前發生的所有抽取,因此在一個包含十個名字的清單中,同一個名字連續出現兩次的機率每次都是 1/10——這很常見,並不是出了故障。如果您需要同一次抽取中的每個結果都不相同,請開啟「不重複」。

這個抽取工具會記住我的選擇嗎?它是免費的嗎?

「紀錄」會在您自己的瀏覽器中保留最近 10 次的抽取紀錄,因此您可以恢復、複製或刪除之前的紀錄,並在您想清理時隨時清空所有紀錄。該工具完全免費且無需註冊,而且因為沒有任何資料被傳輸,即使我們想看,我們也無法看到或儲存您的抽取結果。