ASP如何随机产生不重复的编号

如何随机产生不重复的编号[问题点数:50分]
kingsjava

我有一个字段用于保存用户的编号,
当新的用户注册时,系统就自动产生一个编号插入到表中字段,并且保证每个用户在注册时所得到的编号不会与已经存在的编号重复,请求帮忙谢谢各位.
希望给出代码. 

 
jiaxueq

 #1楼 得分:0回复于:2007-09-25 07:12:41用数据库“自动编号”就行了,那不会重复了。 
 
 
welsham
(余文成)

等 级:

 #3楼 得分:0回复于:2007-09-25 08:28:36自动编号,对于用户编号不是很适用;用户编号一般具有一定规则,而且还有取段问题。
我用过这种形式:
Public   Function   getUtorID(IDType)
sqlstr= "Select   Top   1   UtorID   From   Uto_Utor "
If   IDType= "0 "   then
sqlstr=sqlstr& "   Where   stream= '0 ' "
else
sqlstr=sqlstr& "   Where   stream <> '0 ' "
End   if
sqlstr=sqlstr& "   Order   By   UtorID   DESC "
rs.Open   sqlstr,conn
If   Not   rs.EOF   then
getUtorID=rs(0)+1
else
If   IDType= "0 "   then
getUtorID=100000
else
getUtorID=1000000000
End   if
End   if
rs.Close
End   Function

因为在系统中,用户编号分成两段使用。
借助这种查询方法,可以形成类似 自行编号 的模式。 
 
 
yxhzj
(余华[学习J2EE中])

等 级:

 #5楼 得分:0回复于:2007-09-25 09:47:19这个编码一般都有一定的生成规则
最好的办法是取当前的时间到秒+随机来做,尽可能的确保不重复,
还有,在插入的时候,也最好做个判断,是否已经存在, 
 
 
ruihuocom

 #6楼 得分:0回复于:2007-09-25 12:11:13如果是ACCESS数据库,把编号设置为“自动编号”类型,插入数据的时候可以不管他,
如果是SQL数据库,编号字段标识设为“是”,标识种子=1,标识递增量=1

如果想自己控制编号的话,用下面的随机数产生函数产生一个就可以了。
function   Makerondam()
    Randomize
    Do   While   Len(rndnum) <4
    num1=CStr(Chr((57-48)*rnd+48))
    rndnum=rndnum&num1
    loop
    Makerondam=replace(now(), "- ", " "), "   ", " "), ": ", " ")&rndnum
end   function 
 

ruihuocom


等 级:

 #7楼 得分:0回复于:2007-09-25 12:12:23修正下,上面的Makerondam=replace(now(), "- ", " "), "   ", " "), ": ", " ")&rndnum改为
Makerondam=replace(replace(replace(now(), "- ", " "), "   ", " "), ": ", " ")&rndnum 
 
 
craft001wen


等 级:

 #8楼 得分:0回复于:2007-09-25 14:36:22呵呵,其实用一字段保存sessionId最简单 
 
 
 
aspgreener
(水若寒)

等 级:

 #9楼 得分:0回复于:2007-09-27 22:41:52'*******************************************************
'获取随机字符串   调用为getRndPwd(8),intLength为字符串长度
'*******************************************************
Function   getRndPwd(intLength)
Dim   Str

Do   While   Len(Str)   <   CInt(intLength)
Str   =   Str   &   getRndStr(Str,intLength)
Loop

getRndPwd   =   Str
End   Function
'**********************************
'生成与指定字符串不重复的字符串
'**********************************
Function   getRndStr(Str,intLength)
CONST   STRSOURCE   =   "03bcdw+fe45aghijk6789lmnopxyzqrstu12v-@# "
Dim   i,tmp

If   Len(STRSOURCE)   <   intLength   Then   Exit   Function

Randomize
tmp   =   " "
i   =   Int(Rnd()*Len(STRSOURCE)+1)
tmp   =   Mid(STRSOURCE,i,1)

If   Instr(Str,tmp)   >   0   Then
Call   getRndStr(Str,intLength)
Exit   Function
End   If  

getRndStr   =   tmp
End   Function

'-----生成不重复的随机8位字符串
Call   getRndPwd(8)

不过如果要在数据库中生成不重复的,还得查询数据库,看数据库中是否已经存在这样的字符串,如果存在则还得继续生成。 
 
 
mailto520
等 级:

 #10楼 得分:0回复于:2007-09-28 08:27:54Dim   rss,ord_id,len_id,zero,a
Set   rss=Conn.Execute( "Select   lead_id   From   [plant_ling]   Order   By   ID   Desc ")
ord_id   =   rss(0)
ord_id   =   Clng(ord_id)+1
len_id   =   Len(ord_id)
If   len_id <5   Then  
      For   a=1   To   (5-len_id)
            zero   =   zero   &   "0 "
      Next
ord_id   =   zero   &   ord_id
End   if
rss.Close
Set   rss=Nothing 
 
 

RedChimae
(红色狂想)

等 级:

 #11楼 得分:0回复于:2007-09-28 08:45:25我的思路是,先产生随机数,接着进行数据库表查询,若没有匹配结果,则证明此随机数不重复可以使用。这样虽然耗时,但却能保证100%不出错 
 
等 级:

 #15楼 得分:0回复于:2008-05-15 16:47:59WW,,看着改吧
  MakeNumberID = makerndid(10)
  Do While IsqrRanid(MakeNumberID)
  MakeNumberID = makerndid(10)
  Loop 
 
 
lyiply

等 级:

 #16楼 得分:0回复于:2008-05-15 16:58:37function makerndid(byVal maxLen)
Dim strNewPass
Dim whatsNext, upper, lower, intCounter
RANdomize
For intCounter =1 To maxLen
whatsNext = int(2 * Rnd)
If whatsNext = 0 Then
upper = 80 
lower = 70
Else
upper = 48 
lower = 39
End If
strNewPass = strNewPass & Chr(Int((upper - lower + 1) * Rnd + upper))
Next
makerndid = strNewPass
End function

有话要说