2016-11-06 19 views
0

我想獲得一個隨機數,但它有一定數量的數字,我不能減少。我怎樣才能用這種安全的方法獲得只有2位數的隨機數?如何使用RNGCryptoServiceProvider類創建2位隨機數?

{ Console.WriteLine("{0}",GetRandom());Console.ReadLine(); 

    } 
    private static int GetRandom() 
    { 

     RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 
     { 
      byte[] randomNumber = new byte[4]; 
      rng.GetBytes(randomNumber); 
      int value = BitConverter.ToInt32(randomNumber,0); 
      return value; 
+0

你是指兩位數十進制數(0-99)還是兩位數十六進制數(0-255)? – jdweng

+0

這很危險,由於分配不均,你不能使用明顯的%運算符。取7位rng(&0x7f)。如果它小於100那麼它的好,如果不是,那麼重複。 –

+0

兩位十進制我的意思是 – Ryepower

回答

0

使用稱爲modulo operator的百分比。這是不確定的產生一系列的PRNG與RNGCryptoServiceProvider,但它有一個較小的偏見,然後System.Random
您的代碼應該是這樣的:

private static int GetRandom(int min, max) { 
using(System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider()) 
     { 
      byte[] randomNumber = new byte[4]; 
      rng.GetBytes(randomNumber); 
      int value = BitConverter.ToInt32(randomNumber,0); 
      return Math.Abs(value%max+min); 
     } 
} 

我用Math.Abs所以你將只能得到正數,但可以將其刪除。

+0

謝謝,它運作良好!:) – Ryepower