PHP + Redis 生成自定義訂單編號
阿新 • • 發佈:2020-09-10
/** * 訂單編號生成規則 * 14位 = 6位時間 + 5位自增 + 3位ID * @param string $prefix 字首: 預設為order * @param int $userId 使用者ID: 預設為1 * @param int $startTime 開始的日期時間戳: 預設為0 * @param int $expiredAt 有效期: 預設為永久 * @return string */ public function getRedisOrderNum($prefix = 'order', $userId = 1, $startTime = 0, $expiredAt = 0) { // 6位日期 $date = date('ymd', time()); // 200909 // 開始的日期不是0 if ($startTime != 0) { // 將6位時間變為距離開始日期的天數 $dayNum = 1 + ceil((time() - $startTime) / (60 * 60 * 24)); $date = $dayNum + 100000; } // 使用者ID後3位 $userId = str_pad($userId, 3, 0, STR_PAD_LEFT); $userNum = substr($userId, -3); // 5位自增 $redisNum = Redis::incr("$prefix:$date:$userNum"); if ($redisNum == 1) { $redisNum = 10000; if ($expiredAt == 0) { Redis::set("$prefix:$date:$userNum", $redisNum); } else { Redis::setex("$prefix:$date:$userNum", $expiredAt, $redisNum); } } // 6位日期 + 5位自增數 + 使用者ID後3位 return $date . $redisNum . $userNum; }