当用户在我的系统中添加新项目时,我想为该项目生成一个唯一的非递增伪随机7位代码。创建的项目数将仅为数千(
因为它必须是唯一的,并且没有两个项目具有相同的信息,所以我可以使用哈希,但是它必须是可以与其他人共享的代码-因此是7位数字。
我最初的想法只是循环生成一个随机数,检查它是否尚未使用,如果已使用,请冲洗并重复。考虑到发生碰撞的可能性较低,我认为这是合理的解决方案。
对this question的响应建议生成所有未使用数字的列表,并将其改组。我可能会在数据库中保存一个这样的列表,但是相对而言,我们正在谈论10,000,000个条目。
有谁有更好的方法?
最佳答案
选择一个7位数的主数字A和一个大主数字B,然后
int nth_unique_7_digit_code(int n) {
return (n * B) % A;
}
由此产生的所有唯一代码的计数为A。
如果您想更加“安全”,请执行
pow(some_prime_number, n) % A
,即static int current_code = B;
int get_next_unique_code() {
current_code = (B * current_code) % A;
return current_code;
}
关于random - 如何为实体创建唯一的7位代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2245292/