バイト型の配列の乱数を取得

解決


NANAC  2007-08-30 19:04:42  No: 143856

投稿は初めてですがよろしくお願いします。

現在、WinXP ProとVB2005で開発しています。
バイト型の配列を乱数で作っ後に変換して
英大文字・小文字・数字のパスワードを
作ろうとしています。

        For i As Integer = 0 To iLength - 1
            
            Dim IntB As Integer = New System.Random().Next(15)

            Select Case IntB
                Case 0, 3, 6, 9, 12
                    bBytes(i) = CType(hRandom.Next(1, 26) + 64, Byte) '大文字
                    Form1.Label1.Text += "," & IntB
                Case 1, 4, 7, 10, 13
                    bBytes(i) = CType(hRandom.Next(1, 26) + 96, Byte) '小文字
                    Form1.Label1.Text += "," & IntB
                Case 2, 5, 8, 11, 14
                    bBytes(i) = CType(hRandom.Next(1, 10) + 47, Byte) '数字
                    Form1.Label1.Text += "," & IntB
            End Select
        Next i

上記のようなコードを書いたのですが、実行するとIntBの値が
全部,10,10,10,10,10になったり
,8,8,8,8,8,8,11,11,11,11,11,11,11,14,14
のように一つのCaseの数が連続して表示されます。

デバッグで動きを確かめようと思ったのですが、デバッグでは正常にループが作用して同じ数字が何でも連続で出現するする事がなく、原因が解明できませんでした。

何が悪いのか、アドバイスお願いします。


NANAC  2007-08-30 19:10:10  No: 143857

ちょっと抜けてました
        Dim hRandom As New System.Random()

        Dim bBytes(iLength - 1) As Byte

iLengthは表示させたい桁数です。


もげ  2007-08-30 19:22:09  No: 143858

シード値省略なら現在時刻からシードをとるので、
頻繁に初期化してれば(時刻が変わらなければ)毎回同じ値を返すでしょう。

>Dim IntB As Integer = New System.Random().Next(15)

をループの外に出して、ループ内で.Nextでどうでしょう。


NANAC  2007-08-30 19:32:40  No: 143859

ループの外でNewしてから、ループの中で.Next
で期待の動きが出来ました。

シード値という言葉を初めて聞いたので
これから調べたいと思います。

もげさん、ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加