0

5 秒まで一定の 6 桁の数字を生成するロジックを取得しました。これがコードです。問題は、以下のルーチンが順番に番号を生成することです。これは、次の番号が何であるかをユーザーが推測できないように動的にしたいのではなく、望んでいません。

public static int GetTimestamp()
{
    // 10m ticks in a second, so 50m in 5 seconds
    const int ticksIn5Seconds = 50000000;
    return (int)((DateTime.Now.Ticks / ticksIn5Seconds) % 1000000);
}

ここでは、C# で一意の 8 桁の番号を生成する別のコードを示します。

public string Get8Digits()
 {
   var bytes = new byte[4];
   var rng = RandomNumberGenerator.Create();
   rng.GetBytes(bytes);
   uint random = BitConverter.ToUInt32(bytes, 0) % 100000000;
   return String.Format("{0:D8}", random);
 }

両方のロジックを組み合わせて、次の 6 桁の数字が生成されると推測できないランダムな 6 桁の数字を生成しようとしています。目標を達成するために何をすべきかのガイダンスを探しています。ありがとう。

4

4 に答える 4

4

独自の方法に基づく1つの可能な解決策Get8Digits...

    private static DateTime _expiry = DateTime.MinValue;
    private static string _current = "0";

    public string CurrentNumber()
    {
        if (_expiry < DateTime.Now)
        {
            _expiry = DateTime.Now.AddSeconds(5);
            _current = Get8Digits();
        }

        return _current;
    }
于 2013-04-08T14:35:56.937 に答える
0
private static Stopwatch age; // init me
private static int lastRandom = 0;
public static int GetTimestamp()
{
  if (age.Elapsed.TotalSeconds>5 ||lastRandom==0){
     lastRandom = Guid.NewGuid().GetHash(); // stronger random than Random
     age.Reset();
  }
  return lastRandom % 100000; // limit the digits to 6, assuming leading 0s
}
于 2013-04-08T14:30:27.553 に答える
0

疑似乱数発生器に 5 秒を法とする時間 (実際には時間 - 時間 % 5s) をシードすることができます。それは機能しますが、予測不可能な数値を取得するための最良の方法ではありません。

コードで編集:

Random random = new Random(DateTime.Now.Ticks - (DateTime.Now.Ticks % 50000000));

より多くのコードを含む Edit2 :

int random5 = random.Next(100000, 999999)
于 2013-04-08T14:26:36.043 に答える
-1

あなたの質問は、5 秒ごとに異なる乱数を生成する乱数ジェネレーターを生成したいということだと理解しています。

public int GetRandomValue() 
{
    // Seed the RNG with an integer that changes every 5 seconds.
    Random rnd = new Random((int)(DateTime.Now.Ticks / ticksIn5Seconds));
    // Generate a 6 digit random number.
    return rnd.Next(100000, 999999); 
}
于 2013-04-08T14:28:15.020 に答える