如何创建不可预测的用户ID?

时间:2013-08-27 09:02:03

标签: php mysql facebook algorithm

我希望我网站上的用户能够随时更改用户名,并且可以使用电子邮件或密码登录。

由于Facebook中的类似要求,我还要定义ID。 Facebook在注册时为用户分配一个唯一的号码,并以多种方式使用该号码。

我们至少需要一些不会改变而不是由用户创造的东西;因此,必要时,可以通过该号码识别用户。

Facebook不会将这些数字增加1.就像数据库中的自动增量int值一样。这很好,因为您无法立即估计用户数量,只需逐个递增用户ID就无法浏览系统。

处理这种情况的最佳方法是什么?Facebook如何做到这一点?

有没有通用的算法或技术来做到这一点?

2 个答案:

答案 0 :(得分:2)

您应该将您的ID生成为自动递增的数字。然后,您可以对该数字应用可逆转换,使其看起来,就像它是随机生成的一样。 Integer ID obfuscation techniques接受的答案使用Pearson hashing提供了一个很好的示例。

结果可能是输入数字令人不舒服的大数字。例如,用户ID 13可能会转换为4795368201.如果这对您的用户来说是个问题,您可以使用base64或类似的东西对结果进行编码。

答案 1 :(得分:1)

嗯,这很简单,只使用带有num值的php rand(),并进行循环检查数据库是否包含生成的ID,如果是真的话,那么感谢循环它会生成一个新ID等等,如果它是假的使用此ID注册您的用户。

Facebook正在为其网站上的每个项目使用唯一ID,这意味着用户可以拥有ID,但如果您使用该ID并添加+1,则可能会获得照片或帖子...