C#:
การสร้างตัวเลขสุ่ม
วิธีการ:
วิธีที่พบบ่อยที่สุดในการสร้างตัวเลขสุ่มใน C# คือการใช้คลาส System.Random
ต่อไปนี้เป็นตัวอย่างง่ายๆ ที่แสดงการใช้งาน:
using System;
public class RandomNumberExample
{
static void Main(string[] args)
{
Random random = new Random();
int randomNumber = random.Next(1, 100); // สร้างตัวเลขระหว่าง 1 และ 99
Console.WriteLine($"Random number: {randomNumber}");
}
}
นี่จะแสดงตัวเลขสุ่ม เช่น:
Random number: 42
สำหรับการสร้างตัวเลขลอยตัวสุ่มระหว่าง 0.0 และ 1.0, คุณสามารถใช้เมธอด NextDouble
:
double randomDouble = random.NextDouble();
Console.WriteLine($"Random double: {randomDouble}");
หากคุณทำงานกับแอปพลิเคชั่นที่ต้องการความปลอดภัยสูงและต้องการความสุ่มแบบ cryptographic, คุณควรใช้คลาส RNGCryptoServiceProvider
ที่พบใน System.Security.Cryptography
:
using System;
using System.Security.Cryptography;
public class SecureRandomExample
{
static void Main()
{
byte[] randomNumber = new byte[4]; // สร้างตัวเลขสุ่มขนาด 4 ไบต์
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(randomNumber);
}
int value = BitConverter.ToInt32(randomNumber, 0);
Console.WriteLine($"Cryptographically secure random number: {value}");
}
}
การศึกษาเจาะลึก
การสร้างตัวเลขสุ่มใน C# ได้พัฒนาเปลี่ยนแปลงไปตามเวลา ในตอนแรก, คลาส System.Random
เป็นทางเลือกหลักสำหรับการสร้างตัวเลขเทียมสุ่ม มันเป็นเทียมสุ่มเพราะหากมีค่า seed ที่กำหนด มันจะผลิตลำดับของตัวเลขเดิมซ้ำๆ ซึ่งสามารถเป็นประโยชน์สำหรับการดีบักหรือการทดสอบซ้ำ
ถึงแม้ว่าจะเพียงพอสำหรับความต้องการพื้นฐาน, System.Random
ไม่ได้มั่นคงเมื่อใช้งานพร้อมกันหลายๆ สิ่งและอาจสร้างผลลัพธ์ที่สามารถทำนายได้ ซึ่งไม่เหมาะสำหรับการใช้งานที่ต้องพึ่งพาความปลอดภัย ข้อจำกัดนี้ทำให้มีการนำเสนอ RNGCryptoServiceProvider
สำหรับความสุ่มทาง cryptographic ซึ่งมีความปลอดภัยมากขึ้นแต่ก็ใช้ทรัพยากรมากขึ้นด้วย
ตัวเลือกอีกอย่างใน .NET Core และ .NET 5+ คือคลาส RandomNumberGenerator
ใน System.Security.Cryptography
สำหรับการสร้างตัวเลขสุ่มที่ปลอดภัย ซึ่งถูกคิดมาเพื่อเป็นตัวเลือกที่ทันสมัยและใช้งานง่ายกว่า RNGCryptoServiceProvider
แต่ละวิธีการสร้างตัวเลขสุ่มใน C# มีที่มาที่ไปของมันขึ้นอยู่กับความต้องการของแอปพลิเคชั่น สำหรับแอปพลิเคชั่นส่วนใหญ่, System.Random
นั้นเพียงพอ แต่สำหรับแอปพลิเคชั่นที่ต้องการตัวเลขสุ่มที่ปลอดภัยและไม่สามารถทำนายได้, คลาส cryptographic ให้ทางเลือกที่แข็งแกร่ง