1. 程式人生 > >PHP生成一個唯一訂單號,年月日這種高大尚的例子

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;
}

 

 

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

  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. 然後加上剛剛的日期數字,現在就湊成了一個等長的高大上的訂單號了~

 

 

上面的訂單號一次生成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

 
  1.  

    public function getOrderId($prefix = 'DD')

  2.  

    {

  3.  

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

  4.  

    }

生成app的使用者token

 
  1.  

    public function getToken()

  2.  

    {

  3.  

    //strtoupper轉換成全大寫的

  4.  

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

  5.  

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

  6.  

    }