2009-06-28 17 views

답변

36
static Random random = new Random(); 
public static string GetRandomHexNumber(int digits) 
{ 
    byte[] buffer = new byte[digits/2]; 
    random.NextBytes(buffer); 
    string result = String.Concat(buffer.Select(x => x.ToString("X2")).ToArray()); 
    if (digits % 2 == 0) 
     return result; 
    return result + random.Next(16).ToString("X"); 
} 
13
Random random = new Random(); 
    int num = random.Next(); 
    string hexString = num.ToString("X"); 

random.Next는(), 당신은 최소 및 최대 값을 지정할 수 있습니다 인수를.

+1

그것은 일 것이다 단지 '의 경우 길이 <= 8 '은'int.MaxValue'가 8 자리 16 진수로 맞습니다. –

+0

만약 그가 원하는 길이의 16 진수 문자열을 원한다면 16 진수 길이 'x'와 길이가 'x'인 최소 숫자를 계산하는 코드가 필요합니다. – colithium

+0

예. 나는 그것을 의도적으로 버렸지 만, 당신은 기본적으로 0xF에서 변환을해야할까요? ('내 정규식을 스캔하면) 원하는 길이에 맞는 정수를 찾으십시오. – womp

4

얼마나 무작위인지에 따라 다르지만 여기에 3 가지 대안이 있습니다. 1) 저는 보통 Guid.NewGuid를 사용하고 그 중 일부를 선택합니다.

2) System.Random (다른 응답 참조)은 '랜덤'을 원하는 경우에 적합합니다.

3) System.Security.Cryptography.RNGCryptoServiceProvider

+1

GUID를 잘라내는 것은 나에게 진짜 나쁜 생각. 그들은 유일하게 전체적으로 취한 것입니다. GUID의 많은 비트는 확실히 무작위로 적합하지 않습니다. – spender

+1

@spender가 정확합니다. 예를 들어 많은 GUID에 해당 GUID를 생성하는 PC의 MAC 주소가 들어 있습니다. –

+0

예, MAC 주소 기반 guid는 잠재적 인 보안 문제로 간주되어 2000 년에 은퇴했습니다. 이제 GUID는 난수 생성기 (122 비트 랜덤, 6 비트 비 랜덤)에 의해 생성됩니다. 어느 쪽이든, 32 비트 (또는 그 이상)의 guid 조각을 사용하면 System.Random보다 더 많은 난수가 생깁니다. 이전 버전의 guid를 원한다면 하위 호환성을 위해 추가 된 UuidCreateSequential을 호출하지 않는 이상 그렇습니다.하지만 다른 이야기입니다. – KristoferA

2

는 여기에 256 비트 16 진수 문자열을 반환 하나입니다 (8 * 8 = 256) :

private static string RandomHexString() 
{ 
    // 64 character precision or 256-bits 
    Random rdm = new Random(); 
    string hexValue = string.Empty; 
    int num; 

    for (int i = 0; i < 8; i++) 
    { 
     num = rdm.Next(0, int.MaxValue); 
     hexValue += num.ToString("X8"); 
    } 

    return hexValue; 
}