C#에서 난수 즉 Random 숫자와 문자열 생성하기

C#의 Random 클래스는 무작위 숫자 즉 난수 를 생성하는 기능을 제공합니다. Random 클래스는 문자열을 포함한 다른 데이터 유형도 생성할 수 있습니다. 이 코드 예제에서는 C#에서 무작위 숫자와 문자열을 생성하는 방법을 배워보겠습니다.

이 글에서는 C#의 Random 클래스를 사용하여 랜덤 숫자와 문자열을 생성하는 방법에 대해 자세히 알아보겠습니다.

C#에서 무작위 숫자와 무작위 문자열 생성하기

Random 클래스 소개

Random 클래스는 C#에서 랜덤 숫자를 생성하는 데 사용됩니다. 또한 이 클래스를 사용하여 문자열을 포함한 다른 데이터 유형도 생성할 수 있습니다. 이 코드 예제에서는 C#에서 랜덤 숫자를 생성하는 방법을 알아보겠습니다.

Random 클래스 생성자

Random 클래스의 생성자는 두 가지 오버로드된 형식이 있습니다. 생성자는 값을 입력하지 않거나 시드 값을 입력할 수 있습니다. Random 클래스는 Random.Next(), Random.NextBytes(), Random.NextDouble() 메서드를 제공합니다. Random.Next() 메서드는 랜덤 숫자를 반환하고, Random.NextBytes()는 랜덤 숫자로 채워진 바이트 배열을 반환하며, Random.NextDouble()은 0.0과 1.0 사이의 랜덤 숫자를 반환합니다.

Random.Next() 메서드

Random.Next() 메서드는 세 가지 오버로드된 형식이 있으며, 랜덤 숫자의 최솟값과 최댓값 범위를 설정할 수 있습니다.

다음 코드는 랜덤 숫자를 반환합니다.

int num = random.Next();

Random.Next(1000) 메서드

다음 코드는 1000 미만의 랜덤 숫자를 반환합니다.

int num = random.Next(1000);

RandomNumber 메서드

다음 코드는 최솟값과 최댓값 범위 내에서 랜덤 숫자를 생성합니다.

private readonly Random _random = new Random();

public int RandomNumber(int min, int max)
{
  return _random.Next(min, max);
}

RandomNumber와 RandomString 조합

RandomNumber와 RandomString 두 가지 메서드를 결합하여 랜덤 문자열과 숫자의 조합을 생성할 수 있습니다.

다음 코드는 주어진 크기로 무작위 문자열 생성하는 코드 입니다.

```csharp
public string RandomString(int size, bool lowerCase = false)
{
  var builder = new StringBuilder(size);

  // 유니코드/ASCII 문자는 두 그룹으로 나눠집니다.
  // (문자 65–90 / 97–122):
  // 첫 번째 그룹에는 대문자가 포함되고
  // 두 번째 그룹에는 소문자가 포함됩니다.

  // char는 하나의 유니코드 문자입니다.
  char offset = lowerCase ? 'a' : 'A';
  const int lettersOffset = 26; // A...Z 또는 a..z: 길이=26

  for (var i = 0; i < size; i++)
  {
   var @char = (char)_random.Next(offset, offset + lettersOffset);
   builder.Append(@char);
  }

  return lowerCase ? builder.ToString().ToLower() : builder.ToString();
}
```

RandomPassword 메서드

다음 코드는 길이가 10인 패스워드를 생성하며, 처음 4개 글자는 소문자, 다음 4개 글자는 숫자, 마지막 2개 글자는 대문자입니다.

```csharp
// 무작위 비밀번호 생성
// 4-소문자 + 4-숫자 + 2-대문자
public string RandomPassword()
{
  var passwordBuilder = new StringBuilder();

  // 4글자의 소문자
  passwordBuilder.Append(RandomString(4, true));

  // 1000에서 9999 사이의 4자리 숫자
  passwordBuilder.Append(RandomNumber(1000, 9999));

  // 2글자의 대문자
  passwordBuilder.Append(RandomString(2));
  return passwordBuilder.ToString();
}
```

전체 코드 살펴보기

Visual Studio Consol App 으로 작성된 완전한 코드를 살펴보겠습니다.

using System;
using System.Text;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var generator = new RandomGenerator();
            var randomNumber = generator.RandomNumber(5, 100);
            Console.WriteLine($"5에서 100 사이의 무작위 숫자: {randomNumber}");

            var randomString = generator.RandomString(10);
            Console.WriteLine($"10자리 무작위 문자열: {randomString}");

            var randomPassword = generator.RandomPassword();
            Console.WriteLine($"4-소문자 + 4-숫자 + 2-대문자 무작위 비밀번호: {randomPassword}");

            Console.ReadKey();
        }
    }

    public class RandomGenerator
    {
        // 무작위 숫자 생성기 인스턴스화
        // 같은 인스턴스에서 계속 Next를 사용하는 것이 좋습니다.
        private readonly Random _random = new Random();

        // 범위 내에서 무작위 숫자 생성
        public int RandomNumber(int min, int max)
        {
            return _random.Next(min, max);
        }

        // 주어진 크기로 무작위 문자열 생성
        public string RandomString(int size, bool lowerCase = false)
        {
            var builder = new StringBuilder(size);

            // 유니코드/ASCII 문자는 두 그룹으로 나눠집니다.
            // (문자 65–90 / 97–122):
            // 첫 번째 그룹에는 대문자가 포함되고
            // 두 번째 그룹에는 소문자가 포함됩니다.

            // char는 하나의 유니코드 문자입니다.
            char offset = lowerCase ? 'a' : 'A';
            const int lettersOffset = 26; // A...Z 또는 a..z: 길이 = 26

            for (var i = 0; i < size; i++)
            {
                var @char = (char)_random.Next(offset, offset + lettersOffset);
                builder.Append(@char);
            }

            return lowerCase ? builder.ToString().ToLower() : builder.ToString();
        }

        // 4-소문자 + 4-숫자 + 2-대문자
        public string RandomPassword()
        {
            var passwordBuilder = new

       StringBuilder();

            // 4글자의 소문자
            passwordBuilder.Append(RandomString(4, true));

            // 1000에서 9999 사이의 4자리 숫자
            passwordBuilder.Append(RandomNumber(1000, 9999));

            // 2글자의 대문자
            passwordBuilder.Append(RandomString(2));
            return passwordBuilder.ToString();
        }
    }
}

결과는 다음과 같이 보여집니다.

output
5에서 100 사이의 무작위 숫자: 42
10자리 무작위 문자열: THLTDBRTZS
4-소문자 + 4-숫자 + 2-대문자 무작위 비밀번호: aqho9998XI

결론

이 글과 코드와 예제를 통해 C#에서 랜덤 숫자와 문자열을 생성하는 방법을 배웠습니다. 이러한 기능은 다양한 프로그래밍 작업에 유용하게 사용될 수 있습니다.

Leave a Comment