我正在制作一个程序,通过批号搜索产品。我希望批号是一个以00开头的随机6位数代码,例如002142;目前它只是制作一个随机的6位数代码。 这是我尝试过的代码:
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self
action:@selector(hideKeyBoards)] autorelease];
答案 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");