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;
}