ตัวสร้างตัวเลขสุ่มออนไลน์
การกระจายตัวของผลลัพธ์
การทดสอบความสม่ำเสมอ
สุ่มตัวเลขเพิ่มในช่วงที่แคบลงเพื่อทำการทดสอบนี้
การสุ่มล่าสุด
ชุดตั้งค่าที่บันทึกไว้
ตัวสร้างตัวเลขสุ่มทำงานอย่างไร?
ตัวสร้างนี้ให้ แหล่งความสุ่มสองแบบ และคุณเลือกได้เองว่าแบบไหนเหมาะกับงานของคุณ
สุ่มแบบปลอดภัย (Secure random) ดึงเอนโทรปีจากระบบปฏิบัติการของคุณผ่าน Web Crypto API (crypto.getRandomValues()) ผลลัพธ์คาดเดาไม่ได้และไม่สามารถทำซ้ำได้ — เป็นตัวเลือกที่เหมาะสมสำหรับการจับสลากจริงที่ไม่มีใครควรเดาผลล่วงหน้าได้
แบบกำหนดค่าเริ่มต้น (Seeded) เปลี่ยนข้อความใดๆ ที่คุณพิมพ์ให้กลายเป็นสถานะเริ่มต้นของตัวสร้างเชิงกำหนด (xoshiro128**) ค่าเริ่มต้นเดียวกันจะให้ตัวเลขชุดเดียวกันเสมอ ดังนั้นใครก็ตามสามารถเล่นซ้ำการสุ่มของคุณและยืนยันได้ว่าคุณได้ผลลัพธ์ตามที่บอกจริง
ทั้งสองแบบทำงาน ทั้งหมดในเบราว์เซอร์ของคุณ ไม่มีตัวเลขใดถูกส่งไปยังเซิร์ฟเวอร์
ไม่มีความเอนเอียงจากมอดุโล (No modulo bias)
ตัวสร้างแบบง่ายส่วนใหญ่จะแม็ปค่าสุ่ม 32 บิตลงในช่วงของคุณด้วย value % range เมื่อช่วงนั้นหารค่า 2³² ไม่ลงตัว ตัวเลขที่ต่ำที่สุดจะออกมาบ่อยกว่าตัวเลขอื่นเล็กน้อย ซึ่งเมื่อสุ่มหลายพันครั้งก็จะเห็นความแตกต่างนี้ได้ชัดเจน
ตัวสร้างนี้ใช้ การสุ่มตัวอย่างแบบปฏิเสธ (rejection sampling) แทน โดยค่าที่ตกอยู่ในส่วนหางที่ไม่สม่ำเสมอจะถูกทิ้งและสุ่มใหม่ ตัวเลขทุกตัวในช่วงของคุณจึงมีโอกาสเท่ากันทุกประการ คุณสามารถตรวจสอบด้วยตัวเองผ่านการทดสอบความสม่ำเสมอในตัว
ความสามารถของตัวสร้าง
ช่วงตัวเลข
- ค่าต่ำสุดและสูงสุด — ช่วงจำนวนเต็มหรือทศนิยมใดๆ รวมถึงค่าติดลบ
- จำนวนตัวเลข — ตั้งแต่ 1 ถึงสูงสุด 1,000,000 ตัวในการสุ่มครั้งเดียว
- ไม่ให้ซ้ำ — แต่ละตัวเลขปรากฏได้อย่างมากหนึ่งครั้ง เหมือนการจับสลากจริง
- การเรียงลำดับ — ตามลำดับที่สุ่มได้, จากน้อยไปมาก หรือจากมากไปน้อย การเรียงลำดับไม่มีผลต่อความสุ่มแต่อย่างใด
- ขั้น (Step) — จำกัดผลลัพธ์ให้เป็นจำนวนเท่าของค่าที่กำหนด เช่นให้ออกเฉพาะ 0, 5, 10, 15
- ยกเว้นตัวเลข — ระบุค่าที่ต้องไม่ถูกสุ่มออกมาเลย
โหมด
- แหล่งความสุ่ม — ปลอดภัย (Web Crypto) หรือกำหนดค่าเริ่มต้น (ทำซ้ำได้)
- ค่าเริ่มต้น (Seed) — ข้อความใดๆ ก็ได้ ค่าเริ่มต้นเดียวกันจะเล่นซ้ำการสุ่มเดิมเสมอ
- การกระจาย — สม่ำเสมอ, ปกติ (Gaussian), เอกซ์โพเนนเชียล, ปัวซง, สามเหลี่ยม, ทวินาม
- น้ำหนัก — ให้ตัวเลขที่เลือกมีโอกาสสูงขึ้น เขียนในรูปแบบ
number:weight - สัญกรณ์ลูกเต๋า —
3d6+2,d20,2d20kh1สำหรับความได้เปรียบ,4d6dl1สำหรับสุ่มค่าพลัง
ผลลัพธ์
- ตัวคั่น — จุลภาค, เว้นวรรค, อัฒภาค, แท็บ, ขึ้นบรรทัดใหม่ หรือข้อความใดๆ ที่คุณพิมพ์เอง
- ระบบตัวเลข — ฐานสิบ, ฐานสอง, ฐานแปด, ฐานสิบหก หรือฐาน 36
- เติมศูนย์ข้างหน้า — เปลี่ยน 7 ให้เป็น 007 สำหรับเลขที่ตั๋วหรือรหัสประจำตัว
- คำนำหน้าและคำต่อท้าย — ห่อหุ้มตัวเลขทุกตัวด้วยข้อความคงที่
- เทมเพลต —
{n}คือตัวเลข,{i}คือลำดับตำแหน่ง ดังนั้นuser{n}จะกลายเป็นuser42 - คัดลอกในรูปแบบ — ข้อความธรรมดา, CSV, JSON หรือตารางแบบ Markdown
สถิติ
ทุกการสุ่มจะถูกสรุปแบบเรียลไทม์ ได้แก่ ผลรวม ค่าเฉลี่ย มัธยฐาน ค่าต่ำสุด ค่าสูงสุด ส่วนเบี่ยงเบนมาตรฐาน รวมถึงจำนวนผลลัพธ์ที่เป็นเลขคู่ เลขคี่ หรือจำนวนเฉพาะ ฮิสโตแกรมแสดงรูปร่างของการกระจาย และ การทดสอบไคสแควร์ (chi-square test) จะบอกคุณว่าผลลัพธ์ตรงกับการกระจายแบบสม่ำเสมอจริงหรือไม่
ประวัติ
การสุ่ม 50 ครั้งล่าสุดจะถูกเก็บไว้ในเบราว์เซอร์ของคุณ พร้อมค่าตั้งค่าที่ใช้สร้างผลลัพธ์นั้น — คลิกครั้งเดียวเพื่อเรียกคืนค่าใดๆ ที่ต้องการ การตั้งค่าที่ใช้บ่อยสามารถบันทึกเป็นค่าที่ตั้งไว้ล่วงหน้าแบบมีชื่อ และทั้งหมดสามารถส่งออกเป็นไฟล์ JSON เพื่อนำเข้าในเครื่องอื่นได้ ไม่มีข้อมูลใดถูกจัดเก็บไว้ที่ใดนอกจากในเบราว์เซอร์นี้
แป้นพิมพ์
กด Space หรือ R เพื่อสุ่มอีกครั้งโดยไม่ต้องแตะเมาส์
ค่าที่ตั้งไว้ล่วงหน้าอย่างรวดเร็ว
| ค่าที่ตั้งไว้ | ช่วง | จำนวน | การใช้งาน |
|---|---|---|---|
| 🎲 ลูกเต๋า | 1–6 | 1 | เกมกระดาน, การตัดสินใจ |
| 🪙 เหรียญ | 0–1 | 1 | หัวหรือก้อย |
| 🎰 ลอตเตอรี่ | 1–49 | 6 | ไม่ซ้ำ, เรียงลำดับ เหมือนการจับสลากจริง |
| 💯 1–100 | 1–100 | 1 | เปอร์เซ็นต์, การแบ่งกลุ่ม A/B |
| 🔢 PIN | 0–9 | 4 | สี่หลัก, อนุญาตให้ซ้ำได้ |
การสุ่มที่ทำซ้ำได้
โหมดกำหนดค่าเริ่มต้นมีไว้สำหรับช่วงเวลาที่คำว่า “เชื่อฉันสิ มันสุ่มจริงๆ” ยังไม่พอ
เลือกค่าเริ่มต้นที่ทุกคนตกลงกันไว้ล่วงหน้า — วันที่, แฮชแท็ก, ราคาปิดของสิ่งใดสิ่งหนึ่งที่เปิดเผยต่อสาธารณะ — แล้วประกาศก่อนการสุ่ม จากนั้นใครก็สามารถพิมพ์ค่าเริ่มต้นเดียวกันด้วยการตั้งค่าเดียวกันและได้ผลลัพธ์ที่เหมือนกันทุกประการ คุณไม่ได้พิสูจน์ว่าตัวเลขคาดเดาไม่ได้ แต่คุณได้พิสูจน์ว่าคุณไม่ได้สุ่มซ้ำจนกว่าจะได้คำตอบที่ถูกใจ
นี่ยังเป็นวิธีทำให้ความสุ่มทำซ้ำได้ในงานที่ต้องตรวจสอบได้ เช่น แผนการสุ่มตัวอย่างที่เพื่อนร่วมงานสามารถรันซ้ำได้, ชุดข้อมูลทดสอบที่คงที่ตลอดชุดทดสอบ, แบบฝึกหัดในห้องเรียนที่นักเรียนทุกคนได้ข้อมูล “สุ่ม” ชุดเดียวกัน
การเลือกการกระจาย
สม่ำเสมอ (Uniform) ให้ทุกตัวเลขในช่วงมีโอกาสเท่ากัน นี่คือสิ่งที่คนทั่วไปมักหมายถึงเมื่อพูดถึง “สุ่ม” และเป็นค่าเริ่มต้น
การกระจายแบบอื่นๆ จะรวมกลุ่มผลลัพธ์ไว้รอบค่าใดค่าหนึ่ง ซึ่งเป็นลักษณะที่ปริมาณในโลกจริงมักเป็น
- ปกติ (Gaussian) — ส่วนสูง, ความคลาดเคลื่อนในการวัด, คะแนนสอบ กำหนดค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน
- เอกซ์โพเนนเชียล — เวลารอระหว่างเหตุการณ์ที่เป็นอิสระจากกัน
- ปัวซง (Poisson) — จำนวนเหตุการณ์ในช่วงเวลาที่กำหนด เช่น ลูกค้ามาถึงต่อชั่วโมง, ของเสียต่อล็อต
- สามเหลี่ยม (Triangular) — เมื่อคุณรู้ค่าต่ำสุด ค่าสูงสุด และค่าที่เป็นไปได้มากที่สุด แต่ไม่รู้อะไรเพิ่มเติม พบบ่อยในการประมาณการโครงการ
- ทวินาม (Binomial) — จำนวนความสำเร็จจากจำนวนครั้งที่ทดลองคงที่ ด้วยความน่าจะเป็นคงที่
ทุกการกระจายจะถูกตัดขอบให้อยู่ในช่วงที่คุณกำหนด ดังนั้นหางยาวของการกระจายแบบ Gaussian จึงไม่มีทางหลุดออกนอกค่าต่ำสุดและสูงสุดของคุณได้
ตัวเลขสุ่มใช้ที่ไหนบ้าง
เกมและความบันเทิง
- เกมกระดาน — การทอยลูกเต๋า, ลำดับการเล่น
- เกม RPG แบบโต๊ะ —
4d6dl1สำหรับค่าความสามารถ,2d20kh1สำหรับความได้เปรียบ - การแจกของรางวัล — เลือกผู้ชนะ พร้อมค่าเริ่มต้นให้ผู้เข้าร่วมตรวจสอบได้
- แบบทดสอบ — สุ่มลำดับคำถาม
สถิติและวิทยาศาสตร์
- การสุ่มตัวอย่าง — สุ่มตัวอย่างจากประชากรโดยไม่ซ้ำ
- การทดสอบ A/B — การแบ่งผู้เข้าร่วมออกเป็นกลุ่ม
- การจำลองแบบมอนติคาร์โล (Monte Carlo) — ประมาณความน่าจะเป็นด้วยการทำซ้ำ
- Bootstrapping — การสุ่มตัวอย่างซ้ำเพื่อประมาณความไม่แน่นอน
การพัฒนาซอฟต์แวร์
- ข้อมูลทดสอบ — สร้างค่านับล้านค่า โดยประมวลผลในพื้นหลังเพื่อให้หน้าเว็บยังตอบสนองได้
- Fixture — แบบกำหนดค่าเริ่มต้น เพื่อให้การทดสอบที่ล้มเหลวล้มเหลวแบบเดิมทุกครั้ง
- รหัสสุ่ม (Random ID) — พร้อมการเติมศูนย์, คำนำหน้า หรือเทมเพลต
- การทดสอบโหลด (Load testing) — ตัวระบุแบบเทมเพลตเช่น
user{n}@example.com
ตัวเลขสุ่มแท้เทียบกับตัวเลขสุ่มเทียม
Math.random() | crypto.getRandomValues() | กำหนดค่าเริ่มต้น (xoshiro128**) | |
|---|---|---|---|
| ประเภท | สุ่มเทียม | ปลอดภัยทางเข้ารหัส | สุ่มเทียมแบบกำหนดค่าได้ |
| แหล่งเอนโทรปี | ค่าเริ่มต้นที่เอนจินเลือกเอง | CSPRNG ของระบบ | ข้อความค่าเริ่มต้นของคุณ |
| คาดเดาได้หรือไม่? | มีความเป็นไปได้ | ไม่ | ได้ โดยตั้งใจให้เป็นเช่นนั้น |
| ทำซ้ำได้หรือไม่? | ไม่ | ไม่ | ได้เสมอ |
| เหมาะสำหรับความปลอดภัย | ไม่ | ใช่ | ไม่ |
| เหมาะสำหรับสถิติ | ขึ้นอยู่กับกรณี | ใช่ | ใช่ |
| เหมาะสำหรับการสุ่มที่ตรวจสอบได้ | ไม่ | ไม่ | ใช่ |
Math.random() ไม่ถูกใช้งานในเครื่องมือนี้เลย
การสุ่มโดยไม่ซ้ำ
เมื่อเปิดใช้งาน ไม่ให้ซ้ำ ตัวเลขแต่ละตัวในช่วงจะปรากฏได้อย่างมากหนึ่งครั้ง เหมาะสำหรับ
- การแจกของรางวัล — ไม่มีใครชนะได้สองครั้ง
- การเรียงสับเปลี่ยน — การสลับลำดับชุดของรายการ
- บิงโก — เรียกตัวเลขที่ยังไม่ถูกเรียกซ้ำ
- ลอตเตอรี่ — ตัวเลขที่แตกต่างกันหกตัวจาก 1 ถึง 49
การสุ่มใช้การสลับแบบ partial Fisher–Yates ดังนั้นการขอตัวเลข 6 ตัวจากล้านตัวเลขก็เร็วพอๆ กับการขอ 6 ตัวจาก 49 ตัว — ไม่มีการวนซ้ำเพื่อหลีกเลี่ยงการชนกัน หากคุณขอตัวเลขไม่ซ้ำมากกว่าที่ช่วงนั้นให้ได้ ตัวสร้างจะแจ้งเตือนแทนที่จะค้าง
การส่งออกผลลัพธ์
คัดลอกตัวเลขเป็นข้อความธรรมดาด้วยตัวคั่นที่คุณต้องการ เป็น CSV สำหรับสเปรดชีต เป็น JSON สำหรับโค้ด หรือเป็น ตาราง Markdown สำหรับเอกสารประกอบ การสุ่มขนาดใหญ่มากจะถูกเก็บไว้ในหน่วยความจำครบถ้วนและคัดลอกได้ครบถ้วน แม้ว่าหน้าจอจะแสดงเพียงสองสามพันตัวแรกที่ถูกสุ่มก็ตาม
การสร้างตัวเลขสุ่มในโค้ดของคุณเอง
JavaScript / TypeScript
// จำนวนเต็มที่ปลอดภัยทางเข้ารหัสใน [min, max] โดยไม่มีความเอนเอียงจากมอดุโล
// วิธีง่ายๆ ด้วย `value % range` จะเอื้อประโยชน์ให้ตัวเลขต่ำเมื่อ range
// หารค่า 2**32 ไม่ลงตัว - ดังนั้นเราจึงปฏิเสธค่าที่อยู่ในส่วนหางที่ไม่สม่ำเสมอ
function randomInt(min, max) {
const range = max - min + 1;
const limit = Math.floor(0x100000000 / range) * range;
const arr = new Uint32Array(1);
let value;
do {
crypto.getRandomValues(arr);
value = arr[0];
} while (value >= limit);
return min + (value % range);
}
Python
import random
import secrets
# ปลอดภัยทางเข้ารหัส ไม่มีความเอนเอียงจากมอดุโล
n = secrets.randbelow(max - min + 1) + min
# ทำซ้ำได้: ค่าเริ่มต้นเดียวกันให้ลำดับเดียวกันเสมอ
rng = random.Random('my-seed')
n = rng.randint(min, max)
# แบบไม่ให้ซ้ำ
sample = random.sample(range(min, max + 1), count)
PHP
// ปลอดภัยทางเข้ารหัส (PHP 7+) ไม่มีความเอนเอียงจากมอดุโล
$n = random_int($min, $max);
// ทำซ้ำได้
mt_srand(crc32('my-seed'));
$n = mt_rand($min, $max);
คำถามที่พบบ่อย (FAQ)
ผลลัพธ์สุ่มอย่างแท้จริงหรือไม่?
ในโหมดปลอดภัย ใช่ ผลลัพธ์มาจากcrypto.getRandomValues() ซึ่งเป็นตัวสร้างที่ปลอดภัยทางเข้ารหัสและใช้พูลเอนโทรปีของระบบปฏิบัติการของคุณ ผลลัพธ์กระจายตัวอย่างสม่ำเสมอและคาดเดาไม่ได้ ส่วนโหมดกำหนดค่าเริ่มต้นตั้งใจให้เป็นตรงข้าม นั่นคือทำซ้ำได้ ซึ่งเป็นจุดประสงค์ของมัน
ฉันสามารถสร้างตัวเลขได้กี่ตัวในครั้งเดียว?
สูงสุด 1,000,000 ตัว การสุ่มที่มากกว่า 50,000 ตัวจะถูกคำนวณในเวิร์กเกอร์เบื้องหลัง เพื่อให้หน้าเว็บยังตอบสนองได้ และหน้าจอจะแสดง 2,000 ตัวแรกพร้อมจำนวนที่เหลือ — การคัดลอกยังคงให้ผลลัพธ์ครบทุกตัวฉันสามารถสร้างตัวเลขติดลบได้หรือไม่?
ได้ ตั้งค่าต่ำสุดให้เป็นค่าติดลบ ช่วงตัวเลขทั้งหมดของ JavaScript ใช้งานได้ รวมถึงช่วงที่เป็นค่าติดลบทั้งสองด้านการเรียงลำดับมีผลต่อความสุ่มหรือไม่?
ไม่มีผล ตัวเลขจะถูกสุ่มก่อนแล้วจึงเรียงลำดับทีหลัง การเรียงลำดับเปลี่ยนแค่ลำดับที่คุณเห็นเท่านั้นค่าเริ่มต้นเดียวกันจะให้ตัวเลขเดียวกันในวันพรุ่งนี้หรือไม่?
ใช่ และในอุปกรณ์หรือเบราว์เซอร์อื่นใดก็ตาม ตัวสร้างแบบกำหนดค่าเริ่มต้นเป็นแบบเชิงกำหนดอย่างสมบูรณ์ และขึ้นอยู่กับค่าเริ่มต้นและการตั้งค่าของคุณเท่านั้นการทดสอบความสม่ำเสมอบอกอะไรฉันบ้าง?
มันรันการทดสอบไคสแควร์เปรียบเทียบว่าตัวเลขแต่ละตัวออกมาบ่อยแค่ไหนจริงๆ เทียบกับที่ควรจะเป็น หากค่าสถิตินี้ต่ำกว่าค่าวิกฤต ผลลัพธ์นั้นสอดคล้องกับการกระจายแบบสม่ำเสมอ การทดสอบนี้ต้องการช่วงที่แคบพอสมควรและจำนวนการสุ่มที่มากพอ — อย่างน้อยห้าครั้งต่อค่าที่เป็นไปได้แต่ละค่า — จึงจะให้ผลลัพธ์ที่มีความหมายน้ำหนักทำงานอย่างไร?
เขียนในรูปแบบคู่number:weight เช่น 1:5, 2:1, 3:1 ในตัวอย่างนี้ 1 มีโอกาสออกมากกว่า 2 หรือ 3 ถึงห้าเท่า ตัวเลขที่คุณไม่ได้ระบุไว้จะมีน้ำหนักเป็นศูนย์และไม่ถูกสุ่มออกมาเลย
รองรับสัญกรณ์ลูกเต๋าแบบใดบ้าง?
3d6 ทอยลูกเต๋าหกด้านสามลูก เพิ่มตัวปรับค่าได้ด้วย 3d6+2 เก็บหรือทิ้งลูกเต๋าได้ด้วย kh, kl, dh, dl — ดังนั้น 2d20kh1 จะเก็บค่าสูงสุดจาก d20 สองลูก (ความได้เปรียบ) และ 4d6dl1 จะทิ้งค่าต่ำสุดจาก d6 สี่ลูก