通常來講,oracle中生成隨機唯一編碼的方法就是呼叫sys_guid()函式產生16進製制的16個字元的字串,如果用varchar2來儲存guid格式的字串,那就需要32個位元組,如果我們的編碼表的資料量很大,比如**的會員資訊表,其它的業務流水表會非常多地引用會員資訊表的主鍵,這個對儲存成本要求是非常高的,很多表的索引都比表占用的空間還要多。。。
[@more@]
如何產生乙個可替代sys_guid()的函式呢?它首先要滿足兩個條件,一是唯一的(碰撞率非常低),二是隨機的,資料不會被機械人或爬蟲抓走。搞清楚了需求,那實現起來就比較容易一些,下列給大家乙個簡單的思路,基本上可以滿足99%的環境,經過測試表示,該函式的碰撞率在1億分之一:
create or replace function get_uniqueid return number is v_uniqueid number; begin v_uniqueid := floor(dbms_utility.get_hash_value(sys_guid(), 100000, 10737418) + dbms_random.value(1,10737418) + dbms_random.value(1,10737418)); return v_uniqueid; end get_uniqueid; /
sql>col dump format a36 sql>select dump(get_uniqueid()) as dump,get_uniqueid() as unid from dual; dump unid -------------------------------- ---------- typ=2 len=5: 196,26,47,37,60 18872248
原文:
PHP如何隨機生成乙個唯一的id
開門見山 echo str md5 uniqid mt rand true 如上就可以生成乙個唯一的標識了,思路如下 mt rand 使用 mersenne twister 演算法返回隨機整數。如果沒有提供可選引數 min 和 max,mt rand 返回 0 到 rand max 之間的偽隨機數。...
隨機生成編碼
1.通過時間戳加隨機字母string chars new string system.out.println 隨機8個字母生成編碼數量 allcode.size 2.通過uuid擷取 allcode2.add shortbuffer.tostring long time4 system.curren...
QT 生成唯一的隨機碼
void setrandstring qstring randstring randstring str 2019 1 23 開發中發現,如果開了執行緒,在不同的執行緒中同時生產隨機碼,生成的隨機碼可能一樣。這是因為這句 引起的 qsrand t.msec t.second 1000 設定隨機數的種...