2013-02-03 17 views
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 

回答

1

你的問題是,你正在運行賽第一輪()而不是使用Random類。

爲了保持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  
+0

謝謝你,但現在當我要生成它生成相同的字符串10次10​​個隨機字符串。例如,如果我生成HFJDSHDSDFSDSSDF它會顯示10次。 – haws1290

+0

將隨機變量的創建移動到函數的外部,如我在演示中更新的 – Blachshma

+0

謝謝您的全力幫助。 – haws1290

0

嘗試生成一個隨機字符串這樣的:

Public Shared Function GeneratePass() As String 

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

End Function 
+0

此方法只能產生數字0-9和字母a-f,這不是OP想要的。 –

+0

是的,只是一個想法,我認爲*可能*有用。 – Sparers

相關問題