ต้องการวิธีที่รวดเร็วและยุติธรรมในการสุ่มตัวเลขหรือไม่? เครื่องมือสุ่มตัวเลขออนไลน์ฟรีนี้จะสร้างตัวเลขหนึ่งตัว — หรือรายการตัวเลขทั้งหมด — ในช่วงใดก็ได้ที่คุณเลือก ตั้งแต่ช่วงง่าย ๆ 1 ถึง 10 ไปจนถึงช่วงที่กว้างถึงพันล้าน ตั้งค่าค่า “ต่ำสุด” และ “สูงสุด” เลือกจำนวนตัวเลขที่คุณต้องการด้วย “จำนวนรายการที่เลือก” แล้วกด “สร้างผลลัพธ์” ขอบเขตทั้งสองด้านรวมอยู่ในผลลัพธ์ ดังนั้นช่วง 1 ถึง 10 จึงให้ได้ทั้ง 1 และ 10
ผลลัพธ์แต่ละรายการถูกสร้างขึ้นโดยตรงในเบราว์เซอร์ของคุณโดยใช้ Web Crypto API (crypto.getRandomValues) — ซึ่งให้ค่าสุ่มที่ปลอดภัยทางการเข้ารหัสจากแหล่งสุ่มของระบบปฏิบัติการ ไม่มีข้อมูลใดถูกส่งไปยังเซิร์ฟเวอร์หรือถูกบันทึกไว้บนเซิร์ฟเวอร์ และเราจะไม่เห็นตัวเลขของคุณเลย การสร้างผลลัพธ์เกิดขึ้นทันที เป็นส่วนตัว และยังทำงานได้แม้ในการเชื่อมต่อที่ช้าหลังจากโหลดหน้าเว็บเสร็จแล้ว
ตัวเลือกเหล่านี้ออกแบบมาสำหรับสถานการณ์จริงที่ผู้คนต้องการตัวเลขสุ่ม เปิด “ไม่เลือกซ้ำ” เพื่อให้แน่ใจว่าไม่มีตัวเลขใดปรากฏสองครั้ง — การตั้งค่านี้เหมาะสำหรับการจับรางวัล การสุ่มแบบลอตเตอรี หรือการแบ่งคนเป็นกลุ่มโดยไม่ซ้ำกัน ต้องการผู้ชนะ 20 คนจากผู้เข้าร่วม 500 คนหรือไม่? ตั้งค่า “ต่ำสุด” เป็น 1 และ “สูงสุด” เป็น 500 เปิด “ไม่เลือกซ้ำ” ตั้งค่า “จำนวนรายการที่เลือก” เป็น 20 แล้วกด “สร้างผลลัพธ์” “ลำดับการเรียง” จะจัดเรียงผลลัพธ์จากน้อยไปมากหรือมากไปน้อย และปุ่มเดียวจะคัดลอกผลลัพธ์ทั้งหมดพร้อมกัน การเปลี่ยน “รูปแบบผลลัพธ์” จาก “ขึ้นบรรทัดใหม่” เป็น “คั่นด้วยช่องว่าง” หรือ “คั่นด้วยจุลภาค” จะแสดง “จำนวนชุด”: การสุ่มอิสระหลายครั้งพร้อมกัน — เช่น ยี่สิบชุด ชุดละ 3 ตัวเลข สำหรับการจับรางวัลยี่สิบรอบ — และ “อนุญาตให้ซ้ำกันระหว่างชุด” จะกำหนดว่าตัวเลขเดียวกันสามารถปรากฏได้มากกว่าหนึ่งชุดหรือไม่
ความสุ่มนี้ถูกสร้างขึ้นจริง ๆ อย่างไร? เบราว์เซอร์ของคุณให้ค่าสุ่มที่ปลอดภัยทางการเข้ารหัสผ่าน Web Crypto API แทนที่จะใช้ PRNG ของ JavaScript อย่าง Math.random() เมื่อคุณกด “สร้างผลลัพธ์” หน้าเว็บจะขอค่าสุ่มด้วย crypto.getRandomValues แล้วนำไปสร้างตัวเลขในช่วงที่คุณเลือก แหล่งสุ่มพื้นฐานนี้จัดหาโดยระบบปฏิบัติการผ่านเบราว์เซอร์ ดังนั้นหน้าเว็บจึงไม่จำเป็นต้องเก็บค่า seed หรือลำดับสุ่มเทียมของตัวเอง
ขั้นตอนการแปลงค่าดิบให้อยู่ในช่วงที่คุณกำหนด มักเป็นจุดที่เครื่องมือสุ่มทั่วไปทำงานผิดพลาดอย่างเงียบ ๆ และควรพูดถึงแยกเป็นย่อหน้าหนึ่งโดยเฉพาะ การนำค่ามาหารเอาเศษ (modulo) ด้วยขนาดของช่วงดูเหมือนเป็นวิธีที่ง่ายที่สุด แต่กลับเป็นวิธีที่ลำเอียง: หากช่วงนั้นหารลงตัวไม่พอดีกับ 2^32 ตัวเลขที่น้อยที่สุดจะปรากฏบ่อยกว่าตัวอื่นเล็กน้อย ข้อบกพร่องนี้เรียกว่า modulo bias และเป็นสิ่งที่วัดได้จริง ไม่ใช่แค่ทฤษฎี เครื่องมือนี้จึงทิ้งค่าใดก็ตามที่เกินกว่าตัวคูณเต็มที่มากที่สุดของช่วงนั้น แล้วสุ่มค่าใหม่อีกครั้ง — เทคนิคนี้เรียกว่า rejection sampling วิธีนี้ต้องใช้การสุ่มเพิ่มอีกไม่กี่ครั้ง แต่แลกมาด้วยการรับประกันที่แม่นยำ: ตัวเลขทุกตัวระหว่าง “ต่ำสุด” และ “สูงสุด” มีโอกาสเท่ากันจริง ๆ ไม่ใช่แค่ใกล้เคียงกัน
อะไรทำให้ตัวเลขหนึ่งสุ่มอย่างแท้จริง? ตัวเลขหนึ่งจะสุ่มมากพอเมื่อผลลัพธ์ก่อนหน้าไม่บอกอะไรเลยเกี่ยวกับผลลัพธ์ถัดไป — และในทางปฏิบัติมีสามระดับสำหรับเรื่องนี้ ฟังก์ชันสุ่มเทียมทั่วไปอย่าง Math.random() ทำงานด้วยอัลกอริทึมที่กำหนดแน่นอน (deterministic): ใครก็ตามที่รู้สถานะภายในของมันสามารถสร้างลำดับทั้งหมดขึ้นมาใหม่ได้ — เหมาะสำหรับการสลับสไลด์นำเสนอ แต่ไม่เหมาะกับสิ่งใดก็ตามที่ผลลัพธ์ต้องคาดเดาไม่ได้ ตัวสร้างเลขสุ่มที่ปลอดภัยทางการเข้ารหัส — ซึ่งเป็นแบบที่เครื่องมือนี้ใช้ — ก็เป็นอัลกอริทึมเช่นกัน แต่ถูกออกแบบมาให้สร้างค่าที่คาดเดาไม่ได้โดยใช้แหล่งความสุ่มของระบบที่ปลอดภัย และถูกออกแบบมาให้การสังเกตผลลัพธ์ก่อนหน้าไม่ทำให้สามารถคาดเดาค่าถัดไปได้ในทางปฏิบัติ ความสุ่มทางกายภาพ จากแหล่งอย่างสัญญาณรบกวนในบรรยากาศหรือการสลายตัวของสารกัมมันตรังสี ถือเป็นอีกหมวดหมู่ที่แตกต่างจากทั้งสองระดับ แม้ว่าสำหรับการสุ่มตัวเลขในช่วงหนึ่ง ความแตกต่างในทางปฏิบัติจะหายไป นี่คือเหตุผลที่เบราว์เซอร์มี crypto API แยกต่างหากแทนที่จะปรับปรุง Math.random(): ทั้งสองแก้ปัญหาคนละแบบ และมีเพียงแบบเดียวเท่านั้นที่ปลอดภัยเมื่อผลลัพธ์มีความสำคัญต่อใครสักคน
ลำดับที่สุ่มอย่างแท้จริงไม่ได้มีจุดประสงค์ให้ดูสุ่มในสายตามนุษย์ ลองสุ่มตัวเลขสิบตัวระหว่าง 1 ถึง 10 แล้วคุณจะเห็นการซ้ำ คู่ที่ใกล้เคียงกันอย่าง 7, 7, 8 หรือช่วงสั้น ๆ ที่ตัวเลขสูงติดกันอยู่บ่อยครั้ง — และทั้งหมดนี้เป็นเรื่องปกติ ความสุ่มที่แท้จริงคาดเดาไม่ได้ ไม่ใช่กระจายเท่ากัน: การสุ่มแต่ละครั้งเป็นอิสระจากกัน ตัวเลขก่อนหน้าไม่มีผลต่อตัวเลขถัดไปเลยแม้แต่น้อย และไม่มีตัวเลขใด “ถึงคิว” ที่จะออกมา สัญชาตญาณที่ยืนกรานตรงข้ามนี้เรียกว่า gambler's fallacy และสัญชาตญาณเดียวกันนี้เองที่ทำให้มนุษย์เป็นเครื่องมือสุ่มตัวเลขที่แย่ — เมื่อถูกขอให้คิดลำดับสุ่มขึ้นมาเอง เราจะหลีกเลี่ยงการซ้ำและกระจายค่าให้สม่ำเสมอมากกว่าที่โอกาสจริงจะทำ ผลลัพธ์ที่ดูเป็นระเบียบอย่างน่าสงสัยคือร่องรอยฝีมือมนุษย์ ส่วนความสุ่มที่แท้จริงกลับสร้างกลุ่มก้อน
ทำไมต้องเลือกเครื่องมือสุ่มตัวเลขนี้?
- สร้างในเบราว์เซอร์เท่านั้น: ตัวเลขถูกสร้างบนอุปกรณ์ของคุณและไม่เคยถูกส่งไปที่ใดเลย
- ความสุ่มผ่าน Web Crypto API: ปลอดภัยทางการเข้ารหัส ไม่ใช่ Math.random()
- ไม่มี modulo bias: rejection sampling ทำให้ตัวเลขทุกตัวในช่วงมีโอกาสเท่ากัน
- ช่วงใดก็ได้: ตั้งแต่ 1 ถึง 10 ไปจนถึงค่าที่กว้างถึงพันล้าน รวมขอบเขตทั้งสองด้าน
- โหมด “ไม่เลือกซ้ำ”: สร้างรายการที่ไม่ซ้ำกันสำหรับการจับรางวัลและการแบ่งกลุ่ม
- หลายชุด: การสุ่มอิสระหลายครั้งด้วยการคลิกเดียว
- การเรียงลำดับและรูปแบบผลลัพธ์: จากน้อยไปมากหรือมากไปน้อย ขึ้นบรรทัดใหม่ เว้นวรรค หรือจุลภาค
- ประวัติและบันทึกลงไฟล์: เก็บบันทึกการสุ่มที่คุณอาจต้องชี้แจงในภายหลัง
- ไม่จำกัดและฟรี: ไม่ต้องลงทะเบียน ไม่มีขีดจำกัดการใช้งาน ไม่มีอะไรเก็บไว้บนเซิร์ฟเวอร์ของเรา
ตัวเลขสุ่มถูกนำไปใช้ในหลายที่มากกว่าที่คนส่วนใหญ่คิด ครูเรียกนักเรียนตอบคำถามโดยไม่ลำเอียง สตรีมเมอร์และทีมการตลาดสุ่มผู้ชนะกิจกรรมแจกของรางวัลและจับฉลากต่อหน้าผู้ชมที่ต้องเชื่อในผลลัพธ์ ผู้เล่นใช้แทนลูกเต๋าที่หายไปหรือตัดสินว่าใครเล่นก่อน และการแข่งขันใช้จับลำดับการเริ่มต้น นักวิจัยเลือกตัวอย่างสุ่มเพื่อให้ผลการศึกษาของพวกเขาใช้ได้กว้างกว่าแค่กลุ่มอาสาสมัคร นักพัฒนาสร้างข้อมูลทดสอบ กำหนดค่า seed สำหรับการจำลอง และเลือกตัวระบุระหว่างการทำ QA จุดร่วมของทั้งหมดนี้คือกระบวนการเลือกแบบสุ่มที่สามารถอธิบายได้ในภายหลัง: เนื่องจากการสุ่มใช้ความสุ่มทางการเข้ารหัสและเกิดขึ้นทั้งหมดบนอุปกรณ์ของคุณ คุณจึงสามารถแสดงให้เห็นได้ว่าผลลัพธ์นั้นเกิดขึ้นได้อย่างไรหากมีใครตั้งคำถาม
เครื่องมือนี้มีข้อจำกัดตามความเป็นจริงบางประการที่ควรรู้ โหมด “ไม่เลือกซ้ำ” ไม่สามารถสร้างตัวเลขได้มากกว่าที่มีอยู่ในช่วงนั้น: ค่าที่ไม่ซ้ำกัน 20 ค่าระหว่าง 1 ถึง 10 นั้นไม่มีอยู่จริง การสุ่มแต่ละครั้งเป็นอิสระจากกันและผลลัพธ์ก่อนหน้าไม่มีผลต่อผลลัพธ์ถัดไป ดังนั้นการรีเฟรชหน้าเว็บจึงไม่ได้รีเซ็ตวงจรใด ๆ — เพราะไม่มีวงจรอยู่ตรงนี้เลย และแม้ว่าตัวเลขจะปลอดภัยทางการเข้ารหัส การสุ่มที่นี่ก็เป็นเพียงการเลือกที่ยุติธรรม ไม่ใช่การทำนาย: การออกรางวัลลอตเตอรีอย่างเป็นทางการใช้อุปกรณ์ทางกายภาพหรือที่ได้รับการรับรองของตนเอง และสิ่งใดก็ตามที่คำนวณในเบราว์เซอร์ของคุณไม่มีความเกี่ยวข้องกับมันเลย ภายในขอบเขตเหล่านี้ การรับประกันนั้นแข็งแกร่งมาก — ตัวเลขทุกตัวในช่วงของคุณมีโอกาสเท่ากันจริง ๆ ในทุกการสุ่ม