Vb.net 函数生成随机8个字符的密码

Vb.net 函数生成随机8个字符的密码,vb.net,Vb.net,我在vb中有一个函数,它以前似乎是用来生成一个8个字符的密码,但现在为每个注册到网站的用户生成相同的密码。我不确定哪里出了问题,因为我没有摆弄这段代码(代码不是我写的)?任何帮助都将不胜感激 function generatePassword() Dim i, newPassword newPassword = "" For i = 1 to 3 newPassword = newPassword & Mid("ABCDEFGHJKLMNPQRSTUVWXYZ",ra

我在vb中有一个函数,它以前似乎是用来生成一个8个字符的密码,但现在为每个注册到网站的用户生成相同的密码。我不确定哪里出了问题,因为我没有摆弄这段代码(代码不是我写的)?任何帮助都将不胜感激

function generatePassword()
  Dim i, newPassword
  newPassword = ""
  For i = 1 to 3
    newPassword = newPassword & Mid("ABCDEFGHJKLMNPQRSTUVWXYZ",randomInRange(1,24),1)
  Next
  For i = 4 to 7
    newPassword = newPassword & Mid("23456789",randomInRange(1,8),1)
  Next
  'For i = 1 to 8
  '  newPassword = newPassword & Mid("ABCDEFGHJKLMNPQRSTUVWXYZ23456789",randomInRange(1,32),1)
  'Next
  generatePassword = newPassword
end function

function randomInRange(lo,hi)
  randomInRange =(Int((hi - lo + 1) * rnd + lo))
end function

Dim newPassword = generatePassword()

            Dim strSql As String = "INSERT INTO Student(" & _
                             "StudentNo," & _
                             "Surname," & _
                             "FirstName," & _
                             "MiddleName," & _
                             "Gender," & _
                             "Pathway," & _
                             "[Level]," & _
                             "QubEmail," & _
                             "[Password]," & _
                             "HomeEmail," & _
                             "MobilePhone," & _
                             "HomeTown," & _
                             "PlacementYear," & _
                             "Status," & _
                             "DateEdited," & _
                             "HomePhone) " & _
                            "VALUES " & _
                            "( " & _
                             "'" & StudentNo.Text.Replace("'", "''") & "'," & _
                             "'" & Surname.Text.Replace("'", "''") & "'," & _
                             "'" & Forename.Text.Replace("'", "''") & "'," & _
                             "'" & MiddleName.Text.Replace("'", "''") & "'," & _
                            "'" & ddlGender.SelectedValue & "'," & _
                            "'" & ddlPathway.SelectedValue & "'," & _
                            "'" & ddlLevel.SelectedValue & "'," & _
                            "'" & QUBEmail.Text.Replace("'", "''") & "'," & _
                            "'" & newPassword & "'," & _
                             "'" & HomeEmail.Text.Replace("'", "''") & "'," & _
                            "'" & MobileNo.Text.Replace("'", "''") & "'," & _
                            "'" & HomeTown.Text.Replace("'", "''") & "'," & _
                            "" & PlacementYear & "," & _
                            "'Seeking Placement'," & _
                            " GETDATE() ," & _
                             "'" & HomeNo.Text.Replace("'", "''") & "' " & _
                            ")"


            Dim addStudent As OleDbDataReader = Database.DoSQLReturnDataReader(strSql)
            addStudent.Close()

如果你自己不是程序员,你可能应该和写代码的人谈谈。然而,
Rnd
实际上并不是随机的,它只是一个使用种子计算其值的模拟数学方程

此种子设置为程序运行的时间。在没有任何参与的情况下,种子将保持不变,这意味着所有随机数实际上都是相同的值;在每个
生成密码()时使用


似乎没有任何代码正在更新
rnd
变量。这需要在每次调用
randomInRange
时更新,以获得不同的密码

我建议您完全更改
randomInRange
,使其运行更干净

这是您需要做的:

Private rnd As Random = new Random()
Function randomInRange(lo As Integer, hi As Integer) As Integer
    Return rnd.Next(lo, hi + 1)
End Function

进行此更改会生成随机密码。

调用
Randomize()
random
类无关。它们是两个完全不相关的代码。@Enigmativity我想到的是
Rnd()
函数。我的错。@Enigmativity因为OP提供的代码最初包含Rnd()函数,而不是Random类,所以我看不出您的反对票或批评是怎么回事。你应该考虑UnDopCube这个答案,因为随机化确实与RND函数相关。尽管如此,我仍然认为随机类是一种更好的方法。@PaulIshak-OP在问题中没有
Rnd()
,然而这个答案有
Random
,这只是让人们永远误解
Randomize()
Random
有某种联系。我理解你的观点,但现在已经过了两个小时改变我的反对票的时间限制,所以我不能,除非这个答案被编辑。
Private rnd As Random = new Random()
Function randomInRange(lo As Integer, hi As Integer) As Integer
    Return rnd.Next(lo, hi + 1)
End Function