天天看點

php 生成唯一id的幾種解決方法php 生成唯一id的幾種解決方法

php 生成唯一id的幾種解決方法

網上查了下,有很多的方法

1、md5(time() . mt_rand(1,1000000));

  這種方法有一定的機率會出現重複

2、php内置函數uniqid()

  uniqid() 函數基于以微秒計的目前時間,生成一個唯一的 ID.

  w3school參考手冊有一句話:"由于基于系統時間,通過該函數生成的 ID 不是最佳的。如需生成絕對唯一的 ID,請使用 md5() 函數"。

  下面方法傳回結果類似:5DDB650F-4389-F4A9-A100-501EF1348872

function

uuid() {

if

(function_exists ( 

'com_create_guid'

)) {

return

com_create_guid ();

else

{

mt_srand ( ( double ) microtime () * 10000 ); 

//optional for php 4.2.0 and up.随便數播種,4.2.0以後不需要了。

$charid

strtoupper

( md5 ( uniqid ( rand (), true ) ) ); 

//根據目前時間(微秒計)生成唯一id.

$hyphen

chr

( 45 ); 

// "-"

$uuid

''

//chr(123)// "{"

substr

$charid

, 0, 8 ) . 

$hyphen

substr

$charid

, 8, 4 ) . 

$hyphen

substr

$charid

, 12, 4 ) . 

$hyphen

substr

$charid

, 16, 4 ) . 

$hyphen

substr

$charid

, 20, 12 );

//.chr(125);// "}"

return

$uuid

;

}

}

com_create_guid()是php自帶的生成唯一id方法,php5之後貌似已經沒有了。

3、官方uniqid()參考手冊有使用者提供的方法,結果類似:{E2DFFFB3-571E-6CFC-4B5C-9FEDAAF2EFD7}

public

function

create_guid(

$namespace

''

) {    

static

$guid

''

;

$uid

= uniqid(

""

, true);

$data

$namespace

;

$data

.= 

$_SERVER

[

'REQUEST_TIME'

];

$data

.= 

$_SERVER

[

'HTTP_USER_AGENT'

];

$data

.= 

$_SERVER

[

'LOCAL_ADDR'

];

$data

.= 

$_SERVER

[

'LOCAL_PORT'

];

$data

.= 

$_SERVER

[

'REMOTE_ADDR'

];

$data

.= 

$_SERVER

[

'REMOTE_PORT'

];

$hash

strtoupper

(hash(

'ripemd128'

$uid

$guid

. md5(

$data

)));

$guid

'{'

.  

substr

(

$hash

,  0,  8) .

'-'

.

substr

(

$hash

,  8,  4) .

'-'

.

substr

(

$hash

, 12,  4) .

'-'

.

substr

(

$hash

, 16,  4) .

'-'

.

substr

(

$hash

, 20, 12) .

'}'

;

return

$guid

;

}

标簽: 

php

uuid 主鍵