PHP全局唯一ID生成_第1頁
PHP全局唯一ID生成_第2頁
PHP全局唯一ID生成_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第PHP全局唯一ID生成*64bit=1bit為空缺+41bit毫秒時間戳+10bit機器id+12bit自增id

*當前結構****最多支持128項業(yè)務

*64bit=1bit空缺+7bit業(yè)務編號(128項業(yè)務)+39bit毫秒時間戳(與2017-06-01的差值)+5bit機器id(32臺)+4bit一級隨機數(shù)+4bit二級隨機數(shù)+4bit三級隨機數(shù)

$machineid_file=/data/machineid.txt

if(file_exists($machineid_file)){

$machine_id=intval(file_get_contents($machineid_file));

if($machine_id31||$machine_id0){

$machine_id=0;

}else{

$machine_id=0;

define(MACHINE_ID,$machine_id);

classBusinessIdHelper

publicstatic$start_stamp=1496246400000;//2017-06-0100:00:00的毫秒級時間戳

publicstatic$max_rand=15;

publicstaticfunctiongenerateId($business_id)

//1bit-頭部空缺

$head_bin=str_pad(decbin(0),1,0,STR_PAD_LEFT);

//7bit-7bit業(yè)務編號(最多128項業(yè)務)

$business_id_bin=str_pad(decbin($business_id),7,0,STR_PAD_LEFT);

//39bit-(now-$start_stamp)的毫秒級時間戳差值

$now_stamp=floor(microtime(true)*1000);

$diff_stamp_bin=str_pad(decbin($now_stamp-self::$start_stamp),39,0,STR_PAD_LEFT);

//5bit-32臺機器

$machine_id_bin=str_pad(decbin(MACHINE_ID),5,0,STR_PAD_LEFT);

//4bit-4位隨機數(shù)(0~15)

//一級

$random1=mt_rand(0,self::$max_rand);

$random1_bin=str_pad(decbin($random1),4,0,STR_PAD_LEFT);

//二級

$random2=mt_rand(0,self::$max_rand);

$random2_bin=str_pad(decbin($random2),4,0,STR_PAD_LEFT);

//三級

$random3=mt_rand(0,self::$max_rand);

$random3_bin=str_pad(decbin($random3),4,0,STR_PAD_LEFT);

//鏈接二進制串

$pack_data=$head_bin.$business_id_bin.$diff_stamp_bin.$machine_id_bin.$random1_bin.$random2_bin.$random3_bin;

var_dump($business_id);

var_dump($now_stamp);

var_dump(MACHINE_ID);

var_dump($pid);

var_dump($pack_data);

returnbindec($pack_data);

publicstaticfunctionparseId($id)

//數(shù)據(jù)不滿64位的,需要補齊

$data_bin=str_pad(decbin($id),64,0,STR_PAD_LEFT);

$head_bin=substr($data_bin,0,1);

$business_id_bin=substr($data_bin,1,7);

$diff_stamp_bin=substr($data_bin,8,39);

$machine_id_bin=substr($data_bin,47,5);

$random1_bin=substr($data_bin,52,4);

$random2_bin=substr($data_bin,56,4);

$random3_bin=substr($data_bin,60,4);

$head=bindec($head_bin);

$business_id=bindec($business_id_bin);

$diff_stamp=bindec($diff_stamp_bin);

$machine_id=bindec($machine_id_bin);

$random1=bindec($random1_bin);

$random2=bindec($random2_bin);

$random3=bindec($random3_bin);

$stamp=self::$start_stamp+$diff_stamp;//毫秒

$data=[

head=$head,

business_id=$business_id,

stamp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論