简体   繁体   中英

Unique 4 digit random number in C#

I want to generate an unique 4 digit random number. This is the below code what I have tried:

Code for generating random number

//Generate RandomNo
public int GenerateRandomNo()
{
    int _min = 0000;
    int _max = 9999;
    Random _rdm = new Random();
    return _rdm.Next(_min, _max);
}

The problem is I have received a random no with value 241 which is not a 4 digit number. Is there any problems with the code?

//Generate RandomNo
public int GenerateRandomNo()
{
    int _min = 1000;
    int _max = 9999;
    Random _rdm = new Random();
    return _rdm.Next(_min, _max);
}

you need a 4 digit code, start with 1000

Use this code instead:

private Random _random = new Random();

public string GenerateRandomNo()
{
    return _random.Next(0, 9999).ToString("D4");
}

241 is a four digit number, if you use leading zeros: 0241.

Display the returned number with a format string like this:

String.Format("{0:0000}", n);

仅一行代码

int num = new Random().Next(1000, 9999);

0 is the same as 0000.

241 is the same as 0241.

You could format the integer to a string with a leading zero.

use: int _min = 1000;

or use leading 0 in case if you want 0241

Random generator = new Random();
string number = generator.Next(1, 10000).ToString("D4");
int NoDigits = 4;
Random rnd = new Random();
textBox2.Text = rnd.Next((int)Math.Pow(10, (NoDigits - 1)), (int)Math.Pow(10, NoDigits) -1).ToString();

I suggest to create new list and check if this list contains any of number

var IdList = new List<int>();
do
{
    billId = random.Next(1, 9000);
} while (IdList.Contains(billId));
IdList.Add(billId);

Expanding on the answer from brij but with 0000 to 9999 rather than 1000 to 9999

string formatting = "0000"; //Will pad out to four digits if under 1000   
int _min = 0;
int _max = 9999;
Random randomNumber = new Random();
var randomNumberString = randomNumber.Next(_min, _max).ToString(formatting);

or if you want to minimalize lines:

Random randomNumber = new Random();
var randomNumberString = randomNumber.Next(0, 9999).ToString("0000");

Using this you will avoid starting numbers with 00[...] and you can also specify the length.

string RandomNumbers(int Length)
{
    Random Rand = new Random();
    StringBuilder SB = new StringBuilder();
    for (int i = 0; i < Length; i++)
        SB.Append(Rand.Next(0, 9));

    return SB.ToString();
}

RandomNumbers(4) // OUTPUT: 9301, 4936, 0692, etc ...

Here is Method to generate any digits number. The loop inside will regenerate the number if it contains duplicate digits, so the random number will consist from unique digits only.

using System.Linq;

public static int GenerateRandomNum()
    {
        // Number of digits for random number to generate
        int randomDigits = 4;
        
        int _max = (int)Math.Pow(10, randomDigits);
        Random _rdm = new Random();
        int _out = _rdm.Next(0, _max);

        while (randomDigits != _out.ToString().ToArray().Distinct().Count())
        {
            _out = _rdm.Next(0, _max);
        }
        return _out;
    }

You can consider something like this.

int length = 4;
int number = 50;
string asString = number.ToString("D" + length);

The above code gives the result 0050.

Similarly you can try converting to string and verify.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM