PHP生成唯一订单号的6种方法

做商城类项目经常需要生成唯一订单号,下面来个汇总!

方法一:

return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);

方法二: 正在使用。。。

/**

 *

 * uniqid - 官方是这样说的:

 * Gets a prefixed unique identifier based on the current time in microseconds.

 */

function build_order_no()

{

    return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);

}

用uniqid获取一个基于当前的微秒数生成的唯一不重复的字符串(但是他的前7位貌似很久才会发生变动,所以不用考虑可删除),取其第8到13位。但是这个字符串里面有英文字母,咋办?
用ord获取他的ASCII码,所以就有了下一步:用str_split把这个字符串分割为数组,用array_map去操作(速度快点)。
然后返回的还是一个数组,KO,在用implode弄成字符串,但是字符长度不定,取前固定的几位,然后前面加上当前的年份和日期,这个方法生成的订单号,全世界不会有多少重复的。
当然,除非你把服务器时间往前调,但是调也不用怕,哥不相信他会在同一微秒内下两次订单,网络数据传输也要点时间的,即便你是在本地。

方法三:以前使用。。。

public function make_order($user_id)

 {

 return mt_rand(10,99)

 . sprintf('%010d',time() - 946656000)

 . sprintf('%03d', (float) microtime() * 1000)

 . sprintf('%03d', (int) $user_id % 1000);

 }

方法四:

$yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');

$orderSn = $yCode[intval(date('Y')) - 2011] . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99

));

方法五 生成24位唯一订单号码

//生成24位唯一订单号码,格式:YYYY-MMDD-HHII-SS-NNNN,NNNN-CC,其中:YYYY=年份,MM=月份,DD=日期,HH=24格式小时,II=分,SS=秒,NNNNNNNN=随机数,CC=检查码
  @date_default_timezone_set("PRC");
  while(true){
   //订购日期
   $order_date = date('Y-m-d');
   //订单号码主体(YYYYMMDDHHIISSNNNNNNNN)
   $order_id_main = date('YmdHis') . rand(10000000,99999999);
   //订单号码主体长度
   $order_id_len = strlen($order_id_main);
   $order_id_sum = 0;
   for($i=0; $i<$order_id_len; $i++){
    $order_id_sum += (int)(substr($order_id_main,$i,1));
   }
   //唯一订单号码(YYYYMMDDHHIISSNNNNNNNNCC)
   $order_id = $order_id_main . str_pad((100 - $order_id_sum % 100) % 100,2,'0',STR_PAD_LEFT);
  
   if($result = sqlite_query($db,"SELECT * FROM orders WHERE order_id='$order_id'")){
    if(sqlite_num_rows($result) == 0){
     break;
    }
   }

例子六

/** 

* 生成16位纯数字订单号 

* 最大支持时间到 2056-12-31 23:59:59 

* 

* @access public 

* @return string 

*/ 

public static function getOrderSN() { 

return (date('y') + date('m') + date('d')) . str_pad((time() - strtotime(date('Y-m-d'))), 5, 0, STR_PAD_LEFT) . substr(microtime(), 2, 6) . sprintf('%03d', rand(0, 999)); 

}

目前在用的,基本保证不重复了,能用到2056年,觉得应该够了,以后有需求再扩展

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 字符串
, 随机数
, 格式
时间
php 生成唯一订单号、php生成唯一的订单号、生成唯一订单号的方法、生成唯一订单号、java生成唯一订单号,以便于您获取更多的相关知识。

时间: 2024-09-03 18:02:53

PHP生成唯一订单号的6种方法的相关文章

PHP生成唯一订单号的方法汇总_php实例

第一种 复制代码 代码如下: return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT); 第二种 复制代码 代码如下: return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); 第三种 //生成24位唯一订单号码,格式:YYYY-MMDD-HHII-SS-NNNN,

PHP生成唯一订单号_php技巧

在网上找了一番,发现这位同学的想法挺不错的,redtamo,具体的请稳步过去看看,我作简要概述,该方法用上了英文字母.年月日.Unix 时间戳和微秒数.随机数,重复的可能性大大降低,还是很不错的.使用字母很有代表性,一个字母对应一个年份,总共16位,不多也不少. 1. 复制代码 代码如下: <?php      $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');      $orderSn = $yCode[intv

PHP生成唯一订单号的方法汇总

 第一种    代码如下: return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);   第二种   代码如下: return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);   第三种 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

支付宝唯一订单号如何生成

问题描述 支付宝唯一订单号如何生成? 解决方案 生成规则及方式太多了... 要保证唯一也很轻松吧?uuid就能保证唯一了吧. 如果不放心 在toString + 系统毫秒. 如果在不放心的话可以采用RSA或其它方式继续加密...

如何定义唯一订单号,解决用户重复交费问题?

问题描述 开发网上商城,用户购物时,可能登录在不同的两个pc上,产生一个相同订单号,交费成功,但记录的是两笔交易. 解决方案 解决方案二:引用楼主zhaijianguo8848的回复: 开发网上商城,用户购物时,可能登录在不同的两个pc上,产生一个相同订单号,交费成功,但记录的是两笔交易. 不明白这句话的意思.是说要达到这种效果,还是不要这种效果?不过产生唯一订单号,可以在订单号后面加时间戳,订单号+System.currentTimeMillis()解决方案三:取得訂單號與交費的時候,數據庫設

解析PHP生成静态html文件的三种方法_php技巧

本文将介绍Php 生成静态html文件的三种方法 .1,下面使用模版的一个方法! 复制代码 代码如下: <?php $fp = fopen ("templets.html","a"); if ($fp){ $fup = fread ($fp,filesize("templets.html")); $fp2 = fopen ("html.shtml","w"); if ($fwrite ($fp2,$f

用php随机生成福彩双色球号码的2种方法_php技巧

不瞒您说,俺也是个双色球爱好者,经常买,但迟迟没有中过一等奖,哈哈.这里为大家介绍用php随机生成福彩双色球号码的二种方法,供朋友们学习参考.新的一年,祝大家中大奖,发大财. 方法一 复制代码 代码如下: <?php/*随机生成福彩双色球号码*/$red = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33);$blue = array(1,2,3,4,5

PHP实现生成唯一会员卡号_php技巧

在不查询数据库的情况下,每个会员登录进来会生成一个数字字母组合不重复的会员卡号. 效果图如下: 当我们要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号.10位的某证件号码.订单流水号.短网址等等,我们可以使用36进制计算出符合位数的不重复的编号.                                                                                 查看演示 下载源码 我们将0-Z(0123456789ABCDEFGHIJK

比较ASP生成静态HTML文件的几种方法

将动态页面转换生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录(特别是对接受动态参数的页面).前台访问时,脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度. 当然,凡事有利必有弊,生成HTML页面无形中也耗费大量的磁盘空间以存放这些静态文件,在编辑页面过程中除读写数据库外,也要读写服务器磁盘,页面样式的改动必须重新生成全部HTML文件,等等. 像很多搜索引擎,都可以提交网站的页面地址列表,动态文件的收录问题已经不算是个问题了(如google sitemap).得失