我正在尝试创建一个简短的 5 或 6 个字符的邀请码,该邀请码将在我的网站上创建“组”时生成。组信息存储在组表中。希望加入群组的用户必须有一个邀请码——他们不需要知道其他任何信息。
显然,我需要邀请码是唯一的,并且我希望在没有双重检查的情况下生成唯一的字符串,但是找出代码很困难。我一直在阅读数十个 SO 问题和答案。这就是我想出的:
当将组信息(例如名称)插入组表时,该行自然会被赋予一个唯一的、自动递增的 id。
1)抓住那个ID
2) 将其添加到 1234
3) 将团队名称从 base36 转换为 base10 后,只需将值放在一起即可。“纽约洋基队”是 base10(3994055806027582482648)[1263399405580602758248264820130221060827])
4) 转换为基数 36
5)将代码插入数据库
这保证对每个组都是独一无二的,对吧?碰撞几率为零?我这样说是因为它根本不是随机的。我从一些独特的东西开始,并保持它的独特性,从不引入随机数据。
我有几个问题,因为组名是可重复的,我如何在创建/插入时获取行 ID?这行不通,但这是我所在的位置:
$query = "SELECT id FROM groups WHERE gname = :gname";
...
$uid = $result + '1234';
$hex = md5(":gname NOW()" . uniqid("$uid", true));
base_convert($hex, 10, 36);
intval($str, 36);
$query = "INSERT...";
独特、简短但不可预测,没有所有正确的部分,用户无法使用。