zoukankan      html  css  js  c++  java
  • PHP生成唯一订单号

    在日常的网站开发中,我们经常需要生成唯一的订单号。订单号太短,在高迸发情况下,很容易造成订单号重复事件,虽然是小概率事件。

    学习源头:https://blog.csdn.net/leyuxinsi/article/details/47009177

    下面我们使用PHP多个函数生成一个现在最常用的订单号格式:

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

    简单从内到外解析一下这个订单号生成过程:

    1. date("Ymd"):这个很容易理解,是在最前方拼接一个当前年月日组成的数字。

      2.uniqid():此函数获取一个带前缀、基于当前时间微秒数的唯一ID。

    2. substr(uniqid(), 7, 13):由于uniqid()函数生成的结果前面7位很久才会发生变化,所以有或者没有对于我们没有多少影响,所以我们截取后面经常发生变化的几位。

    3. str_split(substr(uniqid(), 7, 13),1):我们将刚刚生成的字符串进行分割放到数组里面,str_split()第二个参数是每个数组元素的长度。

    4. array_map('ord', str_split(substr(uniqid(), 7, 13),1))):其中array_map()函数作用为:函数返回用户自定义函数作用后的数组,意思就是ord是函数ord(),而后面第二个参数是ord()函数的参数。可以这么理解ord(str_split(substr(uniqid(),7, 13), 1)))。然后ord()是干啥的,ord()函数php内置函数:返回字符串的首个字符的 ASCII值,意思就是把第二个参数生成的数组每个元素全部转换为数字,因为刚刚我们截取的字符串中含有字母,不适合订单号。

    5. implode():很简单了,把刚刚那个转换成数字的数字在拼接成为一个数字。

    6. 由于刚刚生成的随机数可能会长短不一(原因就是,每个字符转换为ASCII值可能不一样,有些是2位,有些可能是一位),所以我们同意截取0-8

    7. 然后加上刚刚的日期数字,现在就凑成了一个等长的高大上的订单号了~

  • 相关阅读:
    html5 td中的5它空隙待解决
    转:能说明你的Javascript技术很烂的五个原因
    css字体中文、英文、Unicode名对照表
    相对定位一个例子,仿淘宝商品列表中的简单效果
    利用Javascript判断操作系统的类型
    百度web前端面试题之求两个数的最大公约数和最小公倍数
    程序员在群询问破解软件
    转:IE10初探
    学习js在线html(富文本)编辑器
    json学习笔记
  • 原文地址:https://www.cnblogs.com/djwhome/p/9287729.html
Copyright © 2011-2022 走看看