Php Laravel 订单号生成规则
分享一下我的订单号生成规则,22 位,2304180233303966728324
private function generateOrderNo(int $datacenter = -1, int $workerid = -1) { $order_no = date('ymdHis'); // 取毫秒 $millisecond = substr(microtime(), 2, 3); $datacenter = $datacenter > 31 || $datacenter < 0 ? mt_rand(0, 31) : $datacenter; $workerid = $workerid > 31 || $workerid < 0 ? mt_rand(0, 31) : $workerid; $workerLength = 5; // $datacenter 和 $workerid 占用的位数 $workerLeftMoveLength = 12; // 随机位 12 位 即 4095 $datacenterLeftMoveLength = $workerLeftMoveLength + $workerLength; // 17 $workerid 5 位 即 31 $timestampLeftMoveLength = $datacenterLeftMoveLength + $workerLength; // 22 // 毫秒时间戳 10 位 0 - 1023 (最高位可能是0, 生成后高位补0) $ext = (string) (((intval($millisecond)) << $timestampLeftMoveLength) | ($datacenter << $datacenterLeftMoveLength) | ($workerid << $workerLeftMoveLength) | (mt_rand(0, 4095))); // 随机位 // 前置补0 10位 $order_no .= str_pad($ext, 10, '0', STR_PAD_LEFT); return $order_no; }
发表评论