我已经搜寻了几个小时,但好像找不到这个问题的答案。我想要生成一个 6 位数的随机数。有些人可能会告诉我使用以下代码:
Random generator = new Random();
int r = generator.Next(100000, 1000000);
但这将限制我的六位数字全部都高于100,000。我希望能够生成一个值为000 001、000 002等的整数,并最终将其转换为字符串。
我已经搜寻了几个小时,但好像找不到这个问题的答案。我想要生成一个 6 位数的随机数。有些人可能会告诉我使用以下代码:
Random generator = new Random();
int r = generator.Next(100000, 1000000);
但这将限制我的六位数字全部都高于100,000。我希望能够生成一个值为000 001、000 002等的整数,并最终将其转换为字符串。
如果你想让一个字符串以零开头,可以尝试这个方法。但是你无法得到像 001 这样的整数。
Random generator = new Random();
String r = generator.Next(0, 1000000).ToString("D6");
Random r = new Random();
var x = r.Next(0, 1000000);
string s = x.ToString("000000");
例如,
x = "2124"
s = "002124"
如评论中所述,“六位数”是一个字符串。以下是如何生成0-999999之间的数字,然后将其格式化为“000482”的方法:
Random r = new Random();
int randNum = r.Next(1000000);
string sixDigitNumber = randNum.ToString("D6");
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);
}
这是一个更好的解决方案,因为它会给你更多的随机数,并且不基于系统时钟。
密码学随机数生成器创建密码学强度的随机值。
System.Security.Cryptography.RandomNumberGenerator.GetInt32(0, 1000000);
GeneratedValue.ToString().Padleft(6,'0')
。string s = generator.Next(0, 1000000).ToString("D6");
或者
string s = generator.Next(0, 1000000).ToString("000000");
我同意上面的评论,000 001不能是一个整数,但可以是一个带有以下内容的字符串:
Random generator = new Random();
int r = generator.Next(1, 1000000);
string s = r.ToString().PadLeft(6, '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
。