做**類專案經常需要生成唯一訂單號
方法一:
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);
$order_number = date('ymd').substr(implode(null, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
簡單從內到外解析一下這個訂單號生成過程:
date("ymd"):這個很容易理解,是在最前方拼接乙個當前年月日組成的數字
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
然後加上剛剛的日期數字,現在就湊成了乙個等長的高大上的訂單號了~
方法三:以前使用
public function make_order($user_id)
{return mt_rand(10,99)
. sprintf('%010d',time() - 946656000)
. sprintf('%03d', (float) microtime() * 1000)
. sprintf('%03d', (int) $user_id % 1000);
方法四:
$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));
PHP生成唯一訂單號
order number date ymd substr implode null,array map ord str split substr uniqid 7,13 1 0,8 簡單從內到外解析一下這個訂單號生成過程 1 date ymd 這個很容易理解,是在最前方拼接乙個當前年月日組成的數字。...
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...