簡體   English   中英

C#中唯一的4位隨機數

[英]Unique 4 digit random number in C#

我想生成一個唯一的 4 位隨機數。 這是我嘗試過的以下代碼:

生成隨機數的代碼

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

問題是我收到了一個值為241的隨機編號,它不是 4 位數字。 代碼有問題嗎?

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

您需要一個 4 位數的代碼,以 1000 開頭

請改用此代碼:

private Random _random = new Random();

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

241 是一個四位數,如果您使用前導零:0241。

用這樣的格式字符串顯示返回的數字:

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

僅一行代碼

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

0 與 0000 相同。

241 與 0241 相同。

您可以將整數格式化為帶有前導零的字符串。

使用:int _min = 1000;

或者如果你想要 0241,請使用前導 0

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();

我建議創建新列表並檢查此列表是否包含任何數字

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

擴展 brij 的答案,但使用 0000 到 9999 而不是 1000 到 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);

或者如果你想最小化線條:

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

使用它,您將避免以 00[...] 開頭的數字,您還可以指定長度。

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 ...

這是生成任何數字的方法。 如果它包含重復的數字,則內部循環將重新生成該數字,因此隨機數將僅由唯一數字組成。

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;
    }

你可以考慮這樣的事情。

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

上面的代碼給出了結果 0050。

同樣,您可以嘗試轉換為字符串並進行驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM