我有一个简短的实用程序,在其中使用randomUUID()生成UUID。
String uuid = UUID.randomUUID().toString();
然而,生成的UUID太长了,长度为36。
是否有任何方法可以将UUID的长度从36减少到接近16或使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字符,则可以将其缩短到所需长度,但唯一性的可能性会显著降低。您可以使用基数36而不是基数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位字节。
UUID uuid = UUID.randomUUID();
String idString = Long.toString(uuid.getMostSignificantBits(), 36).replaceAll("-", "").replaceAll("[a-z]","");
int id; System.out.println(id = Integer.parseInt(idString));
但是当我测试我的代码时,12个数字中有一个重复的数字。所以你能否为我提供任何可靠的解决方案? - Vibhav ChaddhaString uuid = String.format("%040d", new BigInteger(UUID.randomUUID().toString().replace("-", ""), 16));
String uuid16digits = uuid.substring(uuid.length() - 16);
这将返回实际 UUID 的最后 16 位数字。
UUID.randomUUID().toString().substring(0, 5)
public String myUUID(int length) {
String allChars = UUID.randomUUID().toString().replace("-", "");
Random random = new Random();
char[] otp = new char[length];
for (int i = 0; i < length; i++) {
otp[i] =
allChars.charAt(random.nextInt(allChars.length()));
}
return String.valueOf(otp);
}
${__time()}
函数进行评估。是的,您可以使用此函数创建。
public static String shortUUID() {
UUID uuid = UUID.randomUUID();
long l = ByteBuffer.wrap(uuid.toString().getBytes()).getLong();
return Long.toString(l, Character.MAX_RADIX);
}