當前位置:首頁 » 操作系統 » 序列號的生成演算法

序列號的生成演算法

發布時間: 2023-11-02 16:25:11

1. 求序列號生成演算法

隨機序列的演算法
作者:unknown 更新時間:2005-03-17

找到了兩個演算法, 第一個很簡單, 但可惜不是隨機的, 第二個是典型的偽隨機數演算法, 可惜要用到2的幾百萬次方這樣巨大的整數, 真痛苦
要是有UNIX上計算密碼的源代碼就好了

第一種做法:
f(k) = (k*F(N-1)) mod F(N)
其中,
k是一個序列號, 就是要取的那個數的順序號
F(N)是這樣一個序列 F(0) = 0, F(1) = 1, F(N+2) = F(N+1)+F(N) (for N>=0)

第二種做法

V = ( ( V * 2 ) + B .xor. B ... )(Mod 2^n)
N+1 N 0 2
V是要取的隨機數, B是個種子, n是隨機數的最大個數

原來這個問題, 很高難, 不少數學高手都為解決這個問題寫了論文, 咳咳, 偶真是個白痴

呵呵, 效果肯定是不錯啦, 因為用不到很大的表.
至於應用是這樣的, 比如, 你要給每個用戶在注冊的時候一個ID但有不希望用戶在看到自己的ID的時候能知道其他用戶的ID, 如果用SEQUENCE來生成ID的話, 一個用戶只要把自己的ID減1就能得到其它用戶的ID了. 所以要用隨機數來做ID, 這樣用戶很難猜到其他用戶的ID了.

當然主要的問題是, 隨機數可能重復. 因此希望使用一個隨機數做種子用它來確定一組"無規律"的自然數序列, 並且在這個序列中不會出現重復的自然數. 在這里使用的方法生成的序列並不是沒有規律的, 只不過這個軌律很難被發現就是了.
Xn+1 = (aXn + b) mod c (其中, abc通常是質數)是一種被廣泛使用的最簡單的隨機數發生演算法, 有研究表表明這個演算法生成的隨機數基本上符合統計規律, JAVA, BORLAND C等用的都是這個方法, 一般只要保證第一個種子是真正的隨機數就行了,

下面來說一下重復的問題,
上述方法會有可能出現重復, 因為當(aXn + b)有可能是同樣的數或者說余數相同的數, 因此要想不重復就得變形
偶想到的方法是
Xn=(a*n + b) mod c n是一個在1到c之間的整數, a*n + b就是一個線性公式了, 且若n不同則a*n + b也不同, 它們除上質數c得到的余數也肯定不同, 因為 若不考慮a和b而只有n的時候, 每次的結果都是n,而線性公式, 只不過移動了這條直線的位置和斜率而已, 每個結果仍然不會相同的,
為了增加不可預計性, 偶又為上面那個公式設計了, 隨機數種子, 於是就變成了這個樣子
F(N)=(隨機數*(N+隨機數))MOD 一個質數
這樣就能夠產生 1到選定質數之間的一個"無規律"的自然數序列了, 只要改變隨機數就能改變序列的次序

在應用的時候, 要把隨機數種子和最後用到的序列號保存到一個表裡, 每此使用的時候取出來算好, 再把序列號更新一下就可以了
具體地說, 就是可以建一個表來保存每個序列的隨機數種子, 然後再為這個序列建一個SEQUENCE就行了
然後就
SELECT MOD(序列控製表.隨機數*(SEQ.NEXTVAL+序列控製表.隨機數)),序列控製表.質數)
FROM 序列控製表
WHERE 序列控製表.序列ID=XX
就OK了
注意 序列控製表.質數 決定了序列的范圍

http://www.ddvip.net/database/mssql/index2/81.htm /* CopyRight */

當然,我以前也見過那種類型的,就是「真隨機」,大概是根據隨機按鍵的鍵位和滑鼠在CRT上任意的「隨機」位置以及當時的系統時間(或相對間隔,一般至少毫秒級)來適應某種較復雜的演算法來產生的。...其實,可以產生隨機效應的自變數的確是很多的,就看你怎麼用好了。

去看看系統論和混沌學吧,還有高等數學中的分形理論和物理熱學中的耗散結構理論,可能會有所幫助,呵呵。
最後,倒有興趣問問你要的隨機數是做什麼用呢,是個子問題嗎?

熱點內容
c語言實現復數運算 發布:2024-11-30 13:30:17 瀏覽:767
安卓手機要怎麼下載突擊隊ol 發布:2024-11-30 13:03:42 瀏覽:636
修改密碼sql語句 發布:2024-11-30 12:54:54 瀏覽:156
搭建手游用什麼伺服器 發布:2024-11-30 12:54:09 瀏覽:171
四川密碼門鎖在哪裡買 發布:2024-11-30 12:50:29 瀏覽:401
手機編寫腳本軟體 發布:2024-11-30 12:41:02 瀏覽:873
學php如何 發布:2024-11-30 12:36:48 瀏覽:858
家庭電腦改網盤伺服器 發布:2024-11-30 12:32:13 瀏覽:106
電腦伺服器組裝系統 發布:2024-11-30 12:32:11 瀏覽:999
在線顯示wifi密碼是什麼 發布:2024-11-30 12:30:53 瀏覽:727