2016-11-06 56 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

2桁の小数点(0 - 99)または2桁の16進数(0 - 255)を意味しますか? – jdweng

+0

これは危険です。不等分散のために明白な%演算子を使用することはできません。 7ビットのrng(&0x7f)を取ります。それが100未満の場合は、その良い、しない場合は、繰り返します。 –

+0

小数点以下2桁 – Ryepower

答えて

0

modulo operatorとして知られている%を使用してください。それはRNGCryptoServiceProviderでPRNGの範囲を生成するのは非凡ですが、バイアスが小さく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

関連する問題