如何随机产生不重复的编号[问题点数: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
有话要说