随机数生成每次都会生成相同的数字

时间:2020-03-25 15:45:28

标签: vb.net

我的程序生成一个长度为25个字符的随机字符串。为此,我制作了一个包含字符的List(Of String)并生成一个随机字符,我正在使用randomNumber = Int((60 * Rnd() * Rnd())),这给最终字符串中的每个条目(但每次最终字符串)都赋予了一个不同的字符是一样的我怎么做,所以它并不总是一样?

Public Class Form1
Dim charlist As New List(Of String)
Dim i As Integer
Dim length As Integer
Dim randomNumber As Integer
Dim code1 As String
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    i = 1
    length = 25
    charlist.Add("a")
    charlist.Add("b")
    charlist.Add("c")
    charlist.Add("d")
    charlist.Add("e")
    charlist.Add("f")
    charlist.Add("g")
    charlist.Add("h")
    charlist.Add("i")
    charlist.Add("j")
    charlist.Add("k")
    charlist.Add("l")
    charlist.Add("m")
    charlist.Add("n")
    charlist.Add("o")
    charlist.Add("p")
    charlist.Add("q")
    charlist.Add("r")
    charlist.Add("s")
    charlist.Add("t")
    charlist.Add("u")
    charlist.Add("v")
    charlist.Add("w")
    charlist.Add("x")
    charlist.Add("y")
    charlist.Add("A")
    charlist.Add("B")
    charlist.Add("C")
    charlist.Add("D")
    charlist.Add("E")
    charlist.Add("F")
    charlist.Add("G")
    charlist.Add("H")
    charlist.Add("I")
    charlist.Add("J")
    charlist.Add("K")
    charlist.Add("L")
    charlist.Add("M")
    charlist.Add("N")
    charlist.Add("O")
    charlist.Add("P")
    charlist.Add("Q")
    charlist.Add("R")
    charlist.Add("S")
    charlist.Add("T")
    charlist.Add("U")
    charlist.Add("V")
    charlist.Add("W")
    charlist.Add("X")
    charlist.Add("Y")
    charlist.Add("Z")
    charlist.Add("0")
    charlist.Add("1")
    charlist.Add("2")
    charlist.Add("3")
    charlist.Add("4")
    charlist.Add("5")
    charlist.Add("6")
    charlist.Add("7")
    charlist.Add("8")
    charlist.Add("9")
    While i < length
        randomNumber = Int((60 * Rnd() * Rnd()))
        code1 = code1 + charlist(randomNumber)
        i = i + 1
    End While
    txtGenerate.Text = code1
End Sub

2 个答案:

答案 0 :(得分:0)

您需要先致电Randomize(),然后再致电Rnd()

代码示例:

Randomize()
While i < length
    randomNumber = Int((60 * Rnd() * Rnd()))
    code1 = code1 + charlist(randomNumber)
    i = i + 1
End While

从MSDN:Rnd function

在调用Rnd之前,使用不带参数的Randomize语句使用基于系统计时器的种子初始化随机数生成器。

答案 1 :(得分:0)

这是一个稍微整洁的版本:

Public Module RandomUtils

    Private random As New Random

    Public Function RandomString(length as Integer, Optional chars as String =  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") as String

      Return New string(Enumerable.Repeat(1, length).Select(Function(i) chars(random.Next(chars.Length))).ToArray())

    End Function

End Module

在您的表单中像这样使用它:

Dim r as String = RandomUtils.RandomString(25)

如果要更改使用的字符,请为可选参数提供一个字符串:

Dim r as String = RandomUtils.RandomString(25, "abc") 'random 25 char string using only a, b or c

请注意,如果用户看到此字符串,这很可能会产生诅咒字