生成6位随机数字

56

我已经搜寻了几个小时,但好像找不到这个问题的答案。我想要生成一个 6 位数的随机数。有些人可能会告诉我使用以下代码:

        Random generator = new Random();
        int r = generator.Next(100000, 1000000);

但这将限制我的六位数字全部都高于100,000。我希望能够生成一个值为000 001、000 002等的整数,并最终将其转换为字符串。


7
"001" 不是整数,而数字 "1" 是整数。"001" 只能被视为字符串。 - Brad M
1
但它们不是6位数字吗? - Soner Gönül
5
这是一个显示问题。生成1到999999,然后将其格式化为前导零填充的字符串。 - Marc B
2
如果你想把“1”变成“000001”,你需要使用myNumber.ToString().PadLeft(6, '0')。请参阅http://msdn.microsoft.com/en-us/library/system.string.padleft(v=vs.110).aspx。 - David
这不是一个随机数,而是一个由零填充的数字,请尝试在返回的随机数上实现string.format。 - pedrommuller
显示剩余3条评论
8个回答

136

如果你想让一个字符串以零开头,可以尝试这个方法。但是你无法得到像 001 这样的整数。

    Random generator = new Random();
    String r = generator.Next(0, 1000000).ToString("D6");

3
有时候这也会生成5位数字。 - TAHA SULTAN TEMURI

27
你想要一个字符串:
Random r = new Random();
var x = r.Next(0, 1000000);
string s = x.ToString("000000");

例如,

x = "2124"
s = "002124"

请问Random类是否需要被处理? - variable
Random类没有实现IDisposable接口,因此不需要手动处理或在using语句中使用它。 - Matten

6

如评论中所述,“六位数”是一个字符串。以下是如何生成0-999999之间的数字,然后将其格式化为“000482”的方法:

Random r = new Random();
int randNum = r.Next(1000000);
string sixDigitNumber = randNum.ToString("D6");

5
private static string _numbers = "0123456789";
Random random = new Random();


private void DoWork()
{
   StringBuilder builder = new StringBuilder(6);
   string numberAsString = "";
   int numberAsNumber = 0;

   for (var i = 0; i < 6; i++)
   {
      builder.Append(_numbers[random.Next(0, _numbers.Length)]);
   }

   numberAsString = builder.ToString();
   numberAsNumber = int.Parse(numberAsString);

}

4

这是一个更好的解决方案,因为它会给你更多的随机数,并且不基于系统时钟。

密码学随机数生成器创建密码学强度的随机值。

System.Security.Cryptography.RandomNumberGenerator.GetInt32(0, 1000000);

为了确保结果值有六位数字,您可以将其转换为字符串并在开头附加零。例如使用上面Matt的方法:GeneratedValue.ToString().Padleft(6,'0')
有关更多详细信息,请参见官方文档

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

3
string s = generator.Next(0, 1000000).ToString("D6");

或者

string s = generator.Next(0, 1000000).ToString("000000");

3

我同意上面的评论,000 001不能是一个整数,但可以是一个带有以下内容的字符串:

Random generator = new Random();
int r = generator.Next(1, 1000000);
string s = r.ToString().PadLeft(6, '0');

2
上限是排除在外的。 - Matten

0

使用的解决方案

Random generator = new Random();
int r = generator.Next(1, 1000000);

似乎并不总是有效。 我在类构造函数中调用以下方法,第一次后它会给出相同的数字。

        internal string GenerateID()
        {
            Random r = new Random();
            int randNum = r.Next(1000000);
            string sixDigitNumber = randNum.ToString("D6");
            return sixDigitNumber;
        }

附上.NET单元测试类中的调试语句图像。

我的项目是.NET 4.8。

我已经开始使用上面推荐的 System.Security.Cryptography.RandomNumberGenerator

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接