仅生成 8 个字符的 UUID

2022-08-31 09:56:27

UUID 库生成 32 个字符的 UUID。

我想只生成8个字符的UUID,可能吗?


答案 1

这是不可能的,因为UUID是每个定义的16字节数字。但是,当然,您可以生成8个字符长的唯一字符串(请参阅其他答案)。

此外,在生成较长的 UUID 并对其进行子字符串处理时要小心,因为 ID 的某些部分可能包含固定字节(例如,MAC、DCE 和 MD5 UUID 就是这种情况)。


答案 2

你可以尝试从apache.commons上类RandomStringUtils

import org.apache.commons.lang3.RandomStringUtils;

final int SHORT_ID_LENGTH = 8;

// all possible unicode characters
String shortId = RandomStringUtils.random(SHORT_ID_LENGTH);

请记住,它将包含所有可能的字符,这些字符既不是URL也不是人类友好的。

因此,也请查看其他方法:

// HEX: 0-9, a-f. For example: 6587fddb, c0f182c1
shortId = RandomStringUtils.random(8, "0123456789abcdef"); 

// a-z, A-Z. For example: eRkgbzeF, MFcWSksx
shortId = RandomStringUtils.randomAlphabetic(8); 

// 0-9. For example: 76091014, 03771122
shortId = RandomStringUtils.randomNumeric(8); 

// a-z, A-Z, 0-9. For example: WRMcpIk7, s57JwCVA
shortId = RandomStringUtils.randomAlphanumeric(8); 

正如其他人所说,id与较小id冲突的可能性可能很大。查看生日问题如何适用于您的案例。你可以在这个答案中找到如何计算近似值的很好的解释。