相信作過訂單系統的小夥伴們都有這樣的需求,怎麼樣實現生成的訂單支付號 和訂單號之間看上去有點關係,實際上也有點關聯呢?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’);