Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#으로 무작위(랜덤) 문자열을 생성하는 방법 완벽 정리

C#에서 무작위 문자열을 생성하는 것은 임시 비밀번호, 테스트 데이터, 고유 식별자 등을 만들 때 자주 사용되는 기법입니다. 이번 글에서는 StringBuilderRandom 클래스를 활용하여 원하는 길이의 랜덤 문자열을 만드는 방법을 단계별로 살펴보겠습니다.

1단계: StringBuilder 객체 준비

먼저 문자열을 효율적으로 조립하기 위해 StringBuilder 객체를 선언합니다. 반복문 안에서 문자를 계속 추가해야 하므로, 일반 string 연결보다 성능 면에서 유리한 StringBuilder가 적합합니다.

StringBuilder str = new StringBuilder();

2단계: Random 객체 생성

다음으로 난수를 발생시킬 Random 객체를 생성합니다. 여기서는 현재 시간의 틱(Ticks) 값을 시드(seed)로 사용하여 실행할 때마다 다른 결과가 나오도록 설정했습니다.

Random random = new Random((int)DateTime.Now.Ticks);

3단계: 반복문으로 랜덤 문자 생성

이제 원하는 문자열의 길이만큼 반복문을 실행합니다. 아래 예제에서는 4글자의 랜덤 문자열을 생성하기 위해 반복 횟수를 4로 지정했습니다.

for (int i = 0; i < 4; i++) {
   c = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
   str.Append(c);
}

각 반복마다 동작하는 원리는 다음과 같습니다.

  • random.NextDouble(): 0.0 이상 1.0 미만의 실수형 난수를 반환합니다.
  • 26 * 난수 + 65: 알파벳 대문자는 아스키(ASCII) 코드 65('A')부터 90('Z')까지 총 26개입니다. 따라서 이 수식은 65~90 사이의 값을 만들어냅니다.
  • Convert.ToChar(): 계산된 숫자 값을 해당하는 문자로 변환합니다.
  • str.Append(c): 변환된 문자를 StringBuilder에 추가합니다.

전체 예제 코드

지금까지 설명한 내용을 하나로 합친 완전한 코드는 다음과 같습니다.

using System.Text;
using System;
class Program {
   static void Main() {
      StringBuilder str = new StringBuilder();
      char c;
      Random random = new Random((int)DateTime.Now.Ticks);
      for (int i = 0; i < 4; i++) {
         c = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
         str.Append(c);
      }
      Console.WriteLine(str.ToString());
   }
}

실행 결과

프로그램을 실행하면 매번 다른 4글자 대문자 문자열이 출력됩니다. 한 번의 실행 결과 예시는 아래와 같습니다.

ATTS

추가 팁: 더 안전하고 유연한 방법

실무에서는 몇 가지 개선점을 고려하는 것이 좋습니다.

  • Random 시드 문제: .NET Core 이상에서는 new Random()만 호출해도 자동으로 좋은 시드가 적용되므로, 굳이 Ticks를 넘겨줄 필요가 없습니다.
  • 숫자·소문자 포함: 소문자(a~z)는 97~122, 숫자(0~9)는 48~57 범위를 활용하면 됩니다.
  • 암호학적 난수: 보안 목적(토큰, 비밀번호)이라면 일반 Random 대신 System.Security.Cryptography.RandomNumberGenerator를 사용하는 것이 안전합니다.

이처럼 C#에서는 Random 클래스와 간단한 수식만으로도 손쉽게 무작위 문자열을 생성할 수 있습니다. 필요에 따라 길이와 문자 범위를 조절하여 다양한 용도로 활용해 보세요.