新方法:
新方法:
新方法:
/** * 生成唯一訂單號,預設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...