ต้องการจับฉลากหาผู้ชนะรางวัล สุ่มเรียกชื่อนักเรียน หรือตกลงกันว่าใครจะเป็นคนล้างจานใช่ไหม? เครื่องมือสุ่มออนไลน์ฟรีนี้จะสุ่มเลือกจากรายการที่คุณวางลงไปอย่างยุติธรรม เพียงแค่ใส่ตัวเลือกของคุณลงในกล่อง “รายการ” — โดยให้แต่ละชื่ออยู่บรรทัดใหม่ หรือคั่นด้วยจุลภาค — กำหนดจำนวนที่คุณต้องการด้วย “จำนวนรายการที่เลือก” แล้วกด “สร้างผลลัพธ์” รายชื่อต้องมีตัวเลือกอย่างน้อยสองรายการและรองรับได้สูงสุด 1,000 รายการ โดยแต่ละรายการมีความยาวได้สูงสุด 200 ตัวอักษร
การสุ่มทุกครั้งจะเกิดขึ้นโดยตรงบนเบราว์เซอร์ของคุณโดยใช้ Web Crypto API (crypto.getRandomValues) ซึ่งสร้างค่าการสุ่มที่มีความปลอดภัยระดับการเข้ารหัสจากระบบพื้นฐานของเบราว์เซอร์ รายการของคุณจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ ไม่มีการบันทึกประวัติ และเราไม่มีทางมองเห็นข้อมูลนั้น — ซึ่งเรื่องนี้สำคัญมากสำหรับเครื่องมือสุ่มนี้เมื่อเทียบกับเครื่องมืออื่น ๆ เพราะข้อมูลที่ผู้คนนำมาวางมักจะเป็นรายชื่อลูกค้า ทะเบียนรายชื่อนักเรียน หรือรายชื่อเพื่อนร่วมงาน ปุ่ม “โหลดจากไฟล์” ก็รักษาสัญญาแบบเดียวกัน: เบราว์เซอร์ของคุณจะอ่านไฟล์และเติมข้อมูลลงในกล่องให้ภายในเครื่อง โดยไม่มีการอัปโหลดสิ่งใดเลย
ตัวเลือกต่าง ๆ ถูกสร้างขึ้นมาเพื่อรองรับรูปแบบรายการที่ผู้คนมีอยู่จริง “ตัวคั่นรายการ” ถูกตั้งไว้ที่ “การตรวจจับอัตโนมัติ” ซึ่งจะอ่านการขึ้นบรรทัดใหม่และจุลภาค เพื่อแยกแยะว่ารายการของคุณใช้ตัวคั่นแบบไหน ดังนั้นรายการที่คัดลอกมาจากสเปรดชีต ข้อความแชท หรือเอกสาร จะสามารถใช้งานได้ทันทีโดยไม่ต้องจัดรูปแบบใหม่ แต่หากข้อมูลของคุณมีรูปแบบผสมกัน ให้ล็อกตัวเลือกนี้ไว้ที่ “ขึ้นบรรทัดใหม่”, “จุลภาค” หรือ “ช่องว่าง” ได้เลย — และโปรดทราบว่า “ช่องว่าง” เป็นตัวเลือกที่คุณต้องตั้งใจเลือกเสมอและจะไม่มีทางทำงานโดยอัตโนมัติ เพราะข้อมูลอย่างเช่นชื่อนามสกุลเต็มมักจะมีช่องว่างอยู่ในตัว หากระบบแยกช่องว่างโดยปริยาย มันจะทำให้รายการพังมากกว่าจะช่วยแก้ไขปัญหา “จำนวนรายการที่เลือก” จะเป็นตัวกำหนดว่าต้องการสุ่มออกมากี่รายการ ตั้งแต่ 1 ถึง 100 หากกำลังสุ่มหาผู้โชคดีสามคนจากผู้เข้าร่วม 200 คนล่ะ? ก็แค่วางรายชื่อผู้เข้าร่วม ตั้งค่า “จำนวนรายการที่เลือก” เป็น 3 และกด “สร้างผลลัพธ์” ทั้งนี้มีสองฟังก์ชันที่จะใช้งานได้ก็ต่อเมื่อจำนวนที่เลือกมีค่าเป็น 2 หรือมากกว่า และจะเป็นสีเทาจนกว่าจะถึงค่านั้น: นั่นคือ “ไม่เลือกซ้ำ” ซึ่งกำหนดว่าตัวเลือกเดิมจะถูกสุ่มออกมาซ้ำได้หรือไม่ และ “รูปแบบผลลัพธ์” ซึ่งตั้งค่าว่าจะแยกผลลัพธ์การสุ่มแต่ละรายการออกจากกันอย่างไร — ระหว่าง “แต่ละรายการอยู่บรรทัดใหม่”, “คั่นด้วยช่องว่าง” หรือ “คั่นด้วยจุลภาค”
แถวของปุ่มด้านในกล่อง “รายการ” ทำหน้าที่จัดการแก้ไขข้อมูลที่คุณมักจะต้องไปทำที่อื่น “โหลดจากไฟล์” จะดึงรายชื่อมาจากไฟล์ข้อความธรรมดาหรือ CSV ได้โดยตรง “สุ่มลำดับ” จะสลับลำดับของตัวเลือกทั้งหมดในกล่อง ส่วน “เรียงลำดับ” จะจัดเรียงตามตัวอักษรโดยเรียงตัวเลขอย่างเป็นธรรมชาติ และหากคลิกอีกครั้งจะเป็นการเรียงย้อนกลับ และ “ล้าง” จะลบข้อมูลในกล่องจนว่างเปล่า ปุ่ม “กรอกข้อมูลตัวอย่าง” จะใส่รายชื่อตัวอย่างสั้น ๆ เพื่อให้คุณทดลองใช้เครื่องมือสุ่มนี้ได้ในคลิกเดียว ในขณะที่ “ขยาย” จะเปิดกล่องให้แสดงรายการยาว ๆ แบบเต็มตา และ “ย่อ” จะพับกล่องกลับสู่ขนาดเดิม ใต้ผลลัพธ์นั้น “คัดลอกทั้งหมด” จะส่งผลการสุ่มทุกรายการไปยังคลิปบอร์ดของคุณ “บันทึกลงไฟล์” จะเขียนข้อมูลออกมาเป็นไฟล์ และ “ประวัติ” จะเก็บผลการสุ่ม 10 ครั้งล่าสุดไว้ในเบราว์เซอร์ คุณจึงสามารถเรียกดูผลลัพธ์ก่อนหน้าได้ในคลิกเดียว
การสุ่มทำงานจริง ๆ อย่างไร? เมื่อคุณกด “สร้างผลลัพธ์” หน้าเว็บจะขอค่าสุ่มจากเบราว์เซอร์ผ่าน crypto.getRandomValues และใช้ค่านั้นเลือกตำแหน่งในรายการของคุณ แทนที่จะผ่านฟังก์ชันสุ่มเทียมของ JavaScript อย่างเช่น Math.random() การเปลี่ยนค่า 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 ทำให้ทุกตัวเลือกมีโอกาสเท่าเทียมกัน
- รองรับรายการทุกรูปแบบ: แต่ละรายการบรรทัดใหม่, คั่นด้วยจุลภาค, หรือช่องว่าง โดยไม่ต้องจัดรูปแบบใหม่
- โหมด “ไม่เลือกซ้ำ”: สุ่มผู้ชนะหรือทีมโดยไม่มีใครถูกจับได้สองครั้ง
- รองรับได้สูงสุด 1,000 รายการ และสุ่มได้มากถึง 100 รายการในการสุ่มครั้งเดียว
- มีเครื่องมือจัดการรายการในตัว: โหลดจากไฟล์, สุ่มลำดับ, เรียงลำดับ, ล้าง, ข้อมูลตัวอย่าง
- ประวัติและบันทึกลงไฟล์: เก็บหลักฐานการสุ่มที่คุณอาจต้องนำไปยืนยัน
- ไร้ขีดจำกัดและใช้งานฟรี: ไม่ต้องสมัครสมาชิก ไม่มีข้อจำกัดการใช้งาน ไม่มีข้อมูลเก็บบนเซิร์ฟเวอร์ของเรา
การสุ่มเลือกมักจะเกิดขึ้นในสถานการณ์ที่การตัดสินใจนั้นต้องรับมือกับการถูกตั้งคำถาม ครูเรียกถามนักเรียนโดยไม่ลำเอียงและสตรีมเมอร์สุ่มหาผู้โชคดีต่อหน้าผู้ชมที่ต้องเชื่อในผลลัพธ์ ผู้จัดการแจกจ่ายงานที่ไม่มีใครอยากอาสาทำ และทีมใช้มันเพื่อตัดสินลำดับการพรีเซนต์ หรือเพื่อกำหนดว่าใครต้องเตรียมพร้อมรับสายเรียกเข้าฉุกเฉิน นักวิจัยสุ่มดึงตัวอย่างข้อมูลเพื่อนำไปตรวจสอบ ครอบครัวเถียงกันว่าจะดูหนังเรื่องอะไร และกลุ่มเพื่อนที่กำลังหิวเลือกกันว่าจะไปร้านอาหารไหน สิ่งที่สถานการณ์เหล่านี้มีร่วมกันก็คือการคัดเลือกที่ใคร ๆ ก็สามารถอธิบายได้ในภายหลัง: การสุ่มนี้ใช้กลไกแบบเข้ารหัส โดยทำงานทั้งหมดบนอุปกรณ์ของคุณ และมี “ประวัติ” คอยเก็บผลลัพธ์ไว้หากมีใครมาถามถึงในภายหลัง
ข้อจำกัดที่ควรทราบ เครื่องมือนี้ไม่สามารถสุ่มตัวเลือกที่ไม่ซ้ำกันได้มากกว่าจำนวนที่มีอยู่ในรายการของคุณ — ผู้ชนะสามคนก็ต้องมีรายชื่ออย่างน้อยสามชื่อ — และเครื่องมือนี้รับได้สูงสุด 1,000 รายการ โดยแต่ละรายการมีความยาว 200 ตัวอักษร พร้อมทั้งสุ่มได้ไม่เกิน 100 ผลลัพธ์ต่อการสุ่มหนึ่งครั้ง ปุ่ม “สุ่มลำดับ” และ “เรียงลำดับ” ทำงานแบบบรรทัดต่อบรรทัด ดังนั้นรายการที่คั่นด้วยจุลภาคและวางต่อกันในบรรทัดเดียว จะถูกสลับลำดับได้ก็ต่อเมื่อมันถูกแยกเป็นหนึ่งรายการต่อบรรทัดแล้วเท่านั้น และทั้งสองปุ่มเพียงแค่สลับตำแหน่งในกล่อง ไม่ได้เปลี่ยนผลการสุ่มแต่อย่างใด การสุ่มจะยังคงยุติธรรมเท่าเดิมไม่ว่ารายการของคุณจะเรียงลำดับอย่างไร ทุกตัวเลือกมีน้ำหนักความน่าจะเป็นเท่ากันตามการออกแบบ ดังนั้นหากการสุ่มไหนที่บางชื่อควรมีน้ำหนักเพิ่มเป็นสองเท่า ชื่อนั้นก็ต้องถูกใส่ไว้ในรายการสองครั้ง ภายใต้ข้อจำกัดเหล่านั้น การรับประกันยังคงแข็งแกร่ง — ทุกตัวเลือกในรายการของคุณมีโอกาสถูกสุ่มเท่ากันอย่างแท้จริง ในทุก ๆ การจับฉลาก