JAVA UUID 仅使用数字字符生成随机UUID
JAVA UUID use only numeric characters to generate random UUID
我想为我的 类 之一生成一个序列号,例如 xxxxxxxxxx
,我希望它的长度正好是 10 个字符。
如何仅使用 "1234567890"
生成随机 UUID。
有什么我必须传递给 constructor
或 UUID.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().
我想为我的 类 之一生成一个序列号,例如 xxxxxxxxxx
,我希望它的长度正好是 10 个字符。
如何仅使用 "1234567890"
生成随机 UUID。
有什么我必须传递给 constructor
或 UUID.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().