如何使用Java生成5/6位数的字母数字唯一userId,从而减少与10个lac值冲突的可能性?我不想每次都向DB拨打电话,以便检查那里是否已存在该ID。
答案 0 :(得分:1)
如果您的用户不提供任何其他信息(例如真实姓名,电子邮件地址......),您将不得不尝试使用纯随机字符串作为用户名。生成随机字符串的一个选项是RandomStringGenerator的Apache Commons Text。
import org.apache.commons.text.RandomStringGenerator;
...
RandomStringGenerator randomStringGenerator = new RandomStringGenerator.Builder()
.filteredBy(c -> Character.isLetterOrDigit(c) && c <= 122)
.build();
String username = RandomStringGenerator.generate(6)
此代码将生成类似
的用户名3gmNQJ
Hz4DXy
c6X99p
FZJ5jQ
twKgZG
7ukgAY
Lq9qgB
...
但是,您的实际逻辑应该准备好处理用户名之间的冲突。一个6字符长的随机字符串不太安全,从长远来看不会产生任何冲突。
更安全的替代方案是UUIDs,但是如果有人在登录过程中必须输入它们,它们会更长并且不是非常用户友好。
答案 1 :(得分:0)
您可以生成整个实体的哈希码。 基于您选择的散列算法(例如SHA1),碰撞非常罕见。