PHP生成一個惟一訂單號,年月日這種高大尚的例子

/生成一個訂單號php

function getOrderNum(){數組

$ordernumber = date('Ymd').substr(implode(NULL, arraymap('ord', strsplit(substr(uniqid(), 7, 13), 1))), 0, 8); app

return $ordernumber;函數

}3d

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

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

uniqid():此函數獲取一個帶前綴、基於當前時間微秒數的惟一ID。字符串

substr(uniqid(), 7, 13):因爲uniqid()函數生成的結果前面7位好久纔會發生變化,因此有或者沒有對於咱們沒有多少影響,因此咱們截取後面常常發生變化的幾位。get

strsplit(substr(uniqid(), 7, 13), 1):咱們將剛剛生成的字符串進行分割放到數組裏面,strsplit()第二個參數是每一個數組元素的長度。 arraymap('ord', strsplit(substr(uniqid(), 7, 13), 1))):其中arraymap()函數做用爲:函數返回用戶自定義函數做用後的數組,意思就是ord是函數ord(),然後面第二個參數是ord()函數的參數。能夠這麼理解ord(strsplit(substr(uniqid(), 7, 13), 1)))。而後ord()是幹啥的,ord()函數php內置函數:返回字符串的首個字符的 ASCII 值,意思就是把第二個參數生成的數組每一個元素所有轉換爲數字,由於剛剛咱們截取的字符串中含有字母,不適合訂單號。it

implode():很簡單了,把剛剛那個轉換成數字的數字在拼接成爲一個數字。 因爲剛剛生成的隨機數可能會長短不一(緣由就是,每一個字符轉換爲ASCII值可能不同,有些是2位,有些多是一位),因此咱們統一截取0-8 而後加上剛剛的日期數字,如今就湊成了一個等長的高大上的訂單號了~

上面的訂單號一次生成1W條也會存在重複,下面這個就比較難重複的

function getOrderNum() {

$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));

return $orderSn; }

function getordernum(){

$orderSn = substr(date('Y'), -2) . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -4) . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));

return $orderSn;

}

生成不重複的訂單id

public function getOrderId($prefix = 'DD')

{

return $prefix . (strtotime(date('YmdHis', time()))) . substr(microtime(), 2, 6) . sprintf('%03d', rand(0, 999));

}

生成app的用戶token

public function getToken()

{

//strtoupper轉換成全大寫的

$charid = strtoupper(md5(uniqid(mt_rand(), true)));

return substr($charid, 0, 8) . substr($charid, 8, 4) . substr($charid, 12, 4) . substr($charid, 16, 4) . substr($charid, 20, 12);

}

相關文章
相關標籤/搜索