VBScript генерирует такое же случайное число, когда в цикле - как решить? - PullRequest
2 голосов
/ 13 марта 2011

Итак, у меня есть эта функция, которая генерирует случайную строку из цифр длиной 8 символов. Он работает, если его вызывать один раз на страницу, т.е. если я обновлю его, он покажет новый номер.

Но я хочу сгенерировать многие из них внутри цикла, и он возвращает одно и то же число. Как я могу решить это?

Function generateCode()

   pChar = "0123456789"

   pCount = Len(pChar) 

   Dim psw
   psw = ""

   Randomize
   For i = 1 To 8 ' password length
      psw = psw & Mid( pChar, 1 + Int(Rnd * pCount), 1 )
   Next

 generateCode= psw
End Function

Теперь я подумал, что Randomize может основываться на текущем времени, поэтому я взял строку Randomize и вызвал Randomize до того, как цикл, который вызывает generateCode (), все еще не работал!

1 Ответ

11 голосов
/ 13 марта 2011

Randomize без каких-либо аргументов запускает генератор псевдослучайных чисел, используя системное время. Если вы вызываете его несколько раз очень быстро, системное время не изменится, поэтому вы каждый раз будете повторно инициализировать PRNG с одним и тем же начальным числом, давая одинаковые случайные числа.

Вы должны вызывать Randomize только один раз на своей странице, а не несколько раз.

...