2009-06-28 16 views

risposta

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() batte argomenti che consentono di specificare un minimo e un valore massimo, in modo che come si dovrebbe controllare la lunghezza.

+1

che funzionerà solo se 'lunghezza <= 8' come 'int.MaxValue' corrisponde a 8 cifre esadecimali. –

+0

Se davvero vuole che la stringa esadecimale abbia una lunghezza a sua scelta, è necessario un codice che calcoli il numero minimo con lunghezza esadecimale 'x' e massimo con lunghezza 'x'. – colithium

+0

Sì. L'ho lasciato fuori di proposito, ma basteresti semplicemente fare una conversione su 0xF? ('scusa la mia espressione regolare) per trovare qualunque numero intero corrisponda alla lunghezza desiderata. – womp

4

Dipende dal modo in cui lo si desidera, ma qui ci sono 3 alternative: 1) Di solito uso Guid.NewGuid e ne seleziono una parte (in base alla quantità che desidero).

2) System.Random (vedere altre risposte) è buono se si desidera solo "abbastanza casuale".

3) System.Security.Cryptography.RNGCryptoServiceProvider

+1

Affettare un GUID sembra un vera cattiva idea per me. Sono unici solo nel loro insieme. Molti bit di un GUID non sono certamente casuali. – spender

+1

@spender è corretto, ad esempio molti GUID contengono l'indirizzo MAC del PC che li genera. –

+0

Eh, no, i guids basati su mac-address sono stati ritirati nel 2000, poiché erano considerati un potenziale problema di sicurezza. I GUID sono ora generati da un generatore di numeri casuali (122 bit casuali, 6 bit non casuali). In entrambi i casi, l'uso di una porzione di bit 32 (o più) di un guid fornisce un numero più casuale di System.Random. Cioè, a meno che non chiami UuidCreateSequential che è stato aggiunto per compatibilità con le versioni precedenti nel caso in cui qualcuno volesse dei vecchi guai stile, ma questa è una storia diversa. – KristoferA

2

Ecco uno che avrebbe restituire una stringa esadecimale a 256 bit (8x8 = 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; 
} 
Problemi correlati