Random类都是伪随机的,就是看上去象随机但实际上是用一个公式推导出来的,只要能产 生足够长的伪随机序列就行。相同的种子生成的随机系列肯定相同,
所以一般找个随即的数 做种子这样产生的随机系列可以保证每次都不同,默认是根据计算机时钟精度来设置seed种子.
Random rand = new Random(Guid.NewGuid().GetHashCode());
MSDN上关于GUID的解释:
GUID 是一个 128 位整数(16 字节),可用于所有需要唯一标识符的计算机和网络。此标
识符重复的可能性非常小。
///<summary>
///产生不重复随机数的应用
///摘要 C#随机数的应用中 如果是需要在短时间内产生大量随机数 推荐使用Guid.NewGuid().GetHashCode()作为种子
///</summary>
class Program
{
static void Main(string[] args)
{
FileStream fs = new FileStream(@"c:\Code.txt", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
List<int> Numbers = Program.GetRandom(1000000000,2147483640,210);
for (int i = 0; i < Numbers.Count; i++)
{
Console.WriteLine("GC212" + Numbers[i]);
sw.WriteLine("GC212" + Numbers[i]);
}
sw.Close();
Console.WriteLine("写入文件完成");
Console.ReadLine();
}
///<summary>
///返回一组唯一不重复的随机数
///</summary>
///<param name="minValue">最小值</param>
///<param name="maxValue">最大值</param>
///<returns>返回一组唯一不重复的随机数</returns>
public static List<int> GetRandom(int minValue, int maxValue, int count)
{
List<int> Numbers = new List<int>();
//使用Guid.NewGuid().GetHashCode()作为种子,可以确保Random在极短时间产生的随机数尽可能做到不重复
Random rand = new Random(123456);
Console.WriteLine("GUID:" + Guid.NewGuid().GetHashCode());
int item;
for (int i = minValue; i <= maxValue; i++)
{
item = rand.Next(minValue, maxValue + 1);
while (Numbers.IndexOf(item) != -1)
{
item = rand.Next(minValue, maxValue + 1);
}
Numbers.Add(item);
if (Numbers.Count >= count)
break;
}
return Numbers;
}
}
来源:https://www.cnblogs.com/youmeng/archive/2012/12/19/2825644.html