PHP生成一個唯一訂單號,年月日這種高大尚的例子
/生成一個訂單號
function getOrderNum(){
$order_number = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
return $order_number;
}
簡單從內到外解析一下這個訂單號生成過程:
- date("Ymd"):這個很容易理解,是在最前方拼接一個當前年月日組成的數字
- uniqid()
- 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)))
- 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 get_order_num(){
$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);
-
}