PHP生成唯一訂單號

// 根據id生成唯一訂單號
// sin函數在 0-∏/2 之間取值是唯一的,不過在 sin(1.4) 之後變化不明顯
// 所以取長度 9 的話,在 1400萬 之後就要重新開始一個循環,用前綴作爲區別
// 這裏是取的 9 位長度和 2 位前綴,可以保證14億訂單號不重複,如果不夠,可延長到 10 位或者增加前綴的位數
function build_order_no($id) {
    $pre = sprintf('%02d', $id / 14000000);        // 每1400萬的前綴
    $tempcode = sprintf('%09d', sin(($id % 14000000 + 1) / 10000000.0) * 123456789);    // 這裏乘以 123456789 一是一看就知道是9位長度,二則是產生的數字比較亂便於隱蔽
    $seq = '371482506';        // 這裏定義 0-8 九個數字用於打亂得到的code
    $code = '';
    for ($i = 0; $i < 9; $i++) $code .= $tempcode[ $seq[$i] ];
    return $pre.$code;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章