電商系統訂單號和訂單支付號生成方法

相信作過訂單系統的小夥伴們都有這樣的需求,怎麼樣實現生成的訂單支付號 和訂單號之間看上去有點關係,實際上也有點關聯呢?php

下面介紹的這個方法就是 經過訂單號 ,生成支付號 的好方法:函數

之間貼代碼吧,看了就懂的:this

payment_id 生成方式:
獲得惟一的payment id 總共20位 前十五位爲訂單號
member_id 是參與計算的因子code

php 代碼:
 
function  get_payment_id($member_id){
$order_id = str_pad($member_id,15,time());
        $i = rand(0,99999);
        do{
            if(99999==$i){
                $i=0;
            }
            $i++;
            $payment_id = $order_id.str_pad($i,5,'0',STR_PAD_LEFT);
            //下面這句表示 要去查詢一下當前表裏是否有重複的payment_id
        //  若是有 就須要另外生成一個
            $row = $this->dump($payment_id, 'payment_id');
        }while($row);
        return $payment_id;
}

上面 這個代碼的執行過程: 整個過程 被封裝在一個 get_payment_id() 的函數裏。該函數 接收一個外部參數 $member_id字符串

傳遞參數 $member_id 到 函數 get_payment_id( $member_id)get

$order_id = str_pad($member_id,15,time());
函數 str_pad 是php的一個字符自動填充函數 它的參數有四個:
函數: str_pad(參數1,參數2,參數3[,參數4]) 前三個參數必須;
參數1:須要填充的字符串;
參數2:填充後的字符總長度;
參數3: 用於填充的字符.
參數4: 默認字符會填充在參數1 的右邊。 若是是STR_PAD_LEFT 表示填充在左邊。io

舉例:str_pad(‘2’,5,’0’,STR_PAD_LEFT) 等到結果是 ‘00002’
舉例:str_pad(‘2’,5,’0’) 等到結果是 ‘20000’function

因此 上面的語句: str_pad($member_id,15,time());
若是:$member_id = 17 ,time()是php 生成時間戳函數,它的值是10位整數:1440493454
那麼:等到的結果是 171440493454144 總長度 是15 個字符的字符串。class

$payment_id = $order_id.str_pad($i,5,’0′,STR_PAD_LEFT);
上面 這個語句:的意思 是 $i, 是一個 0 至 99999的隨機數。
str_pad($i,5,’0′,STR_PAD_LEFT) : 把這個隨機數 變成 5 位 的字符串
假設: $I=45 那麼str_pad($i,5,’0′,STR_PAD_LEFT) = ‘00045’.隨機數

$paymember_id 最終 是一個 20位 的純數字 字符串。

語句 do…………while 就是一個循環查詢 數據表裏 的paymember_Id 字段 是否有 $paymember_id 相等的值。若是有了,就另外生成一個$paymember_id. $row = $this->dump($payment_id, ‘payment_id’);

相關文章
相關標籤/搜索