這取決於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
只有一個實例,並將其保持在一個靜態變量在整個程序的壽命。如果你這樣做,賠率將更像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());
}
}
很顯然,這會產生在,如果你把它不止一次一些點碰撞......但是不可能給出正確的答案不知道你的隨機數生成器,你想要的結果的數量質量。 –