您的位置:首页技术文章
文章详情页

JAVA生成短8位UUID的实例讲解

浏览:32日期:2022-08-18 14:28:27

短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个。

本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组,然后通过模62操作,结果作为索引取出字符,

这样重复率大大降低。

经测试,在生成一千万个数据也没有出现重复,完全满足大部分需求。代码贴出来供大家参考。

public static String[] chars = new String[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; public static String generateShortUuid() { StringBuffer shortBuffer = new StringBuffer(); String uuid = UUID.randomUUID().toString().replace('-', ''); for (int i = 0; i < 8; i++) { String str = uuid.substring(i * 4, i * 4 + 4); int x = Integer.parseInt(str, 16); shortBuffer.append(chars[x % 0x3E]); } return shortBuffer.toString(); }

补充:生成 8 / 16 / 32 位的UUID

我就废话不多说了,大家还是直接看实例吧~

import java.util.UUID; public class TestUUID { // 得到16位的UUID-(数字)public static String getUUID_16() {int machineId = 1;// 最大支持1-9个集群机器部署 int hashCodeV = UUID.randomUUID().toString().hashCode();if (hashCodeV < 0) {// 有可能是负数hashCodeV = -hashCodeV;}String string = machineId + String.format('%015d', hashCodeV);return string;} // 得到32位的UUID-(数字)public static String getUUID_32() {return UUID.randomUUID().toString().replace('-', '').toLowerCase();} //得到8位的UUID-(码)public static String[] chars = new String[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n','o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 'Y', 'Z' }; public static String getUUID_8() {StringBuffer shortBuffer = new StringBuffer();String uuid = UUID.randomUUID().toString().replace('-', '');for (int i = 0; i < 8; i++) {String str = uuid.substring(i * 4, i * 4 + 4);int x = Integer.parseInt(str, 16);shortBuffer.append(chars[x % 0x3E]);}return shortBuffer.toString(); } public static void main(String[] args) { System.out.println(getUUID_8());} }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持好吧啦网。如有错误或未考虑完全的地方,望不吝赐教。

标签: Java
相关文章: