การสร้างตัวเลขสุ่ม

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 ให้ทางเลือกที่แข็งแกร่ง