utilizar - numeros aleatorios que no se repitan c#
Número hexadecimal generado aleatoriamente en C# (6)
.... con LINQ
private static readonly Random _RND = new Random();
public static string GenerateHexString(int digits) {
return string.Concat(Enumerable.Range(0, digits).Select(_ => _RND.Next(16).ToString("X")));
}
¿Cómo puedo generar un número hexadecimal aleatorio con una longitud de mi elección usando C #?
Aquí hay uno que devolvería 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;
}
Depende de qué tan aleatorio lo desee, pero aquí hay 3 alternativas: 1) Usualmente solo uso Guid.NewGuid y selecciono una parte (dep. De cuántos números quiero).
2) System.Random (ver otras respuestas) es bueno si solo quieres ''al azar''.
3) System.Security.Cryptography.RNGCryptoServiceProvider
Si quiere que sea criptográficamente seguro, debe usar RNGCryptoServiceProvider.
public static string BuildSecureHexString(int hexCharacters)
{
var byteArray = new byte[(int)Math.Ceiling(hexCharacters / 2.0)];
using (var rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(byteArray);
}
return String.Concat(Array.ConvertAll(byteArray, x => x.ToString("X2")));
}
Random random = new Random();
int num = random.Next();
string hexString = num.ToString("X");
random.Next () toma argumentos que le permiten especificar un valor mínimo y máximo, así es como controlaría la longitud.
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");
}