我正在开发一款涉及车辆的游戏.我有一个名为"车辆"的MySQL表,其中包含有关车辆的数据,包括存储车辆牌照的"板"栏.
现在这里出现了我遇到问题的部分.我需要在创建新车辆之前找到未使用的车牌 - 它应该是一个字母数字8字符随机字符串.我是如何实现这一点的是在Lua中使用while循环,这是我正在编程的语言,用于生成字符串并查询DB以查看它是否被使用.然而,随着车辆数量的增加,我预计现在这种情况会变得更加低效.因此,我决定尝试使用MySQL查询解决此问题.
我需要的查询应该只生成一个8字符的字母数字字符串,该字符串不在表中.我再次想到了生成和检查循环方法,但我并没有将这个问题局限于那个问题,以防万一更有效.我已经能够通过定义一个包含所有允许的字符的字符串并随机地对它进行子字符串来生成字符串,仅此而已.
任何帮助表示赞赏.
为了生成32个字符的令牌以访问我们目前使用的API,我们目前使用:
$token = md5(uniqid(mt_rand(), true));
Run Code Online (Sandbox Code Playgroud)
我已经读过这种方法不是加密安全的,因为它基于系统时钟,这openssl_random_pseudo_bytes
将是一个更好的解决方案,因为它更难预测.
如果是这种情况,等效代码会是什么样的?
我推测这样的事情,但我不知道这是不对的......
$token = md5(openssl_random_pseudo_bytes(32));
Run Code Online (Sandbox Code Playgroud)
我应该传递给函数的长度是多少?
我想创建一个独特的ID但是uniqid()
给出类似的东西'492607b0ee414'
.我想要的是类似于tinyurl给出的东西:'64k8ra'
.越短越好.唯一的要求是它不应该有明显的顺序,它应该看起来比看似随机的数字序列更漂亮.字母比数字更受欢迎,理想情况下不会是混合字母.由于参赛人数不会那么多(最多10000人左右),因此碰撞的风险并不是一个很大的因素.
任何建议赞赏.
我正在使用PHP和MySQL编写脚本,我希望得到一个唯一的id(由字符串组成:大写字母和带数字的小写字母),如:gHYtUUi5b
.我发现PHP中的许多函数可以生成这样的数字,但我担心如何确保id是唯一的!
更新:uuid很长,我的意思是这样的id:(P5Dc)一个11个字母数字字符.