繁体   English   中英

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

[英]C# needing a six digit number beginning with two 0's

我正在编写一个程序,其中按批次号搜索产品。 我希望批号是一个以00开头的随机6位代码,例如002142; 目前,它仅生成一个随机的6位代码。 这是我尝试过的代码:

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

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

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

为什么每个人都创造6位数字? 真正需要的是create 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") . 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的较大上限。 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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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