JAVA UUID 仅使用数字字符生成随机UUID

JAVA UUID use only numeric characters to generate random UUID

我想为我的 类 之一生成一个序列号,例如 xxxxxxxxxx,我希望它的长度正好是 10 个字符。

如何仅使用 "1234567890" 生成随机 UUID。 有什么我必须传递给 constructorUUID.randomUUID() 的吗?

我怎样才能给它一个固定的长度?

UUID gives 128 bits,其中10位数字的范围约为33位,使用210约为。 103。所以唯一性降低了。

你可以这样做:

String randomCode() {
    UUID uuid = UUID.randomUUID();
    long lo = uuid.getLeastSignificantBits();
    long hi = uuid.getMostSignificantBits();
    lo = (lo >> (64 - 31)) ^ lo;
    hi = (hi >> (64 - 31)) ^ hi;
    String s = String.format("%010d", Math.abs(hi) + Math.abs(lo));
    return s.substring(s.length() - 10);
}

这将 128 位折叠将近 4 倍以提供 10 位数字。 也就是说不一定是独一无二的。

使用秘密伪随机序列可能会更好,需要保存状态。或任何其他随机生成器 / System.nanos().