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

时间:2016-08-08 08:37:16

标签: c# random

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

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                                                            target:self
                                                                                            action:@selector(hideKeyBoards)] autorelease];

10 个答案:

答案 0 :(得分:3)

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

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

Next()函数中的参数也是上限独占,因此请使用10000而不是9999,这样你也可以得到9999作为随机数。

答案 1 :(得分:2)

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

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

编辑:

感谢您标记为正确答案,但我的代码错误。如果您没有将最小值传递给下一个方法,您可以获得1至999的数字,这是您不想要的。我编辑了我的答案。希望它没有迟到的任何事情。

答案 2 :(得分:1)

你写了.Next(999999)所以我假设你想要从0到999999的随机值。

首先你应该写1000000,因为.Next()确定一个从0到输入值的随机数。

然后你应该

替换

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

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

用0

填充缺失的数字

答案 3 :(得分:1)

另一种可能性是"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");
 }

答案 4 :(得分:1)

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

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

使用new Random()。如果你打算以你的方式播种它,它必须是一个静态变量(或者至少是一个类成员 - 但是对于每个类的实例,你最终会生成相同的值)

答案 5 :(得分:0)

我会做这样的事情:

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

您的ToString("D6")完全符合您的要求,但由于您传递了random.Next的大上限,因此在许多情况下都无法填充。

正如其他人所指出的那样,你可以加上"00"的前缀,或者你可以设置一个较低的上限,因为"D6"会处理你的填充:

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

如果您希望始终的数字是4位数而不是"000123",那么您还需要指定下限:

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

另请注意,如果您在示例中指定了硬编码种子,则总会得到相同的随机数。

答案 8 :(得分:0)

这样的事情会发生。

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

答案 9 :(得分:0)

public string RandomNum()
{
    return "00"+ new Random().Next(9999).ToString("D4");
}

您还可以为Next()函数提供最小和最大数量。像:

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