輸入參與者名單,可以設定「排除配對」規則(例如夫妻、情侶不要互抽),一鍵產生每個人各自的抽籤結果,並提供每個人專屬的查看連結,避免所有人在同一畫面看到全部配對。
交換禮物配對在數學上叫做「錯位排列」(derangement):把所有人排成一個順序,每個人被指定去送禮物給另一個人,但規則是「沒有人可以被指定送給自己」。這個工具的做法是先用 Fisher-Yates 洗牌演算法把參與者順序打亂一次,得到一個候選配對結果,然後逐一檢查這個結果有沒有違反規則(有沒有人被分到自己、有沒有配對到被排除的對象),只要有任何一項不符合,就整個丟棄重新洗牌一次,最多重複嘗試 5000 次,直到找到一組完全合法的配對為止。這個「隨機產生再檢查」的做法雖然聽起來簡單,但在排除規則不算太嚴苛的情況下,通常只需要嘗試幾次到幾十次就能找到合法解,執行速度非常快,使用者幾乎不會感覺到延遲。
要做到真正意義上的保密——也就是「A 的連結在伺服器端就只會回傳 A 的結果,其他資料連傳輸過程都不會經過 A 的裝置」——技術上一定需要一台伺服器,先把配對結果存在資料庫裡,再依照每個人各自的身份驗證,只回傳屬於他的那一筆。這個工具是純前端的靜態網頁,沒有伺服器可以做這件事,所以採取了一個誠實的折衷做法:把整個配對結果(所有人的完整配對)連同一個「這是第幾號」的索引,一起編碼進網址參數裡,產生給每個人的連結,頁面載入後只會把「這個索引對應到的那一筆」顯示在畫面上,其餘的配對資料雖然技術上仍然透過網址傳到了對方的瀏覽器,但不會被程式碼渲染顯示出來。這是純前端工具在沒有後端的前提下,能做到的最接近「保密」的效果——多數不會刻意去解讀網址編碼的人,體驗上就是「只看到自己的結果」,但這不等同於伺服器端真正的存取控制。
誠實地說,這個保密機制不是加密,只是用 base64 把 JSON 資料轉成一段文字塞進網址——任何懂得這個編碼規則、願意花時間研究網址內容的人,理論上都能把完整配對結果還原出來,包括其他人抽到誰。對於一般朋友、同事、家人之間的交換禮物遊戲,這個限制通常無傷大雅,因為多數人根本不會去研究網址背後的編碼,加上工具本身也提醒你要一對一私訊、不要公開分享連結;但如果你辦的是「不能被任何人破解、保密要求極高」的正式活動(例如涉及高額禮物、需要對外負責保密義務的場合),就不建議依賴這個工具的連結機制,應該改用有帳號登入、伺服器端真正做存取控制的正式抽籤平台或 App。
假設你要幫 8 人的家庭聚會辦交換禮物,其中有兩對夫妻(阿明和小華、阿強和小美)不希望抽到彼此。在「參與者名單」貼上 8 人姓名,「排除配對」填入「阿明,小華」和「阿強,小美」兩行,按下「產生交換禮物配對」後,工具會確保最終結果裡阿明不會抽到小華、小華也不會抽到阿明,阿強跟小美之間也是同樣邏輯。產生後,你會看到 8 個各自獨立的連結,把每一個連結用 Line 或訊息私訊給對應的本人(例如阿明的連結只傳給阿明),對方點開後只會看到「阿明抽到的對象是:XXX」,看不到其他 7 個人的配對結果,達成基本的保密效果。
頁面設計上做到了「一般情況下,打開專屬連結的人只會看到自己抽到誰」,但誠實地說這不是伺服器端真正的存取控制——因為沒有後端資料庫,完整的配對資料其實是編碼藏在網址裡一起傳過去的,只是沒有被程式碼顯示出來。對日常的朋友、家人、同事交換禮物來說已經足夠保密,但不是密碼學等級的安全機制,請務必一對一私訊連結、不要公開分享。
有可能。如果參與人數不多、但排除規則設定得很嚴格(例如 4 個人裡有 3 組互相排除),數學上可能根本不存在合法的配對方式。這種情況下工具會提示你「無法產生合法配對」,建議減少排除規則的組數,或增加參與人數,通常就能解決。
可以,配對產生後畫面上會有一個「🔒 主辦人專用:顯示完整配對表」的收合區塊,展開就能看到所有人的配對結果,方便主辦人自己核對名單有沒有錯誤或想確認排除規則是否有生效。這個表格只給你自己看,請不要截圖公開分享,否則其他人就會知道自己抽到誰,失去驚喜感。
工具會自動把重複的名字去除,只保留一份,並且在畫面上提醒你名單中有重複項目。如果名單裡本來就有兩個人剛好同名同姓,建議在名字後面加註記區分(例如「小明(業務部)」「小明(工程部)」),避免被誤判成同一人而少算一位參與者。
不會。整個配對演算法、編碼與解碼過程都在瀏覽器裡用 JavaScript 完成,頁面沒有任何把資料送到伺服器的程式碼。產生的連結是你自己主動複製、透過你選擇的管道(私訊、Line)分別傳出去的,工具本身不會替你儲存或代為發送,重新整理頁面就會清空目前畫面上顯示的內容。