function build_order_no($uid){
// uid后四位
$uid_len = strlen($uid);
if ($uid_len != 4){
if ($uid_len > 4){
$after_uid = substr($uid, -4);
} else {
$after_uid = '';
for ($i = 1 ; $i < (5 - $uid_len) ;$i++){
$after_uid .= '0';
}
$after_uid .= $uid;
}
} else {
$after_uid = $uid;
}
// 获得微秒数
$un_number = substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
return date('ymdhis').$un_number.$after_uid;
}
该函数的核心逻辑分为以下几个步骤: 1. **处理用户ID(uid)**: 首先,我们获取用户的ID,并根据其长度进行判断。如果ID长度不足4位,则用前导零填充至4位;如果超过4位,则截取最后4位作为后缀。 2. **生成时间戳部分**: 使用 `date('ymdhis')` 函数生成当前日期和时间的字符串格式,精确到秒级。这确保了订单号的时间特性。 3. **添加随机性**: 为了进一步增强订单号的唯一性,我们引入了微秒级别的随机数。这部分通过 `uniqid()` 函数生成,并截取固定长度的字符。 4. **组合订单号**: 最终,将时间戳、随机数以及处理后的用户ID后四位拼接起来,形成完整的24位订单号。 例如,调用此函数可能会生成如下订单号:161127035032565256560001。这个订单号由三部分组成: - 前14位表示年月日时分秒(如161127035032)。 - 中间8位是随机生成的微秒数(如56525656)。 - 后4位是用户ID的后四位(如0001)。 这种设计不仅保证了订单号的唯一性,还方便后续按照时间或用户ID进行快速查询。对于需要大规模并发处理的系统来说,这样的订单号生成策略非常实用。 此外,如果您正在寻找一套简单易用的企业网站管理系统,不妨考虑EyouCMS。它提供了丰富的功能模块,能够帮助您快速搭建并管理企业网站。
希望这篇文章对您有所帮助!如果有任何问题或改进建议,请随时留言交流。