如何在没有冲突的情况下在asp.net中生成随机唯一的16位数字

Viv*_*ngh 4 asp.net random guid c#-4.0

如何在c#asp.net中生成16位唯一随机数而不重复,因为我已经阅读了GUID的概念,它生成字符和数字,但我不想要字符

请建议有没有办法实现它

Ric*_*lly 5

您可以使用Random类创建一个随机数:

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();
}
Run Code Online (Sandbox Code Playgroud)

确保没有冲突需要您跟踪之前返回的所有结果,这实际上是内存泄漏(注意我不建议您使用此功能 - 跟踪所有以前的结果是一个坏主意,依赖于最多16个字符的随机字符串的熵,如果你想要更多的独特性,增加熵,但我应该包括它来显示它如何做到):

private static HashSet<string> Results = new HashSet<string>();

public string CreateUnique16DigitString()
{
  var result = Create16DigitString();
  while (!Results.Add(result))
  {
    result = Create16DigitString();
  }

  return result;
}
Run Code Online (Sandbox Code Playgroud)

  • @VivekSingh我所能提供的只是概率.有一个16位数字的10 ^ 16个组合,我们称之为"N",创建"k"数字给出了它们都是e ^ {\ frac {-k(k-1)} {2N的唯一概率的概率}}.使用1000万作为k,这给出了99.004983473%的概率 (2认同)