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

JAVA UUID仅使用数字字符生成随机UUID,java,random,uuid,Java,Random,Uuid,我想为我的一个类生成一个序列号,比如xxxxxxxxx,我想它的长度正好是10个字符 如何仅使用“1234567890”生成随机UUID。 有什么东西我必须传递给构造函数或UUID.randomuid() 我怎样才能给它一个固定的长度呢?给出,其中10位的范围大约是33位,使用210大约是103位。因此,减少了唯一性 人们可以这样做: String randomCode() { UUID uuid = UUID.randomUUID(); long lo = uuid.getLe

我想为我的一个类生成一个序列号,比如
xxxxxxxxx
,我想它的长度正好是10个字符

如何仅使用
“1234567890”
生成随机UUID。 有什么东西我必须传递给
构造函数
UUID.randomuid()

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

给出,其中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()。

此外,查看
String.format
,将整数(例如
long
)格式化为10位字符串。实际上,我想使用
UUID
类来实现我可以使用的一些特定方法。如果将UUID的格式限制为10位,那么它就不再是UUID;参见。10位小数的范围约为33bits@saka1029当然更改代码。