2009-06-28 6 views

Antwort

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() nimmt Argumente, die Sie min und einen maximalen Wert angeben lassen, das ist so, wie Sie die Länge steuern würde.

+1

Es wird nur funktionieren, wenn 'Länge <= 8 'als' int.MaxValue 'passt in 8 Hex-Ziffern. –

+0

Wenn er wirklich möchte, dass die hexadezimale Zeichenfolge eine Länge seiner Wahl hat, benötigen Sie Code, der die minimale Zahl mit hex Länge 'x' und maximal mit Länge 'x' berechnet. – colithium

+0

Ja. Ich habe das absichtlich weggelassen, aber Sie müssten im Grunde nur eine Konvertierung auf 0xF machen? (Entschuldigen Sie meinen regulären Ausdruck), um die ganze Zahl zu finden, die Ihrer gewünschten Länge entspricht. – womp

4

hängt davon ab, wie zufällig Sie es wollen, aber hier sind 3 Alternativen: 1) Normalerweise verwende ich nur Guid.NewGuid und wählen Sie einen Teil davon aus (abhängig davon, wie große Zahl ich will).

2) System.Random (siehe andere Antworten) ist gut, wenn Sie nur 'zufällig genug' wollen.

3) System.Security.Cryptography.RNGCryptoServiceProvider

+1

Aufschneiden einer GUID scheint wie a Wirklich schlechte Idee zu mir. Sie sind nur als Ganzes genommen einzigartig. Viele Teile einer GUID sind sicherlich nicht zufällig. – spender

+1

@spender ist korrekt, zum Beispiel enthalten viele GUIDs die MAC-Adresse des PCs, der sie erzeugt. –

+0

Eh, nein, die auf Mac-Adressen basierenden Guids wurden im Jahr 2000 zurückgezogen, da sie als potentielles Sicherheitsproblem betrachtet wurden. GUIDs werden jetzt von einem Zufallszahlengenerator erzeugt (122 Bits zufällig, 6 Bits nicht zufällig). In jedem Fall ergibt die Verwendung eines 32-Bit-Segments einer GUID eine zufälligere Zahl als System.Random. Das ist - es sei denn, Sie rufen UuidCreateSequential, die für die Abwärtskompatibilität hinzugefügt wurde, falls jemand alte Stil Guids wollen, aber das ist eine andere Geschichte. – KristoferA

2

Hier ist eine, die einen 256-Bit-Hex-String (8x8 = 256) zurückkehren würde:

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; 
} 
Verwandte Themen