当前位置: 首页 > news >正文

php 生成数字订单号,PHP数字订单号的生成方法 - 简庆旺个人博客|PHP教程|PHP学习|Python学习|Python教程|Seo学习|Seo教程...

方式一:用户id结合业务类型

function createOrdernum($userId,$type){

return date('ymdHis').str_pad($userId,8,0,STR_PAD_LEFT).str_pad(mt_rand(0,999),2,0,STR_PAD_LEFT).str_pad($type,2,0,STR_PAD_LEFT);

}

生成结果为类似2004011555100000000199801的25位订单号,订单号规则为年月日时分秒+用户id+3位随机数+业务类别,这边是预估计用户超过千万设计的,如果没有那么多,可以减少下str_pad($userId,8,0,STR_PAD_LEFT)的位数,降低订单号的长度。

方式二:年月日+业务redis自增+业务类型

function createOrdernum($type){

$redis = Yii::$app->redis;

$count = (int) ($redis->incr($type));

return date('ymdHis').str_pad($count,9,0,STR_PAD_LEFT).str_pad($type,2,0,STR_PAD_LEFT);

}

这样生成的订单号类似20040116021100000000001,长度23位,可以支撑9亿订单量,超过需要调整中间部分长度。如果不考虑美观,中间可以用不补0,长度开始会比较短。我这边用的yii2,其他框架请酌情修改代码。

方式三:年月日+毫秒截取部分+业务

function createOrdernum($type){

return date('ymdhis').substr(microtime(),2,4).str_pad($type,2,0,STR_PAD_LEFT);

}

订单号类似200401042640873001,长度18位。这种方式基本已经满足需求了,无需访问db无随机数参与。但是如果两次请求在相同的十万分之一秒内产生,那么相同订单就产生了。如果担心重复,可以加2位随机数,如下:

function createOrdernum($type){

return date('ymdhis').substr(microtime(),2,4).str_pad(mt_rand(0,99),2,0,STR_PAD_LEFT).str_pad($type,2,0,STR_PAD_LEFT);

}

订单号长度也就变成20位了。

相关文章:

  • php 结果集中的一条,php中从结果集获取一条数据 无论怎么获取都是获取bool fales...
  • php larval workerman,laravel-workerman简易聊天室
  • matlab辨识函数ar多通道,AR模型之纠结与predict函数
  • matlab 正弦曲线平均值,正弦函数和余弦函数的平均值求解
  • php 打印soap日志,在PHP中记录所有Soap请求和响应
  • oracle调用sqlplus,oracle 安装与SQLPLUS简单用法
  • oracle bi免费不,Oracle BI管理工具.doc
  • oracle查看expdp进度,impdp、expdp监控数据备份恢复完成进度(EXPDP/IMPDP/RMAN)
  • matlab x的几次方怎么表示,PPTx的几次方如何输入?
  • 群辉linux系统,[教程] 群晖VMM虚拟机安装Linux系统无法成功启动桌面的解决办法...
  • linux系统卡死鼠标不动,linux桌面环境鼠标假死.点不动
  • Linux中free函数头文件,FreeImage图形库如何在Linux下的使用
  • linux r如何运行软件,linux上R的使用
  • hnc8进linux环境,鸟哥的linux私房菜(基础篇,8、开机关机、在线)命令
  • 润乾连接linux数据库,Linux下使用润乾设计器
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【node学习】协程
  • 3.7、@ResponseBody 和 @RestController
  • docker python 配置
  • es6要点
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript设计模式之工厂模式
  • Laravel 中的一个后期静态绑定
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Nacos系列:Nacos的Java SDK使用
  • python docx文档转html页面
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Sass 快速入门教程
  • SOFAMosn配置模型
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 赢得Docker挑战最佳实践
  • 优秀架构师必须掌握的架构思维
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 正则表达式-基础知识Review
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​如何在iOS手机上查看应用日志
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ![CDATA[ ]] 是什么东东
  • #laravel 通过手动安装依赖PHPExcel#
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #数学建模# 线性规划问题的Matlab求解
  • $$$$GB2312-80区位编码表$$$$
  • (pytorch进阶之路)扩散概率模型
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)shell中括号的特殊用法 linux if多条件判断
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .net 流——流的类型体系简单介绍
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET面试题(二)
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)