Vb.net 函数生成随机8个字符的密码
我在vb中有一个函数,它以前似乎是用来生成一个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
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