皮蛋是好叔叔 2018-02-05 15:45:17 683次浏览 5条回复 0 0 0
date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);

我目前用的是这个,也是在网上找的,目前没有出现订单号重复的问题,我是担心它不够强壮。用户日渐增多,想咨询一下更好的生成订单的方式,并且平稳过渡过去,希望社区的大神多多给点意见。

希望能找到我想要的答案。

  • 回复于 2018-02-07 12:16

    加个唯一索引呗。。。,或者添加时查一下有没有这个订单号。另外uniqid似乎可以添加一个后缀的,你可以在上面放上用户id之类的作为后缀,减少不同用户相同订单号的可能性。。。

    1 条回复
    回复于 2018-02-07 13:21

    我想过用uid来解决这个问题,后来我想的是,在uniqid里面加上后缀的话,生成的长度会不会发生变化,如果发生了变化,截取一段相同的长度会不会又会出现重复的问题,后来就想到了uid用“0”补齐6位数来作为那个uid,不知道可行不可行,还没尝试

  • 回复于 2018-02-08 10:31

    商户,日期,商品id,随机数等构造,基本不会重复而且有规律~

  • 回复于 2018-02-10 14:45

    欢迎加入php高级技术群711059906

  • 回复于 2018-02-21 22:38

    百度 Snowflake算法。

  • 回复于 2018-02-27 14:49

    `function createUniqueId($prefix = 1)

    {
        list($t1, $t2) = explode(' ', microtime());
        //取毫秒
        $millisecond = sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);
        //生成五位随机数
        $randomNumber = rand(10000, 99999);
        //前缀
        //$prefix = 1;
        //唯一ID
        $uniqueId = $prefix . $millisecond . $randomNumber;
        return $uniqueId;
    }`
    
    2 条回复
    回复于 2018-03-07 17:25

    老大这是什么原理

    回复于 2018-03-08 22:12

    微秒加上10000-99999的随机数再加一个自定义的前缀嘛。

您需要登录后才可以回复。登录 | 立即注册