用于生成8个字符长的随机单词列表的函数

时间:2015-02-22 17:34:33

标签: asp-classic

我正在使用经典ASP,并且拥有一个包含6,318个随机单词的MySQL表(“j_un2”),总计数永远不会改变。表中的ID是无间隙的。

我需要生成一个由2个单词组成的5个随机连接字符串的列表,其中字符串的总长度为8个字符。

几天前我已经通过以下方式获得了一些非常有用的帮助: Selecting random words from table Optimising SQL to concatenate random words

根据我收到的帮助,我写了这个简单的函数来生成8个字符的随机单词组合:

<%
Function f1(str)
    found = "no"
    do while found <> "yes"
        rand1 = Int((Rnd * 6138) + 1)
        rand2 = Int((Rnd * 6138) + 1)
        SQL = "SELECT CONCAT(w1.fld_un, w2.fld_un) word FROM j_un2 w1 , j_un2 w2 WHERE w1.fld_id = "&rand1&" AND w2.fld_id = "&rand2&""
        set pRS = oConn.Execute(SQL)
        word = pRS("word")
        if len(word) = str then 
            found = "yes"
            f1 = word
        end if
    Loop
End Function

for i = 1 to 5
    bob = f1(8)
    response.write bob & "<br />"
next
%>

它运行得非常快,运行时间不到1秒,非常棒。

但是,它生成的单词总是以相同的顺序 - 例如

digpills
grincost
grownjaw
jonesbin
cloudme

如果我刷新页面,它会以相同的顺序生成单词。我知道表中有数百个单词组合成八个字符长的字符串,所以数据库中的单词不够。

如果我这样做的话这样:

for i = 1 to 5
    bob = f1(8)
    response.write bob & "<br />"
next

for i = 1 to 5
    bob = f1(8)
    response.write bob & "<br />"
next

for i = 1 to 5
    bob = f1(8)
    response.write bob & "<br />"
next

for i = 1 to 5
    bob = f1(8)
    response.write bob & "<br />"
next

然后它将生成20个随机8个字符的长组合,但同样,这20个组合总是处于相同的顺序。

我不是一个非常聪明的程序员 - 我错过了一些东西,因为每次刷新页面时我都无法弄清楚如何获得完全随机的列表。

1 个答案:

答案 0 :(得分:2)

您需要使用“随机化”来每次为您的ID获取不同的数字。

Dim max,min
max=100
min=1
Randomize
response.write(Int((max-min+1)*Rnd+min))

有关它的更多信息here