Gerando hexadecimal aleatório em CSharp

Olá Pessoal.

Recentemente tive a necessidade de gera um número hexa randômico no C#.
Desenvolvi este código simples, que compartilho com vocês.

using System;
using System.Linq;

namespace RandomHEXNumber
{

    /// <summary>
    /// extensões para tipos randômicos
    /// </summary>
    public static class RandomExtensions
    {
        /// <summary>
        /// gera um número hexadecimal com tamanho de 4 dígitos
        /// </summary>
        /// <param name="random">instância do tipo Random</param>
        /// <returns>número hexa randomico</returns>
        public static string NextHex(this Random random)
        {
            return NextHex(random, 4);
        }

        /// <summary>
        /// gera um número hexadecimal com tamanho definido em digits
        /// </summary>
        /// <param name="random">instância do tipo Random</param>
        /// <param name="digits">quantidade de dígitos que o random deverá retornar</param>
        /// <returns>número hexa randomico</returns>
        public static string NextHex(this Random random, int digits)
        {
            //se estiver em um for, o random usa o milisegundos para gerar o número
            //logo pode causar numeros repetidos. Sendo assim vamos esperar 10 milisegundos
            System.Threading.Thread.Sleep(10);

            //array de bytes do random
            byte[] buffer = new byte[digits / 2];

            //gerar o random
            random.NextBytes(buffer);

            //concatenar o buffer
            string result = String.Concat(buffer.Select(x => x.ToString("X2")).ToArray());
            if (digits % 2 == 0)
                return result;

            //adiciona mais um dígito.
            result += random.Next(16).ToString("X");
            return result;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Gerando número hexa com tamanho padrão");
            Console.WriteLine(new Random().NextHex());
            Console.WriteLine("");

            Console.WriteLine("Gerando número hexa com tamanho definido");
            Console.WriteLine(new Random().NextHex(7));
            Console.WriteLine("");

            Console.WriteLine("Gerando número hexa em um laço");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(new Random().NextHex(i));
            }

            Console.ReadKey();
        }
    }
}

É isso ai pessoal 🙂
Até o próximo
♦ Marcelo

Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos, e residindo na região Sul do Brasil.
Trabalha com desenvolvimento de aplicações desde os 17 anos. Atualmente é Arquiteto Organizacional na Unimake Software.
Para saber mais ... http://desenvolvedores.net/marcelo
[]'s

Você vai gostar de...

Postagens populares.

Deixe um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.