PHP生成唯一訂單號


<?php

    function build_order_no(){
        return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
    }

    echo build_order_no();

輸出結果

2014062356100485

2014062349535399

用uniqid獲取一個基於當前的微秒數生成的唯一不重復的字符串(但是他的前7位貌似很久才會發生變動,所以不用考慮可刪除),取其第8到13位。但是這個字符串里面有英文字母,咋辦?
用ord獲取他的ASCII碼,所以就有了下一步:用str_split把這個字符串分割為數組,用array_map去操作(速度快點)。
然后返回的還是一個數組,KO,在用implode弄成字符串,但是字符長度不定,取前固定的幾位,然后前面加上當前的年份和日期,這個方法生成的訂單號,全世界不會有多少重復的。
當然,除非你把服務器時間往前調,但是調也不用怕,哥不相信他會在同一微秒內下兩次訂單,網絡數據傳輸也要點時間的,即便你是在本地。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM