🏪 小工具便利店

🎁 交換禮物配對產生器

輸入參與者名單,可以設定「排除配對」規則(例如夫妻、情侶不要互抽),一鍵產生每個人各自的抽籤結果,並提供每個人專屬的查看連結,避免所有人在同一畫面看到全部配對。

廣告・橫幅 728×90
每一組會雙向排除,意思是小明不會抽到小華、小華也不會抽到小明,反過來也一樣。
廣告・大型矩形 336×280

📖 使用說明

  1. 「參與者名單」欄位貼上所有要交換禮物的人名或代號,一行一個,至少需要 3 位。
  2. 如果有不能互抽的組合(例如夫妻、情侶、家人不想抽到彼此),在「排除配對」欄位一行填一組,用逗號分隔(例如「小明,小華」),這組會雙向排除。
  3. 「🎁 產生交換禮物配對」,工具會自動產生一份「誰要送禮物給誰」的配對結果,並且確保沒有人抽到自己、也沒有人抽到被排除的對象。
  4. 配對完成後,畫面會列出每個人專屬的查看連結,請把每個連結分別私訊給對應的本人(不要整批貼在公開群組),對方點開連結只會看到自己抽到誰,不會看到其他人的配對結果。
  5. 如果需要,也可以展開「🔒 主辦人專用:顯示完整配對表」自己核對名單是否正確,這個表格只給主辦人自己看,不要截圖公開。
小提醒:如果排除規則設定得太嚴格(例如人數很少但排除規則很多),工具可能會找不到合法的配對方式,這時候會提示你放寬排除規則或增加參與人數再試一次;另外請務必把連結一對一私訊給本人,不要貼在公開群組,否則保密效果會被破壞。

📖 深入了解:沒有後端伺服器,怎麼做到「保密」抽籤

配對演算法:怎麼保證沒有人抽到自己、也不會抽到排除對象

交換禮物配對在數學上叫做「錯位排列」(derangement):把所有人排成一個順序,每個人被指定去送禮物給另一個人,但規則是「沒有人可以被指定送給自己」。這個工具的做法是先用 Fisher-Yates 洗牌演算法把參與者順序打亂一次,得到一個候選配對結果,然後逐一檢查這個結果有沒有違反規則(有沒有人被分到自己、有沒有配對到被排除的對象),只要有任何一項不符合,就整個丟棄重新洗牌一次,最多重複嘗試 5000 次,直到找到一組完全合法的配對為止。這個「隨機產生再檢查」的做法雖然聽起來簡單,但在排除規則不算太嚴苛的情況下,通常只需要嘗試幾次到幾十次就能找到合法解,執行速度非常快,使用者幾乎不會感覺到延遲。

沒有伺服器,要怎麼做到「不讓所有人看到全部配對」

要做到真正意義上的保密——也就是「A 的連結在伺服器端就只會回傳 A 的結果,其他資料連傳輸過程都不會經過 A 的裝置」——技術上一定需要一台伺服器,先把配對結果存在資料庫裡,再依照每個人各自的身份驗證,只回傳屬於他的那一筆。這個工具是純前端的靜態網頁,沒有伺服器可以做這件事,所以採取了一個誠實的折衷做法:把整個配對結果(所有人的完整配對)連同一個「這是第幾號」的索引,一起編碼進網址參數裡,產生給每個人的連結,頁面載入後只會把「這個索引對應到的那一筆」顯示在畫面上,其餘的配對資料雖然技術上仍然透過網址傳到了對方的瀏覽器,但不會被程式碼渲染顯示出來。這是純前端工具在沒有後端的前提下,能做到的最接近「保密」的效果——多數不會刻意去解讀網址編碼的人,體驗上就是「只看到自己的結果」,但這不等同於伺服器端真正的存取控制。

這個保密機制的真實限制,以及什麼時候不該用它

誠實地說,這個保密機制不是加密,只是用 base64 把 JSON 資料轉成一段文字塞進網址——任何懂得這個編碼規則、願意花時間研究網址內容的人,理論上都能把完整配對結果還原出來,包括其他人抽到誰。對於一般朋友、同事、家人之間的交換禮物遊戲,這個限制通常無傷大雅,因為多數人根本不會去研究網址背後的編碼,加上工具本身也提醒你要一對一私訊、不要公開分享連結;但如果你辦的是「不能被任何人破解、保密要求極高」的正式活動(例如涉及高額禮物、需要對外負責保密義務的場合),就不建議依賴這個工具的連結機制,應該改用有帳號登入、伺服器端真正做存取控制的正式抽籤平台或 App。

實際範例:8 人交換禮物,其中兩對夫妻不想抽到彼此

假設你要幫 8 人的家庭聚會辦交換禮物,其中有兩對夫妻(阿明和小華、阿強和小美)不希望抽到彼此。在「參與者名單」貼上 8 人姓名,「排除配對」填入「阿明,小華」和「阿強,小美」兩行,按下「產生交換禮物配對」後,工具會確保最終結果裡阿明不會抽到小華、小華也不會抽到阿明,阿強跟小美之間也是同樣邏輯。產生後,你會看到 8 個各自獨立的連結,把每一個連結用 Line 或訊息私訊給對應的本人(例如阿明的連結只傳給阿明),對方點開後只會看到「阿明抽到的對象是:XXX」,看不到其他 7 個人的配對結果,達成基本的保密效果。

❓ 常見問題

這個工具真的能保證別人看不到完整配對表嗎?

頁面設計上做到了「一般情況下,打開專屬連結的人只會看到自己抽到誰」,但誠實地說這不是伺服器端真正的存取控制——因為沒有後端資料庫,完整的配對資料其實是編碼藏在網址裡一起傳過去的,只是沒有被程式碼顯示出來。對日常的朋友、家人、同事交換禮物來說已經足夠保密,但不是密碼學等級的安全機制,請務必一對一私訊連結、不要公開分享。

排除配對規則設定太多,會不會產生不出結果?

有可能。如果參與人數不多、但排除規則設定得很嚴格(例如 4 個人裡有 3 組互相排除),數學上可能根本不存在合法的配對方式。這種情況下工具會提示你「無法產生合法配對」,建議減少排除規則的組數,或增加參與人數,通常就能解決。

可以自己看到完整的配對結果,方便事後核對嗎?

可以,配對產生後畫面上會有一個「🔒 主辦人專用:顯示完整配對表」的收合區塊,展開就能看到所有人的配對結果,方便主辦人自己核對名單有沒有錯誤或想確認排除規則是否有生效。這個表格只給你自己看,請不要截圖公開分享,否則其他人就會知道自己抽到誰,失去驚喜感。

參與者名單裡有重複的名字,會怎麼樣?

工具會自動把重複的名字去除,只保留一份,並且在畫面上提醒你名單中有重複項目。如果名單裡本來就有兩個人剛好同名同姓,建議在名字後面加註記區分(例如「小明(業務部)」「小明(工程部)」),避免被誤判成同一人而少算一位參與者。

我輸入的名單、排除規則或產生的配對結果,會被儲存或傳到伺服器嗎?

不會。整個配對演算法、編碼與解碼過程都在瀏覽器裡用 JavaScript 完成,頁面沒有任何把資料送到伺服器的程式碼。產生的連結是你自己主動複製、透過你選擇的管道(私訊、Line)分別傳出去的,工具本身不會替你儲存或代為發送,重新整理頁面就會清空目前畫面上顯示的內容。

廣告・橫幅 728×90