1

さて、私はこのランダムな文字列を生成させましたが、最近、致命的な欠陥に気づきました。ランダムな文字列を生成したら、プログラムを閉じて別のランダムな文字列を生成します。これは第1世代と同じです。コードは次のとおりです。

   Public Function RandomString(ByVal length As Integer) As String
    Dim strb As New System.Text.StringBuilder
    Dim chars() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"} 

    Dim UpperBound As Integer = UBound(chars)

    For x As Integer = 1 To length
        strb.Append(chars(Int(Rnd() * UpperBound)))
    Next

    Return strb.ToString

End Function

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
    Try
        System.Diagnostics.Process.Start("Link Removed!")
    Catch
    End Try
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim repeatCnt As Integer

    'Check for valid numeric entry
    If Integer.TryParse(TextBox2.Text, repeatCnt) Then
        For repeatIdx As Integer = 1 To repeatCnt
            Dim rndstring As String
            'Generate random string...
            rndstring = RandomString(24)
            '...and append to text box with a line break
            RichTextBox1.Text &= rndstring & vbCrLf
        Next
    Else
        MessageBox.Show("Please enter a valid integer number in the text box")
    End If
End Sub
4

2 に答える 2

1

問題は、 Randomクラスを使用する代わりにRnd()を実行していることです。

Rnd()毎回同じ「乱数」のシーケンスを与えないようにするには、 Random.Next()を呼び出す必要があります(初期値/シードにマシンクロックを使用するため)。

だからあなたの場合:

Dim random As New System.Random()
Public Function RandomString(ByVal length As Integer) As String
   Dim strb As New System.Text.StringBuilder
   Dim chars() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"} 

   Dim UpperBound As Integer = UBound(chars)

   For x As Integer = 1 To length
      strb.Append(chars(Int(random.Next(UpperBound)))
   Next

   Return strb.ToString

End Function     
于 2013-02-03T13:58:27.237 に答える
0

次のようなランダムな文字列を生成してみてください。

Public Shared Function GeneratePass() As String

    Dim unique As Guid = Guid.NewGuid
    Return unique.ToString.Substring(1, 6)

End Function
于 2013-02-03T22:35:26.507 に答える