2009-06-28 31 views

Respuesta

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() toma argumentos que le permiten especificar un mínimo y un valor máximo, por lo que es como se le controlar la longitud.

+1

que va a trabajar sólo si 'longitud <= 8' como 'int.MaxValue' cabe en 8 dígitos hexadecimales. –

+0

Si realmente quiere que la cadena hexagonal tenga la longitud que elija, necesitará un código que calcule el número mínimo con la longitud hex 'x' y el máximo con la longitud 'x'. – colithium

+0

Sí. Lo dejé a propósito, ¿pero básicamente tendrías que hacer una conversión en 0xF? ('scuse mi expresión regular) para encontrar cualquier número entero que coincida con la longitud deseada. – womp

4

Depende de qué tan aleatorio lo desee, pero aquí hay 3 alternativas: 1) Usualmente solo uso Guid.NewGuid y selecciono una parte (dep. De la cantidad de números que quiero).

2) System.Random (ver otras respuestas) es bueno si solo quieres 'al azar'.

3) System.Security.Cryptography.RNGCryptoServiceProvider

+1

Cortar un GUID parece una una mala idea para mí. Solo son únicos tomados como un todo. Muchos bits de un GUID ciertamente no califican como aleatorios. – spender

+1

@spender es correcto, por ejemplo, muchos GUID contienen la dirección MAC de la PC que los genera. –

+0

Eh, no, las guías basadas en mac direcciones se retiraron en 2000-ish ya que se consideraron un posible problema de seguridad. Los GUID ahora se generan mediante un generador de números aleatorios (122 bits aleatorios, 6 bits no aleatorios). De cualquier manera, usar un segmento de 32 bits (o más) de un guid da un número más aleatorio que System.Random. Eso es, a menos que llame a UuidCreateSequential que se agregó para compatibilidad con versiones anteriores en caso de que alguien quiera guiones de estilo antiguo, pero esa es una historia diferente. – KristoferA

2

Aquí hay uno que devolver una cadena hexadecimal de 256 bits (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; 
} 
Cuestiones relacionadas