我如何在c# asp.net中生成16位不重复的随机数字?我已经了解了GUID的概念,它可以生成包含字符和数字的序列,但我不想要字符。请问是否有其他方法实现这个功能呢?
请提供相关建议,谢谢。
private static Random RNG = new Random();
public string Create16DigitString()
{
var builder = new StringBuilder();
while (builder.Length < 16)
{
builder.Append(RNG.Next(10).ToString());
}
return builder.ToString();
}
确保没有冲突需要跟踪您以前返回的所有结果,这实际上是一种内存泄漏(请注意,我不建议您使用此方法 - 跟踪所有先前的结果是一个坏主意,应该依赖于长达16个字符的随机字符串的熵来确保唯一性,如果需要更多唯一性,请增加熵,但我将包括此代码以展示如何做到):
private static HashSet<string> Results = new HashSet<string>();
public string CreateUnique16DigitString()
{
var result = Create16DigitString();
while (!Results.Add(result))
{
result = Create16DigitString();
}
return result;
}
N
,创建 k
个数字的组合,它们全部都是唯一的可能性是 e^{\frac{-k(k-1)}{2N}}。使用 1000 万作为 k
,这将给出一个概率为 99.004983473%。 - Rich O'Kelly
获取随机数字,如果不可用:增加。写入已使用。
- Lieven Keersmaekers