我需要为我的用例生成 UID(字母数字),但只要我们希望 UID 是随机但可管理的,最多应该是 7 个字符,例如PNR (CYB6KL)。现在,如果我没记错的话,我可以生成一个很小的随机 UID,但唯一性可能会因为冲突(生日悖论)而受损,因此对于 32 位,50% 的冲突概率约为 77k UID 代。
所以本质上,我需要一种生成 UID 的方法:
- 小(最多 7 个字符)
- 随机的
- 独特的
- 不需要查找以前的存在。
我将将此 UID 存储在数据库列中,并且 UID 必须是唯一的。它不会是表的主键,现在是自动生成的 ID。
我正在考虑一些类似的东西,但我不确定独特性。
BigInteger big = new BigInteger(32, new SecureRandom());
return big.toString(32).toUpperCase();
非常感谢任何可能对此有所帮助的想法。世代必须是唯一的。
提前致谢。