生成唯一的字符串

在大型的生产环境中,我们需要唯一的字符串,例如订单号,sku等,为了确保唯一性,我使用了雪花算法,但是这个长度好像不能自定义,也只能是数字,有没有其他其他的算法,或者基于雪花算法,来实现自定长度,也可以用大小写字母

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 9

:joy: 算法而已你可以根据自己需要写代码啊 你可以看下京东啥的 订单号其实还是纯数字 只不过不是YmdHis形式而已

2年前 评论

目前主要还是基于时间戳实现比较多

// 年月日时分秒+随机数
date('YmdHis', time()) . sprintf('%05d', rand(0, 99999));
// 当前时间戳+随机+随机数
intval(microtime(true) * 10000) . (getmypid() % 10) . sprintf('%04d', rand(0, 9999))

gitee.com/modstart/ModStartCMS/blo...

2年前 评论

时间戳+用户唯一的身份标记如ID+随机数

2年前 评论

网上找的,然后自己改了,订单号这个,好像是测了并发1w的时候会有10个以下的重复,但是我这边业务完全没到这个级别,基本就没问题了。

if (!function_exists('createGuid')) {
    /**
     * 生成 guid.
     *
     * @return string
     */
    function createGuid()
    {
        $char = strtoupper(sha1(uniqid(mt_rand(), true)));
        $hyphen = chr(45);

        return substr($char, 0, 8).$hyphen
            .substr($char, 8, 4).$hyphen
            .substr($char, 12, 4).$hyphen
            .substr($char, 16, 4).$hyphen
            .substr($char, 20, 16);
    }
}

if (!function_exists('createOrderNumber')) {
    /**
     * 创建订单号.
     *
     * @return string
     */
    function createOrderNumber()
    {
        return date('Ymd').substr(time(), -5)
            .substr(microtime(), 3, 5).sprintf('%02d', mt_rand(0, 99));
    }
}
2年前 评论
GDDD

时间戳+用户id(必须唯一)+随机数字

2年前 评论
sanders

sku编号显然不适合用雪花这类方式生成,一般是带有商品信息含义根据业务的规则来;订单号也是如此一般带有时间信息和类型标识;此外这类业务编号还会有长度限制,比如要打印条码的就不能太长,否则打印都会成问题。

2年前 评论
ononl 2年前

格式:年月日 时分秒 随机数8位 请求 IP 后三位(补零) 用户ID后四位(补零) 随机数3位

例如:20220223141830 54789515 123 1245 351

这样重复的概率就很小了

2年前 评论

毫秒时间戳加用户id 不够补0

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!