为什么我的 "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
.
的所有调用可能会极大地帮助您
我有以下代码,我从中为我的数据库提取了 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 theRnd
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
.