在搜索 SO 和其他网站后,我未能找到关于 Facebook、Twitter 和 Pinterest 如何生成其 ID 的确凿证据。需要这样做的原因是为了避免 url 冲突。移动到一个完全不同的 ID 将防止这种情况发生,因为不会有千万亿条记录。
- Facebook.com/username/posts/362095193814294
- Pinterest.com/pin/62487513549577588
- Twitter.com/#!/username/status/17994686627061761
如果您以 Pinterest 为例,前几位数字与用户 ID 相关,后 6 位左右的数字表示可能是自动递增的保存 ID。
要创建一个类似但不是唯一的 ID,我可以使用:base_convert(user_id.save_id, 16, 10)
。这里的问题是它不是唯一的,例如:base_convert(15.211, 16, 10)
vs. base_convert(152.11, 16, 10)
。这两个是一样的。简单地合并两组唯一的数字仍然会产生重复的结果。将 uniqid()
加入混合中将基本上修复重复项,但这似乎不是一个好习惯。
更新:Twitter 似乎使用了这个:https://github.com/twitter/snowflake
对生成上述示例的唯一 ID 有何建议?
最佳答案
假设您的 ID 都是数字。用字符 A
分隔它们(因为它肯定不会出现在原始 ID 中)并进行从 base-11 到 base-10 的基本转换。
对于您所做的示例,我们现在得到了不同的结果:
echo base_convert("15A211", 11, 10); //247820
echo base_convert("152A11", 11, 10); //238140
关于php - 如何生成唯一的仅整数 ID,如 Facebook Twitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301835/