当用户在我的系统中添加新项目时,我想为该项目生成一个唯一的非递增伪随机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/

10-10 12:42