1. 程式人生 > 實用技巧 >PHP + Redis 生成自定義訂單編號

PHP + Redis 生成自定義訂單編號

/**
 * 訂單編號生成規則
 * 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;
}