$order_number = date('ymd').substr(implode(null, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
簡單從內到外解析一下這個訂單號生成過程:
1、date("ymd"):這個很容易理解,是在最前方拼接乙個當前年月日組成的數字。
2、uniqid():此函式獲取乙個帶字首、基於當前時間微秒數的唯一id。
3、substr(uniqid(), 7, 13):由於uniqid()函式生成的結果前面7位很久才會發生變化,所以有或者沒有對於我們沒有多少影響,所以我們擷取後面經常發生變化的幾位。
4、str_split(substr(uniqid(), 7, 13), 1):我們將剛剛生成的字串進行分割放到陣列裡面,str_split()第二個引數是每個陣列元素的長度。
5、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 值,意思就是把第二個引數生成的陣列每個元素全部轉換為數字,因為剛剛我們擷取的字串中含有字母,不適合訂單號。
6、implode():很簡單了,把剛剛那個轉換成數字的數字在拼接成為乙個數字。
7、由於剛剛生成的隨機數可能會長短不一(原因就是,每個字元轉換為ascii值可能不一樣,有些是2位,有些可能是一位),所以我們同意擷取0-8
8、然後加上剛剛的日期數字,現在就湊成了乙個等長的高大上的訂單號了~
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...
PHP生成唯一訂單號
新方法 新方法 新方法 生成唯一訂單號,預設18位 隨著時間的推移不停產生隨機訂單號 16位 add num 位訂單號 public function create order no add num 2 d rand 0,str repeat 9 add num return date ymd su...