想要生成唯一id,类似uuid一样,保证唯一
uuid太长了,想要短一些的
雪花算法,18位长整型
Uuid md5 下,然后截取想要的长度
雪花比较好,长整
nanoid
要短,又不能重复有个很简单的办法。
首先你要了解uuid或guid的字符组成。要知道无论是uuid还是guid都只有0-9,a-f。即16进制的字符串组成。
也就是他们肯定是不区分大小写而且只用到了16个字符!如果使用了大小写混合也可以将长度减一半而且不重复。
再加上a-z0-9A-Z 这样可选的范围就是26*2 + 10 也就是62个字符。
而base64正好合适。楼主可以想想36个区分大小写的字符不重复。那如果区分大小写是不是18个就可以了!
这样就可以实现变短而不会重复了。
雪花算法
还有一种方法就是直接硬转,即把uuid转成字节数组,即序列化。
1.序列化后的uuid是16个字节。
2.然后把8个字节拆成8个字节的两组。
3.将两个8个字节数组转成long长整型。
4.转成字符串相加,这样得到两个18个长度的纯数字字符串。
5.接下来就非常好处理了将这36个10进制数字转为20进制,这样可得到一个18个长度20进制的字符。
这样18个字符是基于uuid的基础上的所以一定是不重复的。
一楼所谓的long类型雪花算法肯定是错的,用一半的容器去装百分百的数量内容怎么算都重。
雪花算法,18位长整型
Uuid md5 下,然后截取想要的长度
雪花比较好,长整
nanoid
要短,又不能重复有个很简单的办法。
首先你要了解uuid或guid的字符组成。要知道无论是uuid还是guid都只有0-9,a-f。即16进制的字符串组成。
也就是他们肯定是不区分大小写而且只用到了16个字符!如果使用了大小写混合也可以将长度减一半而且不重复。
再加上a-z0-9A-Z 这样可选的范围就是26*2 + 10 也就是62个字符。
而base64正好合适。楼主可以想想36个区分大小写的字符不重复。那如果区分大小写是不是18个就可以了!
这样就可以实现变短而不会重复了。
雪花算法
还有一种方法就是直接硬转,即把uuid转成字节数组,即序列化。
1.序列化后的uuid是16个字节。
2.然后把8个字节拆成8个字节的两组。
3.将两个8个字节数组转成long长整型。
4.转成字符串相加,这样得到两个18个长度的纯数字字符串。
5.接下来就非常好处理了将这36个10进制数字转为20进制,这样可得到一个18个长度20进制的字符。
这样18个字符是基于uuid的基础上的所以一定是不重复的。
一楼所谓的long类型雪花算法肯定是错的,用一半的容器去装百分百的数量内容怎么算都重。