PHP生成唯一不重複編號的方法彙總

2021-08-28 07:50:55 字數 2555 閱讀 7509

php如何生成唯一不重複編號?很多時候,比如訂單都需要我們生成唯一編號。在常規情況下,php提供的uniqid()能夠滿足需求,但是在高併發的時候,我們就需要更好的方案來生成唯一不重複編號。本文將分享例項**,希望對大家有所幫助。

前陣子有個電子商務專案,需要生成訂單號。當時的考慮很簡單,取系統時間加上隨機數,或者使用 uniqid() 方法。仔細考慮下上述方法,在顧客購買量少的情況下,訂單重複的可能性為零,但是在購買高蜂期生成的訂單號重複是很有可能發生的。

第一種returndate('ymd') .str_pad(mt_rand(1, 99999), 5,'0', str_pad_left);

第二種returndate('ymd').substr(implode(null,array_map('ord',str_split(substr(uniqid(), 7, 13), 1))), 0, 8);

第三種//生成24位唯一訂單號碼,格式:yyyy-mmdd-hhii-ss-nnnn,nnnn-cc,其中:yyyy=年份,mm=月份,dd=日期,hh=24格式小時,ii=分,ss=秒,nnnnnnnn=隨機數,cc=檢查碼

@date_default_timezone_set("prc");

while(true)

//唯一訂單號碼(yyyymmddhhiissnnnnnnnncc)

$order_id=$order_id_main.str_pad((100 -$order_id_sum% 100) % 100,2,'0',str_pad_left);

第四種:

在網上找了一番,發現這位同學的想法挺不錯的,redtamo,具體的請穩步過去看看,我作簡要概述,該方法用上了英文本母、年月日、unix 時間戳和微秒數、隨機數,重複的可能性大大降低,還是很不錯的。使用字母很有代表性,乙個字母對應乙個年份,總共16位,不多也不少,呵呵。

<?php

$ycode=array('a','b','c','d','e','f','g','h','i','j');

$ordersn=$ycode[intval(date('y')) - 2011] .strtoupper(dechex(date('m'))) .date('d') .substr(time(), -5) .substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));

?>

生成效果:

a422694333616096

唉,不過很可惜,最後專案並沒有使用這種方法,說是沒必要搞這麼複雜, - -!

**:

PHP高並發生成不重複唯一標識

假設唯一標識為使用者id,當有3個使用者同時註冊,生成使用者id的時間完全相同,如何保證id的唯一性 們給出的方案很多,其中比較流行的方案如下所示 md5 uniqid md5 microtime true true microtime true 返回unix紀元以來的當前時間,精確到最接近的微秒 ...

PHP如何生成乙個唯一的訂單編號

下面是乙個生成唯一訂單的方法,這個方法是在某二開框架中擷取的,自認為比較有效好用,所以儲存下來,也在多次使用.生成計畫單號 public function createno table,prefix billno date ymdhis this random 6,true return prefi...

PHP uniqid 高並發生成不重複唯一ID

php uniqid 函式可用於生成不重複的唯一識別符號,該函式基於微秒級當前時間戳。在高併發或者間隔時長極短 如迴圈 的情況下,會出現大量重複資料。即使使用了第二個引數,也會重複,最好的方案是結合md5函式來生成唯一id。php uniqid 生成不重複唯一標識方法一 這種方法會產生大量的重複資料...