C#需要一个以两个0';s

本文关键字:两个 一个以 | 更新日期: 2023-09-27 18:01:19

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

 public string getRandomNumber()
    {
        Random random = new Random(100000);
        string randomNumber = random.Next(999999).ToString("D6");
        return randomNumber;
    }

C#需要一个以两个0';s

public string getRandomNumber()
{
    Random random = new Random();
    string randomNumber = "00"+random.Next(10000).ToString("D4");
    return randomNumber;
}

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

此外,Next((函数中的参数是上界互斥的,因此使用10000而不是9999,这样您也可以获得9999作为随机数。

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

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

编辑:

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

您编写了.Next(999999),所以我假设您想要0到999999之间的随机值。

首先,您应该编写1000000,因为.Next()确定了一个从0开始的随机数,以排除输入值。

那么你应该

更换

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

带有

string randomNumber = random.Next(999999).ToString().PadLeft(6, '0');

用0 填充缺失的数字

另一种可能性是"000000"格式字符串(六个数字,前导零是强制性的(:

  • random.Next(10000)-最后4位为随机数字
  • ToString("000000")-返回6位数字(至少2个前导零(

实施

 string randomNumber = random.Next(10000).ToString("000000");

另一个问题是不应该在本地声明random

 // Simplest, but not thread safe
 private static random = new Random();
 ...
 public static string getRandomNumber()
 {
     return random.Next(10000).ToString("000000");
 }

你很接近。你真正想要的是一个随机的四位数字,用两个前导零填充(到六位(。所以使用Random.Next(10000).ToString("D6"). ToString("000000")
然而,请注意,对于小于1000的数字,您最终会得到两个以上的前导零。为了避免这种情况,可以执行Random.Next(1000,10000),其中第一个数字包含,第二个数字不包含。

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

使用new 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;
}

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

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

您的ToString("D6")完全按照您的意愿执行,但由于您要通过random.Next的一个大上限,因此在许多情况下将没有任何可填充的内容。

正如其他人所指出的,你可以在"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 string RandomNum()
{
    return "00"+ new Random().Next(9999).ToString("D4");
}

您还可以为Next((函数指定最小和最大数字。类似:

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