php如何生成唯一不重複編號?很多時候,比如訂單都需要我們生成唯一編號。在常規情況下,php提供的uniqid()能夠滿足需求,但是在高併發的時候,我們就需要更好的方案來生成唯一不重複編號。本文將分享例項**,希望對大家有所幫助。
前陣子有個電子商務專案,需要生成訂單號。當時的考慮很簡單,取系統時間加上隨機數,或者使用 uniqid() 方法。仔細考慮下上述方法,在顧客購買量少的情況下,訂單重複的可能性為零,但是在購買高蜂期生成的訂單號重複是很有可能發生的。
第一種return
date
(
'ymd'
) .
str_pad
(mt_rand(1, 99999), 5,
'0'
, str_pad_left);
第二種return
date
(
'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 生成不重複唯一標識方法一 這種方法會產生大量的重複資料...