C# C需要一个以两个0开头的六位数

C# C需要一个以两个0开头的六位数,c#,random,C#,Random,我正在做一个程序,在那里产品的批号搜索。我希望批号是以00开头的随机6位代码,例如002142;目前它只生成一个随机的6位代码。 以下是我尝试过的代码: public string getRandomNumber() { Random random = new Random(100000); string randomNumber = random.Next(999999).ToString("D6"); return randomNum

我正在做一个程序,在那里产品的批号搜索。我希望批号是以00开头的随机6位代码,例如002142;目前它只生成一个随机的6位代码。 以下是我尝试过的代码:

 public string getRandomNumber()
    {
        Random random = new Random(100000);
        string randomNumber = random.Next(999999).ToString("D6");
        return randomNumber;
    }
您编写了.next9999,所以我假设您想要0到999999之间的随机值

首先,您应该写入1000000,因为。然后,确定从0到输入值的随机数

那你应该

替换

string randomNumber = random.Next(1000000).ToString("D6");

要用0来填充缺少的数字,您编写了.Next999999,因此我假设您需要0到999999之间的随机值

首先,您应该写入1000000,因为。然后,确定从0到输入值的随机数

那你应该

替换

string randomNumber = random.Next(1000000).ToString("D6");

要用0填充缺少的数字,另一种可能是000000格式字符串六位数字,必须使用前导零:

random.Next10000-最后4位数字是随机的 TOSTRING00000-返回至少2个前导零的6位数字 实施

 string randomNumber = random.Next(10000).ToString("000000");
另一个问题是,您不应在本地声明random:

另一种可能是000000格式字符串,六位数字,前导零是必需的:

random.Next10000-最后4位数字是随机的 TOSTRING00000-返回至少2个前导零的6位数字 实施

 string randomNumber = random.Next(10000).ToString("000000");
另一个问题是,您不应在本地声明random:


我会这样做:

var rnd = new Random(); // the internal seed is good enough
var rndNums = string.Join("", Enumerable.Range(0, 4).Select(x => rnd.Next(10)));
return "00" + rndNums;
string GetRandomBatch(int numberOfRandomNumbers)
{
    var rnd = new Random(); // the internal seed is good enough
    var rndNums = string.Join("", Enumerable.Range(0, numberOfRandomNumbers).Select(x => rnd.Next(0, 9)));
    return "00" + rndNums;
}
然后,您可以轻松更改所需的金额,如下所示:

var rnd = new Random(); // the internal seed is good enough
var rndNums = string.Join("", Enumerable.Range(0, 4).Select(x => rnd.Next(10)));
return "00" + rndNums;
string GetRandomBatch(int numberOfRandomNumbers)
{
    var rnd = new Random(); // the internal seed is good enough
    var rndNums = string.Join("", Enumerable.Range(0, numberOfRandomNumbers).Select(x => rnd.Next(0, 9)));
    return "00" + rndNums;
}

我会这样做:

var rnd = new Random(); // the internal seed is good enough
var rndNums = string.Join("", Enumerable.Range(0, 4).Select(x => rnd.Next(10)));
return "00" + rndNums;
string GetRandomBatch(int numberOfRandomNumbers)
{
    var rnd = new Random(); // the internal seed is good enough
    var rndNums = string.Join("", Enumerable.Range(0, numberOfRandomNumbers).Select(x => rnd.Next(0, 9)));
    return "00" + rndNums;
}
然后,您可以轻松更改所需的金额,如下所示:

var rnd = new Random(); // the internal seed is good enough
var rndNums = string.Join("", Enumerable.Range(0, 4).Select(x => rnd.Next(10)));
return "00" + rndNums;
string GetRandomBatch(int numberOfRandomNumbers)
{
    var rnd = new Random(); // the internal seed is good enough
    var rndNums = string.Join("", Enumerable.Range(0, numberOfRandomNumbers).Select(x => rnd.Next(0, 9)));
    return "00" + rndNums;
}

使用插值字符串C 6.0,您可以这样做:

Random random = new Random();
string randomNumber = $"00{random.Next(9999)}";

使用插值字符串C 6.0,您可以这样做:

Random random = new Random();
string randomNumber = $"00{random.Next(9999)}";
您不应该在随机中设置固定种子,因为它将始终生成相同的随机数序列。例如,如果在循环中调用函数,它将始终返回相同的数字,因此不是随机的

另外,下一个函数中的参数是上限独占,因此使用10000代替9999,这样您也可以将9999作为随机数

您不应该在随机中设置固定种子,因为它将始终生成相同的随机数序列。例如,如果在循环中调用函数,它将始终返回相同的数字,因此不是随机的


另外,下一个函数中的参数是上限独占的,因此使用10000而不是9999,这样您也可以获得9999作为随机数。

为什么每个人都要创建6位数?真正需要的是创建4和concat

int random = new Random().Next(1000, 9999);
string code = "00" + random.ToString();
编辑:


谢谢你标记为正确答案,但我的代码是错误的。若不将最小值传递给下一个方法,则可以得到1到999之间的数字,这是您不想要的。我编辑了我的答案。希望一切都不会太晚。

为什么每个人都要创造6位数?真正需要的是创建4和concat

int random = new Random().Next(1000, 9999);
string code = "00" + random.ToString();
编辑:

