關於生成唯一數字id的問題,是不是需要使用rand生成乙個隨機數,然後去資料庫查詢是否有這個數呢?感覺這樣的話有點費時間,有沒有其他方法呢?
當然不是,其實有兩種方法可以解決。
1. 如果你只用php而不用資料庫的話,那時間戳+隨機數是最好的方法,且不重複;
2. 如果需要使用資料庫,即你還需要給這個id關聯一些其他的資料。那就給mysql資料庫中的表的id乙個auto_increment(自增)屬性,每次插入一條資料時,id自動+1,然後使用mysql_insert_id()或last_insert_id()返回這個自增後的id。
當然,這個問題已經有現成的解決方法了,使用php uuid擴充套件就能完美解決這個問題,這個擴充套件能生成唯一的完全數字簽名。。
如果你不使用composer請參考
如果你的專案是基於composer搭建的,那麼請參考
具體的原始碼我就不搬運了,小夥伴們自己取下來就可以直接使用了
php生成唯一識別符號**示例:
< ?
//生成唯一識別符號
//sha1()函式, "安全雜湊演算法(sha1)"
function create_unique()
?>
php生成唯一識別符號函式描述及例子
< ?
$newhash = create_unique();
echo $newhash;
?>
再給大家分享乙個
/** 訊號量(semaphore)。
* 這是乙個包裝類,用於解決不同平台下對「訊號量」的不同實程式設計客棧現方式。
* 目前這個類只是象徵性的,在 windows 平台下實際是空跑(並沒有真的實現互斥)。
*/class semwrapper
} public function acquire()
return true;
} public function release()
return true;
}}/* * 順序號發生器。
*/class seqgenerator
// 開啟共享記憶體
$shm_id = shmop_open( self::shm_key, 'n', 0644, 4 );
if ( empty($shm_id) )
// 在共享記憶體中寫kzahmjt入初始值
$size = shmop_write( $shm_id, pack( 'l', $start ), 0 );
if ( $size != 4 )
// 關閉共享記憶體,釋放訊號量
shmop_close( $shm_id );
$sw->release();
return true;
} /**
* 產生下乙個順序號。
* @return int 產生的順序號
*/static public function next()
// 開啟共享記憶體
$shm_id = shmop_open( self::shm_key, 'w', 0, 0 );
if ( empty($shm_id) )
// 從共享記憶體中讀出順序號
$data = shmop_read( $shm_id, 0, 4 );
if ( empty($data) )
$arr = unpack( 'l', $data );
$seq = $arr[1];
// 把下乙個順序號寫入共享內程式設計客棧存
$size = shmop_write( $shm_id, pack( 'l', $seq + 1 ), 0 );
if ( $size !www.cppcns.com= 4 )
// 關閉共享記憶體,釋放訊號量
shmop_close( $shm_id );
$sw->release();
return $seq;
}}$a = seqgenerator::init( time() );
var_dump($a);
for ( $i=0; $i < 10; $i++ )
好了,今天就先到這裡吧,希望對大家學習php能夠有所幫助
本文標題: php生成唯一數字id的方法彙總
本文位址:
php 生成唯一ID
function guid factor prefix suffix 生成因子 機器毫秒,使用者瀏覽器與作業系統資訊,使用者ip,隨機因子,及自定義 factor 因子 原理 自定義 factor 因子 例如可使用使用者 user id 模組標識 product,order.字首 prefix 可用...
php生成唯一id
網上查了下,有很多的方法 1 md5 time mt rand 1,1000000 這種方法有一定的概率會出現重複 2 php內建函式uniqid uniqid 函式基於以微秒計的當前時間,生成乙個唯一的 id.w3school參考手冊有一句話 由於基於系統時間,通過該函式生成的 id 不是最佳的。...
PHP生成唯一ID
php自帶乙個生成唯一id的方法uniqid 我們還可以傳入引數,這個引數作為生成的唯一id的字首,該方法生成的id是基於當前時間微秒數生成的id,保證了id的唯一性。示例 prefix itbsl 說明 string uniqud string prefix bool more entropy f...