How to generate 5-digit number automatically?

2

How can I generate a random number with 5 digits that do not repeat in the range of [10000 - 99999].

using System;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {
        private static int GetNumeroConta()
        {
            Random a = new Random(DateTime.Now.Ticks.GetHashCode());
            Thread.Sleep(1);
            return a.Next(10000, 99999);
        }

        static void Main(string[] args)
        {
            int numero = GetNumeroConta();
            Console.WriteLine(numero);

            Console.ReadKey();
        }
    }
}
    
asked by anonymous 23.08.2017 / 17:52

1 answer

1

Implement a random number "cache", so the numbers created are cached, and you check whether it exists:

using System.Collections.Generic;
...

static List<int> random_caches = new List<int>();

private static int GetNumeroConta()
{
    // não é necessário colocar o milissegundo para a semente
    // a semente gerada é com base em Environment.TickCount
    Random a = new Random();
    // para quê isso? é realmente inútil sendo que só irá atrasar em 1ms a semente
    //Thread.Sleep(1);

    // obtemos nosso número aleatório
    int c = a.Next(10000, 99999);
    // verifica se o número está em cache
    while(random_caches.Contains(c)) c = a.Next(10000, 99999);
    // adiciona o número ao cache
    random_caches.Add(c);
    // retorna
    return c;
}

See working at .NET Fiddle .

    
23.08.2017 / 22:02