Java16位订单号,Java通过UUID生成16位唯一订单号

本文探讨了如何在Java中生成16位的唯一订单号,避免使用UUID的hashcode值浪费编码位置。作者提出了一种优化方案,结合业务代码、日期和UUID的hashCode,确保订单号的独特性和可读性。建议在实际开发中考虑并发情况和数据存储时的主键判断。
摘要由CSDN通过智能技术生成

小编在工作中遇到了标题中的场景,先查了一些微博,参考下大佬经验。最终发现大家写的都是一套代码,没有太多的信息量做对比,并且UUID的hashcode值重复的概率有多大问题,没有人给解释。小编根据自己经验,结合业务实际,对16编码总结了下,希望对你会有帮助。

网络上的写法:

public static void get16UUID(){

// 1.最大支持1-9个集群机器部署

int machineId = 1;

// 2.生成uuid的hashCode值

int hashCodeV = UUID.randomUUID().toString().hashCode();

// 3.有可能是负数

if(hashCodeV < 0) {

hashCodeV = - hashCodeV;

}

// 4.结果

String value = machineId + String.format("%015d", hashCodeV);

System.out.println(value);

}

}

以上代码的缺点:

通过我的研究和实践,发现UIID的hashcode值可能为9位或10位,但不超过10位。所以,String.format("%015d", hashCode)算法会在hashcode值前补至少5个无意义的0,属于占着茅坑不拉屎的角色,实在是对仅有的16位编码的位置浪费。小编的做法,是补全至10位,将前6位充分利用,不仅要达到进一步降低重复概率的目的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值