为什么我的 "random key code" 每隔一段时间就会创建一个相同的密钥?

Why does my "random key code" creates a same key every once in a while?

我有以下代码,我从中为我的数据库提取了 randomPW。

我需要这串随机字符,以便将它用作我的数据库中的主键。问题是,当我多次执行此代码时,或者如果我为了一次提取(例如)100 个键而获得一个循环,我会得到很多重复项。

如果我尝试重新加载页面以便一键插入,则会出现同样的问题...每 50-80 次重新加载就会出现一个副本。我的代码有什么问题?

    <%
    Function RandomPW(myLength)
    Const minLength = 6
    Const maxLength = 20

    Dim X, Y, strPW

    If myLength = 0 Then
    Randomize
    myLength = Int((maxLength * Rnd) + minLength)
    End If


    For X = 1 To myLength
    Y = Int((3 * Rnd) + 1) '(1) Numeric, (2) Uppercase, (3)   Lowercase

    Select Case Y
    Case 1
    'Numeric character
    Randomize
    strPW = strPW & CHR(Int((9 * Rnd) + 48))
    Case 2
    'Uppercase character
    Randomize
    strPW = strPW & CHR(Int((25 * Rnd) + 65))
    Case 3
    'Lowercase character
    Randomize
    strPW = strPW & CHR(Int((25 * Rnd) + 97))

    End Select
    Next    
    RandomPW = strPW
    End Function
    %>

我希望我的代码能够提取不会时不时重复的字符串。

I need this string of random characters in order to use it a primary key in my Db.

在这种情况下,我建议使用 Scriptlet.TypeLib :

Function RandomPW(myLength)
    Set TypeLib = CreateObject("Scriptlet.TypeLib")
    If myLength < Len(TypeLib.Guid)
      RandomPW = Left(TypeLib.Guid, myLength)
    Else
      RandomPW = TypeLib.Guid
   End If
End Function

Randomize 不应该被多次使用,除非你想确保你正在创造虚假的、可重复的随机性。根据文档,由 Lankymart 帮助链接(强调我的):

Randomize uses number to initialize the Rnd function's random-number generator, giving it a new seed value. If you omit number, the value returned by the system timer is used as the new seed value.

上面提到的系统定时器是秒;这意味着,短时间内连续调用 Randomize 将确保以下 Rnd 产生相同的值。

删除对 Randomize.

的所有调用可能会极大地帮助您