java - 如何减少使用 randomUUID( ) 生成的 UUID 的长度

标签 java uuid

我有一个简短的实用程序,我在其中使用 randomUUID() 生成 UUID。

String uuid = UUID.randomUUID().toString();

但是生成的uuid太长了,长度是36。

有什么方法可以将 UUID 的长度从 36 减少到接近 16 或使 UUID 长度动态化?

最佳答案

如果你不需要它是唯一的,你可以使用你喜欢的任何长度。

例如,您可以这样做。

Random rand = new Random();
char[] chars = new char[16];
for(int i=0;i<chars.length;i++) {
    chars[i] = (char) rand.nextInt(65536);
    if (!Character.isValidCodePoint(chars[i]))
        i--;
}
String s = new String(chars);

这将为您提供几乎相同程度的随机性,但会使用 \u0000\ufffd 之间的所有可能字符>

如果您需要可打印的 ASCII 字符,您可以尽可能短,但唯一性的可能性会大大降低。可以做的是使用 base 36 而不是 base 16

UUID uuid = UUID.randomUUID();
String s = Long.toString(uuid.getMostSignificantBits(), 36) + '-' + Long.toString(uuid.getLeastSignificantBits(), 36);

平均26个字符,最多27个字符。

可以使用base64编码,减少到22个字符。

如果你使用 base94,你可以得到 20 个字符。

如果您使用从\u0000 到\ufffd 的整个有效字符范围,您可以将其减少到仅 9 个字符或 17 个字节。

如果您不关心字符串,您可以使用 16、8 位字节。

关于java - 如何减少使用 randomUUID( ) 生成的 UUID 的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994768/

相关文章:

java - JSF2 自定义 UIComponent 属性数据类型

objective-c - 在 Xcode 中生成计算机特定的 UUID

java - RandomStringUtils.randomAlphanumeric(30) 是有效的 GUID 策略吗?

java - java默认构造函数抛出异常

java - 一对多和多对一映射在数据库列中显示为空

java - 找不到符号错误

windows - windows uuid什么时候会在同一个系统上改变

java - 如何在spring data jpa中基于动态查询检索/显示列名及其数据?

Android - 获取此设备的蓝牙 UUID

postgresql - 在 Amazon Redshift 中编码 Postgres UUID