谢谢你标记为正确答案,但我的代码是错误的。若不将最小值传递给下一个方法,则可以得到1到999之间的数字,这是您不想要的。我编辑了我的答案。希望一切都不会太晚。

您的ToString 6完全按照您希望的方式运行,但因为您正在通过一个较大的随机上限。接下来,在许多情况下,将不会有任何内容需要填充

正如其他人所指出的,您可以使用前缀00,也可以简单地设置一个下限上限,因为D6将负责填充:

string randomNumber = random.Next(9999).ToString("D6");
如果希望数字始终为4位,而不是000123,则还需要指定下限:

string randomNumber = random.Next(1000, 9999).ToString("D6");
还请注意,如果您像示例中那样指定硬编码种子,您将始终返回相同的随机数。

您的ToString 6完全按照您的意愿执行,但因为您传递的随机数上限很大。接下来,在许多情况下,将没有任何填充

正如其他人所指出的,您可以使用前缀00,也可以简单地设置一个下限上限,因为D6将负责填充:

string randomNumber = random.Next(9999).ToString("D6");
如果希望数字始终为4位,而不是000123,则还需要指定下限:

string randomNumber = random.Next(1000, 9999).ToString("D6");

还请注意,如果您像示例中那样指定硬编码种子,您将始终获得相同的随机数。

类似的操作即可

public static void Main()
{
    Random rnd = new Random();
    string Value = rnd.Next(1, 9999).ToString("D6");
    Console.WriteLine(Value);
}
或者获得相同号码的可能性较低

public static void Main()
{
    Random rnd = new Random(DateTime.Now.Millisecond);
    string Value = rnd.Next(1, 9999).ToString("D6");
    Console.WriteLine(Value);
}

这样就行了

public static void Main()
{
    Random rnd = new Random();
    string Value = rnd.Next(1, 9999).ToString("D6");
    Console.WriteLine(Value);
}
或者获得相同号码的可能性较低

public static void Main()
{
    Random rnd = new Random(DateTime.Now.Millisecond);
    string Value = rnd.Next(1, 9999).ToString("D6");
    Console.WriteLine(Value);
}

你很接近。你真正想要的是一个随机的四位数,用两个前导零填充到六位。因此,请使用Random.Next10000.toString或。TOSTRING00000 但是请注意,对于小于1000的数字,您将得到两个以上的前导零。为了避免这种情况,可以执行Random.next100010000,其中第一个数字是包含的,第二个数字是独占的

还要注意的是,路哟 如果要多次调用此方法,则初始化随机值是不正确的!使随机对象成为类成员最好是静态的,并且只对其进行种子设定/初始化一次不要将100000传递给其构造函数,否则如果多次调用此方法,每次都将返回相同的值


使用新的随机变量。如果要按您的方式对其进行种子设定,则它必须是一个静态变量或至少是一个类成员,但是对于类的每个实例,最终生成的值与您接近的值相同。你真正想要的是一个随机的四位数,用两个前导零填充到六位。因此,请使用Random.Next10000.toString或。TOSTRING00000
public string RandomNum()
{
    return "00"+ new Random().Next(9999).ToString("D4");
}
但是请注意,对于小于1000的数字,您将得到两个以上的前导零。为了避免这种情况,可以执行Random.next100010000,其中第一个数字是包含的,第二个数字是独占的

还要注意,如果要多次调用此方法,则初始化随机数的方式是不正确的!使随机对象成为类成员最好是静态的,并且只对其进行种子设定/初始化一次不要将100000传递给其构造函数,否则如果多次调用此方法,每次都将返回相同的值

使用新的随机变量。如果您要按您的方式对其进行种子设定,它必须是一个静态变量或至少是一个类成员,但是对于类的每个实例,最终将生成相同的值

public string RandomNum()
{
    return "00"+ new Random().Next(9999).ToString("D4");
}
您还可以为下一个函数指定最小值和最大值。比如:

return "00"+ new Random().Next(1,9999).ToString("D4");
您还可以为下一个函数指定最小值和最大值。比如:

return "00"+ new Random().Next(1,9999).ToString("D4");

所以你实际上需要一个前缀为2个零的4位代码?所以00+random9999.ToString…所以你可以做一些事情,比如,string.Join,Enumerable.Range0,6.Selectx=>rnd.Next0,9,这将把6个数字连接在一起,然后你就可以预先结束00@BugFinder错误的Random.Next9999可能返回1I我本想用0填充它,但我还没有喝过咖啡Yet请解释允许的最大代码是什么:例如009999,您的实际代码有什么问题?所以您实际上需要一个前缀为2个零的4位代码?所以00+random9999.ToString…所以你可以做一些事情,比如,string.Join,Enumerable.Range0,6.Selectx=>rnd.Next0,9,这将把6个数字连接在一起,然后你就可以预先结束00@BugFinder错误的Random.Next9999可能返回1I我本想用0填充它,但我还没有喝过咖啡请解释一下允许的最大代码是什么:例如009999,以及您的实际代码有什么问题?这是每个数字都相同time@lucycopp:这取决于您在何处声明为随机。它应该放在方法之外,请看我的编辑这是在制作相同的数字time@lucycopp:这取决于您在何处声明为随机。它应该放在方法之外,请参见我的编辑