Dam*_*isa 10 random hash uniqueidentifier
当用户在我的系统中添加新项目时,我想为该项目生成唯一的非递增伪随机7位数代码.创建的项目数量仅为数千(<10,000).
因为它需要是唯一的,并且没有两个项目具有相同的信息,我可以使用哈希,但它需要是一个他们可以与其他人共享的代码 - 因此是7位数.
我原来的想法只是循环生成一个随机数,检查它是否已经使用过,如果是,则冲洗并重复.鉴于碰撞可能性低,我认为这是一个合理的解决方案.
回应这个问题,建议生成所有未使用的号码清单和洗牌它们.我可能会在数据库中保留这样的列表,但是我们正在谈论10,000,000个条目,这些条目相对较少.
有没有人有更好的方法?
ken*_*ytm 15
选择一个7位素数A和一个大素数B,和
int nth_unique_7_digit_code(int n) {
return (n * B) % A;
}
Run Code Online (Sandbox Code Playgroud)
所有唯一代码这样产生的数据将是一个.
如果你想更"安全",这样做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;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用递增ID,然后在某个固定键上对其进行异或.
const int XORCode = 12345;
private int Encode(int id)
{
return id^XORCode;
}
private int Decode(int code)
{
return code^XORCode;
}
Run Code Online (Sandbox Code Playgroud)