2015-04-28 3 views
1

У меня есть эта функция в vb, которая, казалось, работала до создания пароля с 8 символами, но теперь генерирует тот же пароль для каждого пользователя, который регистрируется на веб-сайте. Я не уверен, где я ошибся, поскольку я не искал этот кусок кода (код не был написан мной)? Любая помощь будет оценена по достоинству.Функция генерации случайных символов 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() 

ответ

1

Там, кажется, не будет какой-либо код, который обновляет переменную 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 

Внесение этого изменения производит случайные пароли.

+1

Отлично, это сработало. Спасибо. – mcclosa

-1

Возможно, вам стоит поговорить с человеком, который написал код, если вы сами не программист. Тем не менее, Rnd действительно не случайный, а только сложное математическое уравнение, использующее семя для вычисления его значения.

Это семя настроено на время выполнения программы. Без какого-либо участия семя останется таким же, что означает, что все рандомы будут фактически одинаковыми; используйте Randomize при каждом generatePassword().

Function generatePassword() 
    Randomize() 

    /.../ 
End Function 
+0

Вызов 'Randomize()' не имеет ничего общего с классом «Random». Это два абсолютно несвязанных бита кода. – Enigmativity

+0

@ Энигматичность Я думал о функции «Rnd()». Виноват. –

+0

@ Энигматичность Поскольку предоставленный в OP код первоначально содержал функцию Rnd(), а не класс Random, я не вижу, как вам требовали голосования или критики. Вы должны подумать об отказе от этого ответа, поскольку Randomize действительно имеет отношение к функции RND. Теперь, сказав это, я все еще думаю, что класс Random - лучший подход. –

Смежные вопросы