PHP生成唯一的订单号

记:之前面试的时候被面试官问过简历项目中的订单号我是什么规则生成的,我牛逼吹过头了,乱说了一通,靠!今天在公司的项目中订单号生成,好奇,看了下,就是网上的这种而已。

 1  *
 2  * uniqid - 官方是这样说的:
 3  * Gets a prefixed unique identifier based on the current time in microseconds.
 4  */
 5 function build_order_no()
 6 {
 7     return date(‘Ymd‘).substr(implode(NULL, array_map(‘ord‘, str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
 8
 9 //我公司就在后面加多一个随机数
10 return date(‘Ymd‘).substr(implode(NULL, array_map(‘ord‘, str_split(substr(uniqid(), 7, 13), 1))), 0, 8).strval(rand(100,999));
11
12 }

uniqid获取一个基于当前的微秒数生成的唯一不重复的字符串(但是他的前7位貌似很久才会发生变动,所以不用考虑可删除),取其第8到13位。但是这个字符串里面有英文字母,咋办?

用ord获取他的ASCII码,所以就有了下一步:用str_split把这个字符串分割为数组,用array_map去操作(速度快点)。

然后返回的还是一个数组,KO,在用implode弄成字符串,但是字符长度不定,取前固定的几位,然后前面加上当前的年份和日期,这个方法生成的订单号,全世界不会有多少重复的。

当然,除非你把服务器时间往前调,但是调也不用怕,哥不相信他会在同一微秒内下两次订单,网络数据传输也要点时间的,即便你是在本地。

---- 文字解析部分为转载!

原文地址:https://www.cnblogs.com/pyspang/p/8407001.html

时间: 2024-08-08 21:58:52

PHP生成唯一的订单号的相关文章

php 生成唯一的订单

1 /** 2 * 生成唯一的订单号 20110809111259232312 3 * 2011-年日期 4 * 08-月份 5 * 09-日期 6 * 11-小时 7 * 12-分 8 * 59-秒 9 * 2323-微秒 10 * 12-随机值 11 * @return string 12 */ 13 public function trade_no() { 14 list($usec, $sec) = explode(" ", microtime()); 15 $usec = s

生成26位唯一的订单号

/** * Note : 生成26位数字的唯一订单号 * Author : LMZ * Time : 2019/9/2 10:50 * @return string */ function create_order_sn(){ //date("Ymdhis") . sprintf("%08d", $user_id) . mt_rand(1000, 9999);//郝英晨的生成方法 $sn = date('Ymdhis') . substr(implode(null,

使用表的id+随机数做不重复的订单号

用于分布式情况下的订单号的创建: 创建表: CREATE TABLE `shop_uuid_18` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `addTime` datetime DEFAULT NULL, `deleteStatus` bit(1) NOT NULL DEFAULT b'0', `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) )

支付宝商户订单号错误

问题:调用alipy.trade.wap.pay,显示系统繁忙 解决: 订单号错误,包含了空格 out_trade_no是指商户网站唯一订单号,在商户端唯一,每个商户订单号会对应一个支付宝订单号 ,此订单号由珊瑚自己生成,商户订单号要求64个字符以内.可包含字母.数字.下划线:需保证在商户端不重复,建议格式当前时间+自定义数字 原文地址:https://www.cnblogs.com/zzx-blog/p/8944770.html

php生成唯一订单号

支持更改长度/** * 生成唯一订单号 * */ function build_order_no(){ return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); }

如何生成唯一订单号(转)

首先,订单号有3个性质:1.唯一性 2.不可推测性 3.效率性 唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复.况且满足这些条件的同时订单号还要足够的短.我在java下定制的订单号生成方式如下:int r1=(int)(Math.random()*(10));//产生2个0-9的随机数int r2=(int)(Math.random()*(10));long now = System.currentTimeMillis();//一个13位的时间戳String paymen

c#唯一订单号生成代码

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string uniqueNum = GenerateOrderNumber(); Console.WriteLin

c# asp.net 生成唯一订单号

c# asp.net 生成唯一订单号 string OrderNo = DateTime.Now.Year.ToString().Substring(2, 2) + DateTime.Now.Month.ToString().PadLeft(2, '0') + DateTime.Now.Day.ToString().PadLeft(2, '0') + DateTime.Now.Hour.ToString().PadLeft(2, '0') + DateTime.Now.Minute.ToStri

C# 生成唯一订单号

根据GUID+DateTime.Now.Ticks生产唯一订单号 1 /// <summary> 2 /// 生成唯一数 3 /// </summary> 4 public class UniqueData 5 { 6 private static object obj = new object(); 7 private static int GuidInt { get { return Guid.NewGuid().GetHashCode(); } } 8 private sta