全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1637
推到 Plurk!
推到 Facebook!

请问如何随机产生一个永不重复的6位数的编码?

尚未結案
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-24 09:19:27 IP:218.18.xxx.xxx 未訂閱
如题
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-24 09:28:41 IP:61.155.xxx.xxx 未訂閱
6位?永远不重复?不可能的,迟早会重复的 供参考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22106    风花雪月 e梦情缘
------
风花雪月 e梦情缘
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-24 09:36:31 IP:210.3.xxx.xxx 未訂閱
六位是太少了,如要永不重複,用 GUID 吧 (16 bytes),    function CreateGUID(out Guid: TGUID): HResult;    如果是資料庫的話,直接用它的 auto number 也行 (如有的話 )
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-26 10:37:53 IP:218.18.xxx.xxx 未訂閱
引言: 六位是太少了,如要永不重複,用 GUID 吧 (16 bytes), function CreateGUID(out Guid: TGUID): HResult; 如果是資料庫的話,直接用它的 auto number 也行 (如有的話 ) < face="Verdana, Arial, Helvetica"> 请问guid如何个做法啊?我的6位数是存入资料库的
jerryhung
初階會員


發表:6
回覆:46
積分:30
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-26 15:05:23 IP:202.39.xxx.xxx 未訂閱
引言: 请问guid如何个做法啊?我的6位数是存入资料库的
如果是存入資料庫,能會不會使用資料庫本身的亂數功能比較方便啊? 譬如善用SQL的 rand(seed) 功能或者其他功能
引言: 請問各位先進 在SQL中要如何產生6為數的1000組亂數密碼 包括英文與數字 我曾經試圖用產生亂數的方式 但覺得有些麻煩 請問有更方便的方式嗎 -------------------------------------------------------------------------------- 1 回應者: cloudy 日期: 2002/12/13 下午 03:27:00 我到有個建議 你可以用newid()產生一組16位數的亂碼(譬如:6457A492-9582-4F8A-BD85-1DDA1A016BCC,且全世界都不可能重複) 然後用rand()產生兩個位置,然後用迴圈跑1000次,再用 SUBSTRING ( expression , start , length ) 來選擇6位數的亂碼即可 我是沒試過囉,不過建議你可以試試看(要注意start length要在字串的長度內啊),可用的話也請說一聲囉 2 回應者: Loman 日期: 2002/12/16 上午 09:30:00 非常感激 我不了解您所謂的 〝用rand()產生兩個位置〞 是什麼意思 不過我用以下的程式碼也達到了我要的效果了 -------------------------------------- DECLARE @UniPass uniqueidentifier DECLARE @ChrPass varchar(6) DECLARE @Counter INT set @Counter=0 while (@Counter<1000) BEGIN Insert PassTable (PassField) Values (SUBSTRING(CONVERT(varchar(255), NEWID()),1,6)) SET @Counter = @Counter 1 END -------------------------------------- 3 回應者: cloudy 日期: 2002/12/16 下午 05:17:00 我的意思是 因為即使你用newid,也是產生一個16位元的亂碼 即使機率很小,你只取前面六位元的重複機率還是有的,有可能前面六個剛好一樣,後面不一樣而已(只有全部16位元才完全不可能重複) 所以我說用rand()取一個數字當substring的start, 然後length=6 這樣機率至少小很多了,因為你的start可能是1-10(別超過10哦) 不過如果你沒有那麼在乎重複的亂數的話,那就把我的話當參考就好囉 很高興能幫上你囉! 4 回應者: Loman 日期: 2002/12/16 下午 08:46:00 ㄛ~~~~~~ 我了解您的意思了 我之前也有想過這個問題 不過如果是這樣的話 那我還要將newid()中的 '-' 給去除之後 才能以亂數去取吧 不好意思 因為偷懶所以就沒這樣做了 不過 真地謝謝您的說明 我又多學了一樣
系統時間:2024-05-01 17:38:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!