隨機數在現代社會應用不可謂少,我們可以在每天用到的手機驗證碼,網上博彩,網上鬥地主等等 中看到隨機數的影子 隨機數在現代社會應用不可謂少,我們可以在每天用到的手機驗證碼,網上博彩,網上鬥地主等等 中看到隨機數的影子 7月27日晚9點,學習之餘在如鵬網楊中科視頻中便看到關於隨機數的解釋http://w ...
隨機數在現代社會應用不可謂少,我們可以在每天用到的手機驗證碼,網上博彩,網上鬥地主等等 中看到隨機數的影子
7月27日晚9點,學習之餘在如鵬網楊中科視頻中便看到關於隨機數的解釋http://www.rupeng.com/Courses/Index/13
下麵是自己定義的線性求同法求隨機數
public class MyRandom { private int seed; public MyRandom(int seed) { this.seed = seed; } public int Next() { int n = (seed*29 + 37) % 1000; this.seed = n; return n; } }線性同餘法
因為是線性,這種方法輸入相同種子每次輸出都是一樣的結果
所以我們要給他加入一個可變參數來控制這個隨機數
在客戶端加入系統啟動後經過時間的毫秒數 int tc = Environment.TickCount;
int tc = Environment.TickCount; Console.WriteLine("tickCount=" + tc); //MyRandom mR = new MyRandom(5); MyRandom mR = new MyRandom(tc); for (int i = 0; i < 100; i++) { Console.WriteLine(mR.Next()); } Console.ReadKey();View Code
這種就好了很多,c#內部Random方法也是用的這種方法,
但是現在的網站大多都支持多用戶併發操作。
所以,相同時間多個用戶操作時會獲得相同隨機數,這就增加了網站的不穩定性
這時我們需要考慮用多個值來約束這個隨機數,c#給出的解決方案是
byte[] randomBytes = new byte[3]; RNGCryptoServiceProvider r = new RNGCryptoServiceProvider(); for (int i = 0; i < 100; i++) { r.GetBytes(randomBytes); int rngNum = BitConverter.ToInt16(randomBytes, 0); Console.WriteLine(rngNum); } Console.ReadLine();