Yes or No 產生器透過從瀏覽器的 Web Crypto API 抽取一個 Uint32 整數,並將偶數對應到 Yes、奇數對應到 No,藉此產生隨機的 Yes 或 No 答案,讓每個答案恰好對應 2^32 個可能來源值中的 2^31 個。由於 2 可以整除 2^32 的來源範圍,瀏覽器密碼學安全產生器所產生的每個有效 Uint32 都可以被使用,一般的二元用途不需要進行拒絕抽樣。問題、答案,以及最多 20 筆最新優先的歷史紀錄,都只保留在當前的瀏覽器分頁中,從不傳送到伺服器、帳號或遠端服務。這種組合——每次點擊一個無偏差的整數、一個可以在頁面上清楚描述的刻意有限的對應方式,以及一個明確在本地端的資料流程——正是這個工具與骰子、轉盤或基於較弱隨機來源所建構的一般輔助工具之間的差別。本文的其餘部分將詳細說明這個對應是如何建構的、如何使用 Yes or No 產生器,以及隨意提問和嚴肅決策之間的界線應該如何拿捏。

50/50 的 Yes or No 產生器如何運作
這個工具的核心是一個名為 Crypto.getRandomValues 的基本功能。頁面透過該呼叫填入一個單元素 Uint32Array,W3C Web Cryptography 規範將其定義為從包含 0 到 4,294,967,295 的範圍中均勻抽取一個整數。每次點擊都會向 Web Crypto 請求一個全新的整數;頁面上的其他內容——無論是問題、歷史紀錄、上一個答案,還是當前時間——都不會影響回傳的整數是哪一個。這種隔離性正是使用密碼學來源的全部意義:每次提問都進行一次乾淨的抽取。
取得整數後,工具會套用一個簡單的對應方式。針對兩種結果,工具會計算出不超過 2^32 來源範圍的最大結果數倍數,接受低於該上限的值,拒絕等於或高於該上限的值,然後用餘數運算對接受的值進行對應。當範圍無法整除時,拒絕抽樣可以避免較低索引分到額外比例的來源值。具體到 Yes 和 No,2 可以整除 2^32,因此接受上限就是完整的 Uint32 範圍,永遠不會拒絕任何有效值。偶數對應到 Yes,奇數對應到 No,每種結果恰好得到 2^31 個來源值。對應函式是以通用的 N 結果對應器實作,並在確定性的測試中以三種結果的邊界進行驗證;正是這個邊界測試證明了拒絕路徑確實有效,儘管它在一般的 Yes 或 No 使用中永遠不會被觸發。
工具同時將重抽次數上限設定為 128。設定這個上限是因為對應方式會在迴圈中接受或拒絕所抽到的 Uint32;在正常使用下,一次全新的接受值會立刻產生,但這個上限可以防止注入的損壞來源或故障的平台實作讓頁面永遠卡住。Web Crypto 的實作是由瀏覽器提供的,工具刻意不宣稱可以存取實體的真隨機性,也不會公開底層產生器的演算法。它使用瀏覽器回傳的結果,遵循 W3C Web Cryptography API 對其填入方式的定義,並由 MDN 獨立地記錄其行為。對應方式是這個工具本身擁有並在測試中驗證的部分;隨機來源則是它帶著完整標註借用的部分。
在您的瀏覽器中產生 Yes 或 No
- 在非必填的問題欄位中輸入一個輕鬆的問題,或將欄位留空。工具最多接受 1,000 個 UTF-16 程式碼單元;在剛好達到上限時會被接受,超過一個程式碼單元則會失敗而不會截斷。空白文字是有效的,因為問題本身是非必填的。
- 點選 Generate Yes or No 按鈕。工具會呼叫 Web Crypto 取得一個 Uint32、套用對應方式,並將當前答案顯眼地顯示在歷史紀錄上方。
- 讀取結果。如果 Web Crypto 遺失、被封鎖或拋出例外,工具會回報明確的失敗訊息且不產生任何答案;它刻意不會回退到 Math.random。
- 如果您想比較最近的答案,可以查看最新優先的歷史紀錄清單。該清單最多保留 20 筆項目;在產生第二十一個答案時,最舊的項目會被移除,丟棄數量也會更新。
- 完成後若想重新開始,請清除歷史紀錄。清除會重設可見項目與丟棄數量,並移除當前答案。
非必填問題與歷史紀錄的實際作用
問題欄位是一個標籤,而不是一個變數。它唯一的作用是當您回顧歷史紀錄時,提醒您某個答案是對應到哪個提問。編輯問題會清除顯眼顯示的當前答案以及任何先前的錯誤訊息,避免與舊措辭相關的答案被誤標;編輯並不會移除歷史紀錄。問題文字會與產生的項目一起按原樣儲存在本地端,而修剪(trimming)操作只用於在欄位為空或只有空白字元時,決定歷史紀錄是否應顯示「No question」標籤。由於問題從不影響隨機抽取,因此兩個措辭不同但時機相同的提問,仍然會得到獨立的 Web Crypto 抽取結果,保持公平的 50/50。
歷史紀錄是一個有上限、最新優先的 UI 清單。它最多保留 20 筆項目;在產生第二十一個時,最舊的會被移除。一則累計訊息會精確說明超出上限的早期答案被丟棄了多少,因此這個上限會以可見的界線呈現,而不是靜默地遺失。每個項目都帶有一個單調遞增的本地識別碼,以避免執行階段的鍵值重複;這個識別碼不是隨機資料,也不是持久識別碼——它只用於維持工具內部渲染的穩定性。由於歷史紀錄僅供描述,它不會為了補償連續結果而調整機率。獨立的 50/50 結果自然會形成相同答案的連續出現,而歷史紀錄中的連勝對下一次抽取完全沒有影響。
為什麼這個工具拒絕回退到 Math.random
如果 Web Crypto 遺失、被封鎖或拋出例外,工具會回報明確的失敗訊息且不產生任何答案。這種拒絕是刻意的:頁面會公開說明它的方法論——「一個來自 Crypto.getRandomValues 的 Uint32,偶數為 Yes,奇數為 No」——若在背後悄悄換成 Math.random,將會與所顯示的來源相矛盾,並讓失敗更難被察覺。看到「Yes」的讀者應該能夠信任這個值來自於有文件記載的機制,而不是來自一個從未被告知的隱藏回退機制。
對應函式支援通用的有限結果數。它會計算出不超過 2^32 來源範圍的最大結果數倍數,接受低於該上限的值,拒絕等於或高於該上限的值,並用餘數運算對接受的值進行對應。當範圍無法整除時,拒絕抽樣可以避免較低索引分到額外的來源值。針對兩種結果,每個 Uint32 都會被接受,餘數運算步驟也很直接。針對三種結果,接受的截止點不是完整的 2^32,因此工具會最多迴圈 128 次,直到找到一個接受的值或明確失敗。確定性的測試會注入特定的 Uint32 序列——包括三種結果中最後一個被接受的值、第一個被拒絕的值後面接著一個被接受的值、精確的 2^32 結果數邊界,以及在耗盡前的 128 次連續拒絕——以驗證拒絕路徑。這個注入介面只用於測試;面向使用者的 UI 永遠呼叫瀏覽器的 Web Crypto,且絕不讓問題、歷史紀錄、時間或上一個答案影響下一次的對應。
隨機來源的參考依據是 W3C Web Cryptography 規範中對原地整數型別陣列填入的定義,並由 MDN 的 Crypto.getRandomValues 頁面獨立地記錄瀏覽器行為。NIST SP 800-90A 提供了 W3C 規範所處於的更廣泛的隨機位元產生器背景。這些來源都沒有讓單一次的 Web Crypto 抽取適用於高風險決策,但它們確實足以正當化拒絕在無聲中降低來源等級的作法。
Yes or No 與擲硬幣及其他隨機提問的比較
二元提問是人們會用到的幾種快速隨機產生器之一。當問題本身是二元的,且您希望記住問題的措辭連同答案一起時,Yes or No 產生器就是正確的選擇。擲硬幣是一個更快的心理模型,適合正面或反面這類選擇,特別是當您完全不想要問題欄位時。骰子產生器適合更廣泛的結果範圍——從 d4 到 d20 或更多的任何面數——當您需要的是一個數字而不是一個詞時,它是更好的選擇。隨機姓名挑選器適合答案實際上是預先列出選項之一的情況,而不是二元的 Yes 或 No。
| 工具 | 最佳適用情境 | 隨機性來源 | 持久標籤 |
|---|---|---|---|
| Yes or No 產生器 | 您想記住措辭的二元提問 | Web Crypto Uint32,依偶/奇對應 | 非必填的問題,與每個項目一起儲存 |
| 擲硬幣 | 沒有問題的快速正反面選擇 | 沒有問題欄位 | |
| 骰子產生器 | 任意面數的骰子,數值結果 | 非必填的結果清單 | |
| 隨機姓名挑選器 | 從書面清單中選出一個優勝者 | 清單本身 |
如果您大多數時候需要的是一個介於例如 1 到 100 之間的數字,那麼隨機數字產生器比上述任何工具都更貼近這個工作。如果您需要從一個範圍中抽取單一日期,那麼隨機日期產生器更符合需求。這些工具都不會學習偏好、不會加權替代方案,也不保證交替出現的結果,連續結果在所有這些工具中都是預期中的現象。
何時使用隨機是非題適當、何時不適當
當問題屬於輕鬆性質、任一答案的後果相似、且任一答案皆可接受時,使用隨機是非題就相當合適。例如解決一個小爭論、在今晚兩間類似的餐廳中挑選一間,或是決定先看哪一部電影,都是很好的應用場景。這個工具也可以作為寫作練習的提示——給自己一個「是」或「否」來作出回應——或者當朋友們已經同意接受結果時,用來打破彼此之間的僵局。
當決策涉及醫療、法律、財務、安全關鍵、緊急狀況、資訊安全、同意權、僱用、資格審查、法規遵循,或其他高風險情境時,隨機是非題就不適用。此工具不會驗證可用的選項、不理解後果、不權衡替代方案,也不提供專業判斷。Web Crypto 的品質並不會讓問題本身變得適合。在非輕鬆低風險的情境中使用時,即使數學上平衡的 50/50 答案仍可能不適當、不吉利,甚至造成傷害。這個頁面對此限制說明得非常明確;這是產品合約的一部分,而非附加在底部的行銷免責聲明。
如果你需要的是一個由 Web Crypto 產生、乾淨的 50/50 二選一答案、一個保持在本地端、可選填的題目文字欄位,以及一段在完成後可以清除、顯示最近 20 筆紀錄的歷史紀錄,那麼 Yes or No 產生器就能在不要求你上傳問題或註冊的情況下滿足需求。如果你真正的需求是無題目文字的正反面硬幣翻轉,Coin Flip 工具會是更精簡的選擇。如果你需要任意面數的骰子,Dice Roller 能處理更廣泛的數字情境。而如果答案不是二元的詞彙,而是多個具名選項之一,那麼隨機姓名挑選轉盤才是更直接對應的工具。
延伸閱讀:不用轉盤產生 Yes 或 No 轉盤結果。