如果我正在使用Long uuid = UUID.randomUUID().getMostSignificantBits()它有可能发生碰撞.它切断了最不重要的位,所以你有可能遇到碰撞,对吗?
我有一个简短的实用程序,我使用randomUUID()生成一个UUID.
String uuid = UUID.randomUUID().toString();
Run Code Online (Sandbox Code Playgroud)
但是,生成的uuid太长,长度为36.
无论如何,我可以将UUID的长度从36减少到接近16或16?
我想做以下......
a)将生成的UUID压缩为长度为8的String.
b)将压缩的UUID解压缩回原始UUID.
原因是因为我必须将UUID发送到伙伴系统,并且伙伴系统只接受UUID的8个字符,并且我不能请求更改伙伴系统.
因此,剩下的工作是将我所拥有的UUID压缩为8个字符串,然后在从伙伴系统返回消息时将其解压缩回原始UUID.
有任何想法吗?
谢谢.
我需要在Java中生成一个唯一的32位数.我需要将数字作为Java int返回,这是接口所需的.你能否就此分享一些想法?
该号码将用作MySQL PK,并且多个线程可以同时生成自己的唯一ID.(抱歉决定不使用MySQL增量ID)
我尝试过UUID类,但它生成的数据似乎比我可以使用的更多.
我发现了这个,但不确定它是否有效:
// seems no way to get int
UUID id = UUID.randomUUID();
System.out.println(id);
// not working either?
java.rmi.server.UID uid = new java.rmi.server.UID();
System.out.println(uid.toString());
// the one i am using
SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");
prng.setSeed(System.currentTimeMillis());
int ret = prng.nextInt();
System.out.println(ret);
Run Code Online (Sandbox Code Playgroud)