asp产生随机数

<% 
Function gen_key(digits) 

'Create and define array 
dim char_array(50) 
char_array(0) = "0" 
char_array(1) = "1" 
char_array(2) = "2" 
char_array(3) = "3" 
char_array(4) = "4" 
char_array(5) = "5" 
char_array(6) = "6" 
char_array(7) = "7" 
char_array(8) = "8" 
char_array(9) = "9" 
char_array(10) = "A" 
char_array(11) = "B" 
char_array(12) = "C" 
char_array(13) = "D" 
char_array(14) = "E" 
char_array(15) = "F" 
char_array(16) = "G" 
char_array(17) = "H" 
char_array(18) = "I" 
char_array(19) = "J" 
char_array(20) = "K" 
char_array(21) = "L" 
char_array(22) = "M" 
char_array(23) = "N" 
char_array(24) = "O" 
char_array(25) = "P" 
char_array(26) = "Q" 
char_array(27) = "R" 
char_array(28) = "S" 
char_array(29) = "T" 
char_array(30) = "U" 
char_array(31) = "V" 
char_array(32) = "W" 
char_array(33) = "X" 
char_array(34) = "Y" 
char_array(35) = "Z" 

'Initiate randomize method for default seeding 
randomize 

'Loop through and create the output based on the the variable passed to 
'the function for the length of the key. 
do while len(output) < digits 
num = char_array(Int((35 - 0 + 1) * Rnd + 0)) 
output = output + num 
loop 

'Set return 
gen_key = output 
End Function 

'Write the results to the browser, currently setting a 13 digit key 
response.write "<pre>" & gen_key(13) & "</pre>" & vbcrlf 
%>


******************************************************************

典型情况下,你更感兴趣的是用这个函数来返回处在一定范围内的整数。要返回一个大于等于0而小于某个特定整数的数字,你可以使用如下的语句:

<%=INT((upperbound+1)*RND)%>

用你想产生的最大随机数代替表达式upperbound。例如,下面的脚本返回一个0和5之间的数,包括0和5:

<%=INT(5+1)*RND)%>

如果你想产生一个处在某个范围内的随机数,该范围有一个大于0的下界,可以使用如下的脚本:

<%=INT((upperbound – lowerbound + 1)*RND+lowerbound)%>

例如,下面的脚本产生一个50到75之间的随机数(包括50和75):

<%=INT((75-50+1)*RND+50)%>

无论何时使用函数RND(),它将以同样的顺序返回同样的随机数,这也许另你吃惊。考虑如下的例子:

<%

Pick_Greeting=INT((2+1)*RND)

SELECT CASE Pick_Greeting

CASE 0

Greeting=”Welcome!”

CASE 1

Greeting=”Hello!”

CASE 2

Greeting=”Happy to see you!”

END SELECT

%>

<%=Greeting%>

这个脚本建立并打印一个随机的问候语。但是,它有可能并不按你想象的方式工作。无论何时有人下载了包含这段脚本的网页,将有同样的随机问候语被打印。如果有人多次回到这个网页,他或她将得到同样的问候。一个随机数产生了,但是每次都是同样的随机数。

有一个特殊的语句可以帮助解决这个问题。RANDOMIZE语句用来强制函数RND()使用一个新的随机数序列。RANDOMIZE语句通过计算机的系统计时器,为函数RND()提供一个新的种子值。下面的例子显示了如何修改上面的例子,使其正确工作:

<%

RANDOMIZE

Pick_Greeting=INT((2+1)*RND)

SELECT CASE Pick_Greeting

CASE 0

Greeting=”Welcome!”

CASE 1

Greeting=”Hello!”

CASE 2

Greeting=”Happy to see you!”

END SELECT

%>

<%=Greeting%>

这个脚本可以正确工作。每次执行这个脚本时,将会产生一个新的随机问候。RANDOMIZE语句强制函数RND()使用新的随机数序列。

最后,如果你对函数RND()所产生的数值的分布感到好奇,你可以用下面的脚本来确定它:

<%

CONST upperbound=9,iterations=100

REDIM DIST(upperbound)

RANDOMIZE

FOR i=1 to iterations

rnd_num=INT((upperbound+1)*RND)

DIST(rnd_num)=DIST(rnd_num)&”#”

NEXT

FOR i=0 to upperbound

%>

<%=i&” : “&DIST(i)%><BR>

<%

NEXT

%>

这段脚本在0到9之间产生100个随机数。它跟踪对于每一个值有多少个随机数产生。最后,它打印一个代表结果的条形图。 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值