取指定范围和个数的随机数,无重复,结果为一字符串,用split函数即可取得各值
指定5个参数:
iLessCount----取最少n个数(Integer)
iMostCount----取最多n个数(Integer)
iLessNumber----取数最小范围(Integer)
iMostNumber----取数最大范围(Integer)
cutZero----是否要剔除无效零(Boolean)[例:true-->3,false-->003]
测试:
Response.Write rndNumber(1,3,5,15,false)
Function rndNumber(iLessCount,iMostCount,iLessNumber,iMostNumber,cutZero)
If iLessCount = 0 OR iMostCount < iLessCount OR NOT _
isnumeric(iLessCount) OR NOT isnumeric(iMostCount) OR NOT _
isnumeric(iLessNumber) OR NOT isnumeric(iMostNumber) _
OR (iLessNumber = iMostNumber) Then Exit Function
'最少个数零、最大个数小于最小个数、4个参数不为数字、最小数等于最大数就退出函数
Randomize
Dim iRnd,sZero
Dim sOutput
Dim iLength
Dim sTempOutput
Dim i
Dim iCount
iCount = int(rnd*(iMostCount-iLessCount+1))+iLessCount'计算随机取几个数
iLength = len(iMostNumber)*iCount+(iCount*2)
'长度为最大数长度乘以随机个数加上随机个数乘以2(前后各一逗号,以全字匹配)
Do While len(sOutput) < iLength'输出小于长度时循环
iRnd = int(rnd*(iMostNumber-iLessNumber+1))+iLessNumber'取随机数
If Len(iRnd) < len(iMostNumber) Then'随机数长度小于取最大数长度
For i = 1 To len(iMostNumber) - len(iRnd)'那么就要在首位加缺少的零
sZero = sZero & "0"
Next
End If
iRnd = sZero & iRnd'把零加在随机数前面
sZero = empty'清空首位零,循环后还要调用
If Instr(sOutput,","&iRnd&",") < 1 Then'不在输出变量中就放进去0
sOutput = sOutput & "," & iRnd & ","
End If
Loop
sOutput = mid(sOutput,2,len(sOutput)-2)'去掉首尾逗号
sOutput = Replace(sOutput,",,",",")'把双逗号替换成单逗号
If cutZero = true Then'如果要去除首位多余的零
sTempOutput = split(sOutput,",")'拆分为数组
sOutput = empty'清空,后面要重新放入
For i = 0 To Ubound(sTempOutput)'逐个转换成数值后放入
sOutput = sOutput & Clng(sTempOutput(i)) & ","
Next
sOutput = mid(sOutput,1,len(sOutput)-1)'去掉末尾逗号
End If
rndNumber = sOutput'输出
End Function
本文作者:80 来源:http://www.waasai.com/blog/f/80/