ASP產生不重複隨機數位另類思路

來源:互聯網
上載者:User

前兩天看到有人要編個考試系統,當時只是簡單回了下用隨機函數RND

  實際一般需要從資料庫中隨機提取N道題目。

  以下代碼都基於VBS;

  通常的編寫類似這樣的

'產生不重複隨機數
function rndarray(istart,iend,sum)
dim arrayid(),i,j,blnre,temp,iloop,eloop
redim arrayid(sum-1)
i=0
iloop=0
eloop=0
blnre=false
randomize
do while i<sum
temp=int(rnd*(iend-istart+1)+istart)
if i=0 then
arrayid(0)=temp
i=i+1
iloop=iloop+1
else

for j=0 to i-1
if arrayid(j)=temp then
blnre=true
iloop=iloop+1
exit for'這一句很重要,防止多餘的迴圈
else
iloop=iloop+1
end if
next

if blnre=false then
arrayid(i)=temp
i=i+1
else
blnre=false
end if

end if
eloop=eloop+iloop
iloop=0
loop
rndarray=join(arrayid)&"迴圈次數:"&eloop
end function

response.write rndarray(1,10,5)&"<br>"'調用過程

  PS。其中的iloop、eloop是為了計算迴圈次數而已。

  以上,大多數人的都是用這種方法編寫的,產生一個隨機數,然後再和以前產生的做比較,判斷是否可用;

  但這不是一種AI的,或者說有效率的方法,為什麼不用兩個數組呢?

  數組1,存放需要的字串,或數字等,數組2存放產生的隨機數;當每次隨機產生中間變數temp的一個下標x,賦給數組2,然後從數組1中,去掉下標為x的數字,賦給中間變數temp;這樣每產生一個隨機數,就從數組1中拿掉這個數,下次再產生一個數就不會重複了,這種產生隨機數的方法原理實際是從數組1中提取。

  方法二

function rndstr(istart,iend,isum)
dim i,j,vntarray()
redim vntarray(iend-istart)
j=istart
for i=0 to iend-istart
vntarray(i)=j
j=j+1
next

dim vntarray2(),temp,x,y
redim vntarray2(isum-1)
y=iend-istart+1
x=0
temp=vntarray
do while x<isum
dim a
randomize
vntarray2(x)=temp(int(rnd*y))
a=" "&vntarray2(x)&" "
temp=split(trim(replace(chr(32)&join(temp)&chr(32),a," ")))
x=x+1
y=y-1
loop
rndstr=join(vntarray2)
end function

response.write rndstr(1,5,2)

  這樣,是不是更簡單呢

  展開一下,假如要產生隨機字串,包含字母數字時,僅需為數組1賦值時,用函數chr(num);

  假設,需要做一個手機中獎的頁面程式。

  首先把值賦給數組1,可以130....~139....迴圈賦值,當然實際使用時從資料庫中把已有的賦值,然後再隨機提取賦給數組2;

  最後,再修飾一下

temp=replace(join(array2),chr(32),"")
phone=left(temp,6)&"***"&right(temp,2)

  得到類似137648***58的結果,呵呵

  寫那麼多,累死了~~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.