2009-06-28 8 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には、それらを生成する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; 
} 
関連する問題