เครื่องสุ่มตัวเลข (ปลอดภัยเข้ารหัส
เลือก min, max และจำนวนที่ต้องการเพื่อสุ่มจำนวนเต็มที่ปลอดภัยเข้ารหัส เปิด 'ไม่ซ้ำ' สำหรับการสุ่มแบบไม่คืน (จับฉลาก, ลอตเตอรี่)
วิธีการทำงาน
ทำไมถึงสุ่มได้จริง
เราใช้ crypto.getRandomValues — แหล่งสุ่มที่ปลอดภัยเข้ารหัสของเบราว์เซอร์ — แทนที่จะใช้ Math.random() ผลลัพธ์จาก CSPRNG ไม่สามารถทำนายได้จากค่าก่อนหน้า ซึ่งสำคัญสำหรับการจับสลากลอตเตอรี่ แอปพลิเคชันที่เกี่ยวข้องกับการพนัน และกรณีใดก็ตามที่ 'สุ่ม' เป็นข้อกำหนดจริง ไม่ใช่แค่ 'สุ่มๆ'
เราใช้ rejection sampling เพื่อให้การกระจายตัวสม่ำเสมออย่างแน่นอนตลอดช่วงที่เลือก 'random % range' แบบง่ายจะมี bias เมื่อช่วงไม่หารลงตัวใน 2³² Rejection sampling ทิ้งค่าที่จะทำให้เกิด bias แล้วลองใหม่ ดังนั้นทุกตัวเลขในช่วงของคุณมีความน่าจะเป็นเท่ากันพอดี
ไม่ซ้ำกับอนุญาตซ้ำ
โหมดปริยาย: ตัวเลขแต่ละตัวเป็นอิสระ — อาจซ้ำได้ นี่คือสิ่งที่ 'สุ่ม' มักหมายถึงในการใช้งานทั่วไป (โยนลูกเต๋า เลือกหนัง ทดสอบแบบสุ่ม)
โหมดไม่ซ้ำ: สุ่มตัวอย่างแบบไม่คืน — เมื่อตัวเลขถูกเลือกแล้ว จะไม่ถูกเลือกซ้ำในชุดเดียวกัน มีประโยชน์สำหรับ: จับสลากลอตเตอรี่ (เช่น 6 ตัวเลขจาก 1-49) จับฉลาก การมอบหมายทีม และสถานการณ์ 'เลือก N จาก M' ใดก็ได้ ต้องการ count ≤ ช่วง
กรณีใช้งานทั่วไป
ลอตเตอรี่ / จับฉลาก: 6 ตัวเลขไม่ซ้ำจาก 1-49 หรือตามรูปแบบที่ใช้ เปิด 'ไม่ซ้ำ'
โยนลูกเต๋า: ช่วง 1-6 (หรือ 1-20 สำหรับ D20) ปิด 'ไม่ซ้ำ' เพื่อให้แต่ละครั้งเป็นอิสระ
การสุ่มตัวอย่างสำหรับการทดสอบ: เลือก 10 user ID สุ่มจาก 1-10000 เพื่อตรวจสอบแบบ spot-check ใช้ 'ไม่ซ้ำ' เพื่อหลีกเลี่ยงซ้ำ
จำลองการโยนเหรียญ: ช่วง 0-1 หลายผลลัพธ์ นับหัว/ก้อยเพื่อตรวจความเป็นธรรม (จะเห็น ~50/50 กับตัวอย่างใหญ่)
คำถามที่พบบ่อย
›นี่ยุติธรรมสำหรับจับฉลากหรือลอตเตอรี่ไหม?
ความสุ่มมีความปลอดภัยเข้ารหัสและไม่มี bias ว่ายุติธรรมทางกฎหมายสำหรับลอตเตอรี่ทางการหรือไม่ขึ้นอยู่กับกฎของหน่วยงานกำกับดูแล — หลายแห่งต้องการ hardware RNG ที่ผ่านการรับรอง
›ต่างจาก Math.random() อย่างไร?
Math.random() ใช้อัลกอริทึมที่ผู้โจมตีสามารถทำนายผลลัพธ์ได้จากค่าก่อนหน้า crypto.getRandomValues ใช้ CSPRNG ระดับ OS ที่ไม่สามารถทำนายได้ สำหรับความยุติธรรมจริง ใช้อันนี้
›ใช้ตัวเลขลบได้ไหม?
ได้ ตั้ง min เป็นค่าลบ
›ช่วงสูงสุดเท่าไร?
จำกัดโดยช่วง safe integer ของ JavaScript (~2⁵³) แต่ในทางปฏิบัติสามารถไปถึงพันล้านได้โดยไม่มีปัญหา เทคนิค rejection sampling จัดการช่วงใดก็ได้อย่างถูกต้อง
›ทำไม 'ไม่ซ้ำ' ล้มเหลวเมื่อ count > ช่วง?
ถ้าเลือก 10 ตัวเลขไม่ซ้ำจาก 1-5 ตัวเลข 4 ตัวไม่มีอยู่จริง การตรวจสอบจะจับสิ่งนี้และขอให้ขยายช่วงหรือลดจำนวน
›ใช้สำหรับโยนลูกเต๋าได้ไหม?
ได้ — ตั้งช่วงเป็น 1-6 (หรือลูกเต๋าของคุณ) และปิด 'ไม่ซ้ำ' เพื่อให้แต่ละการโยนเป็นอิสระ
›บันทึก seed และทำซ้ำได้ไหม?
ไม่ได้ — การสุ่มที่ปลอดภัยออกแบบมาให้ไม่มี seed ถ้าต้องการ 'สุ่ม' ที่ทำซ้ำได้สำหรับการทดสอบ ใช้ library PRNG ที่มี seed
›ข้อมูลถูกส่งออกไปไหม?
ไม่ การสุ่มทำงานในเครื่องทั้งหมด
เครื่องมือที่เกี่ยวข้อง
อัปเดตล่าสุด: