PHP生成唯一訂單號

2022-09-16 16:21:16 字數 1687 閱讀 2651

新方法:

新方法:

新方法:

/*

* * 生成唯一訂單號,預設18位【隨著時間的推移不停產生隨機訂單號】

* 16位+ $add_num 位訂單號

*/public

function create_order_no($add_num = 2)

d", rand(0, str_repeat('9', $add_num)));

}return

date('ymd'). substr(time(), -5) . substr(microtime(), 2, 5) . $rand_num

;

//return (date('ymd') . substr(implode(null, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 10)); //該方法試過存在重複訂單

}

【注意:以下方法本人測算會有重複訂單號,一天之內可能會有重複訂單號】

下面使用php多個函式生成乙個現在最常用的訂單號格式

$order_number = date('ymd').substr(implode(null, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);

簡單從內到外解析一下這個訂單號生成過程:

date("ymd"):這個很容易理解,是在最前方拼接乙個當前年月日組成的數字。

2.uniqid():此函式獲取乙個帶字首、基於當前時間微秒數的唯一id。

substr(uniqid(), 7, 13):由於uniqid()函式生成的結果前面7位很久才會發生變化,所以有或者沒有對於我們沒有多少影響,所以我們擷取後面經常發生變化的幾位。

str_split(substr(uniqid(), 7, 13),1):我們將剛剛生成的字串進行分割放到陣列裡面,str_split()第二個引數是每個陣列元素的長度。

array_map('ord', str_split(substr(uniqid(), 7, 13),1))):其中array_map()函式作用為:函式返回使用者自定義函式作用後的陣列,意思就是ord是函式ord(),而後面第二個引數是ord()函式的引數。可以這麼理解ord(str_split(substr(uniqid(),7, 13), 1)))。然後ord()是幹啥的,ord()函式php內建函式:返回字串的首個字元的 ascii值,意思就是把第二個引數生成的陣列每個元素全部轉換為數字,因為剛剛我們擷取的字串中含有字母,不適合訂單號。

implode():很簡單了,把剛剛那個轉換成數字的數字在拼接成為乙個數字。

由於剛剛生成的隨機數可能會長短不一(原因就是,每個字元轉換為ascii值可能不一樣,有些是2位,有些可能是一位),所以我們同意擷取0-8

然後加上剛剛的日期數字,現在就湊成了乙個等長的高大上的訂單號了~

PHP生成唯一訂單號

order number date ymd substr implode null,array map ord str split substr uniqid 7,13 1 0,8 簡單從內到外解析一下這個訂單號生成過程 1 date ymd 這個很容易理解,是在最前方拼接乙個當前年月日組成的數字。...

PHP生成唯一訂單號

做 類專案經常需要生成唯一訂單號 方法一 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 sub...

PHP生成唯一訂單號

利用php生成唯一訂單號,可用作於 下單,以及和支付寶等第三方支付進行對接 先來一段測試 i 10 while i echo php eol 測試結果見 來自ecshop訂單號生成函式 includes lib order.php檔案中的get order sn 得到新訂單號 return stri...