난수 생성기는 정수와 부동 소수점 숫자를 무작위로 생성하는 C#에 내장된 라이브러리입니다. 라이브러리의 관련 메서드가 호출될 때마다 난수를 반환합니다. 일련의 난수는 어떤 패턴도 따르지 않는 숫자의 집합입니다. C#의 난수 생성기는 호출될 때마다 이러한 계열을 생성하는 경향이 있습니다.
다음으로 떠오르는 질문은 왜 의사 난수 생성기 클래스라고 부르는가입니다. 실제 인간 행동을 통해 이를 이해해 보겠습니다. 인간에게 임의의 색상을 선택하라는 요청을 받으면 특정 색상을 선택합니다. 그가 노란색을 선택했다고 가정 해 보겠습니다. 그가 노란색을 선택한 이유는 무엇입니까? 그가 가장 좋아하는 색일 수도 있고, 주변의 색일 수도 있고, 그 당시 노란색을 생각하고 있었을 수도 있다. 무작위로 무언가를 선택하는 결정을 내리는 이러한 인간 행동을 무작위성의 세계에서는 씨앗이라고 합니다. 시드는 무작위성의 방아쇠이자 시작점입니다.
이제 시드를 예측할 수 있게 되면 난수는 덜 무작위가 됩니다. 그런 다음 이를 의사 난수라고 합니다. 예측할 수 없는 경우 보안 난수라고 합니다.
C# Random Class는 현재 타임스탬프를 시드로 사용하는데, 이는 매우 예측 가능합니다. 따라서 의사 난수 생성기 클래스라는 용어가 사용되었습니다.
System.Security.Cryptography 네임스페이스의 RNGCryptoServiceProvider 클래스는 비밀번호로 사용할 수 있는 보안 난수를 생성할 수 있습니다.
C#에서 난수를 생성하는 첫 번째 작업은 Random 클래스를 초기화하는 것입니다. 이는 클래스의 두 생성자 중 하나를 사용하여 수행할 수 있습니다.
임의의 정수를 생성하는 방법의 예를 살펴보겠습니다.
아래 예에서는 임의의 Int32 숫자를 생성합니다.
코드:
using System; public class Program { public static void Main() { Random rnd = new Random(); for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd)); } public static int GenerateRandomInt(Random rnd) { return rnd.Next(); } }
출력:
아래 예에서는 0~100 범위의 임의의 Int32 숫자를 생성합니다.
코드:
using System; public class Program { public static void Main() { Random rnd = new Random(); for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd)); } public static int GenerateRandomInt(Random rnd) { return rnd.Next(100); } }
출력:
아래 예에서는 50~100 범위의 임의의 Int32 숫자를 생성합니다.
코드:
using System; public class Program { public static void Main() { Random rnd = new Random(); for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd)); } public static int GenerateRandomInt(Random rnd) { return rnd.Next(50, 100); } }
출력:
난수 부동 소수점 숫자를 생성하는 방법의 예를 살펴보겠습니다.
아래 예에서는 임의의 Int32 숫자를 생성합니다.
코드:
using System; public class Program { public static void Main() { Random rnd = new Random(); for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd)); } public static double GenerateRandomInt(Random rnd) { return rnd.NextDouble(); } }
출력:
The most common mistake developers commit while generating random numbers is that for each random number, they create a new object of Random Class. As illustrated in the example below:
Code:
using System; public class Program { public static void Main() { for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt()); } public static int GenerateRandomInt() { Random rnd = new Random(); //a very common mistake return rnd.Next(); } }
Output:
As explained in the working of Random Class, the numbers generated are based on the seed value and the current state of the machine. Any instance of Random class starts with the seed value, saves the current state and uses it to generate the next random number. In the code above, the mistake was to create a new instance of the Random class in every iteration of the loop. So, before the time in the internal clock changes, the code is fully executed, and each instance of Random class is instantiated with the same seed value. This results in the same set of numbers generated every time.
In this article, we learnt about the random number generator in C# and how it internally works to generate random numbers. We also briefly learnt the concept of pseudo-random and secure-random numbers. This information is sufficient for developers to use the Random class in their applications. Deep dive, if interested to explore more on random numbers for passwords and one-time passwords.
위 내용은 C#의 난수 생성기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!