.Net 真隨機數


悲催,老是記不住真隨機數怎么寫,次次翻項目筆記,更悲催的是,在外面還翻不了項目筆記。。。。。。

在這里記一份好了,順便分享給不懂的朋友們。

偽隨機數相關的東西都不寫了,神馬測試,數據,截圖,通通省略。好吧,心軟,給一點點。

跑一遍就知道什么是偽隨機數了:

    for (int i = 0; i < 1000; i++)
    {
      Console.WriteLine(new Random().Next(1, 1000));
    }

 

隨便扯兩句:偽隨機數之所以會重復,是因為隨機數方法默認以時間為隨機種子,而在編程里,時間精度終究有限,短時間內多次取出時間,這個時間值就可能重復,

時間(隨機數種子)重復了,隨機數自然也重復。所以我們的解決思路就是提供一個永不重復的隨機數種子。

 

上代碼:

獲取強隨機數種子

        /// <summary>
        /// 描 述:創建加密隨機數生成器 生成強隨機種子
        /// </summary>
        /// <returns></returns>
        static int GetRandomSeed()
        {
            byte[] bytes = new byte[4];
            System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
            rng.GetBytes(bytes);
            return BitConverter.ToInt32(bytes, 0);
        }

使用方法:

int ranNumer = new Random(GetRandomSeed()).Next(numMin, numMax);

 

PS:方法二

剛剛說為什么會重復的時候,我突然想到,以時間為隨機數種子,短時間內我不讓它取那么多次,不就可以避免重復了?

試了一下:

            for (int i = 0; i < 1000; i++)
            {
                Thread.Sleep(1);//強制停止一毫秒
                Console.WriteLine(new Random().Next(1, 1000));
            }

果然不重復了,我果真機智~~  *^_^*

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM