Java原生的UUID长度为36位,嫌长
这里自己实现了一套自己的算法,来生成较短的UUID
由雪花算法启发而来,
大致原理是利用时间戳+随机值做值,然后转换成62进制(当然这个进制数你也可以搞成更多)
有一些参数可以控制一些行为,都在注释里了
你可以自己修改digits数组,乱乱序啥的,混淆一下,随机性可能更好一些
/**
* Java 原生的UUID为36位 or 32位,太长. 这里提供一个位数较短的UUID.
*
* UUID生成规则,当前时间减去'零时'的毫秒数 + N位随机数,转变成62进制的String类型.
*
* 当前配置可满足30年内每毫秒10^9分之一的碰撞.
*
* 实测现在长度为13位,想要更短的话可以调整下方的几个参数
*
* @author libing02 , on 11月 20, 2019.
*/
public class ShortUUID {
/**
* digits还可以扩,但是不要包含下面的SEPARATOR
*
* 也可以替换一个"乱序"digits排列,最终使uuid看起来不是有序的.
*
* 一旦用到生产环境,digits就不要再变动了,否则会出现重复
*
*/
private static final char[] digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"