これはRandomNumberGenerator
の実装によりますが、今のところ、呼び出しごとに新しいインスタンスをインスタンス化しているので、衝突の確率は100%と考えています。 System.Randomを使用していた場合は、それは... try it out on DotNetFiddleです。
public class Program
{
public static string RandomNumber()
{
var rng = new System.Random();
var bytes = new byte[8];
rng.NextBytes(bytes);
return Convert.ToBase64String(bytes);
}
public static void Main()
{
Console.WriteLine(RandomNumber());
Console.WriteLine(RandomNumber());
}
}
出力(おっと!):
EgNMBvntr1w=
EgNMBvntr1w=
私の提案はRandomNumberGenerator
のインスタンスを1つだけインスタンス化し、プログラムの寿命を通じて静的変数に保持することです。あなたがそうするならば、確率は2^64の1のようになります。
public class Program
{
private static readonly rng = new System.Random();
public static string RandomNumber()
{
var bytes = new byte[8];
rng.NextBytes(bytes);
return Convert.ToBase64String(bytes);
}
public static void Main()
{
Console.WriteLine(RandomNumber());
Console.WriteLine(RandomNumber());
}
}
明らかに、何回か呼び出すと衝突が発生します...ただし、乱数ジェネレータの品質と必要な結果の数を知らなくても正解を返すことは不可能です。 –