创建唯一的随机代码-PHP/MySQL

创建唯一的随机代码-PHP/MySQL,php,unique,Php,Unique,我必须为数据库中的每个“公司”创建唯一的代码 我认为这是可能的唯一方法是使用rand()创建一个随机数,然后检查数据库中该“公司”是否存在该数字,如果它确实存在 我的问题是:有没有更好的方法来做到这一点-一个更有效的方法。好像我正在创建10000个代码,而DB中已经有500000个代码,它将越来越慢 关于更好的方法有什么想法或建议吗 编辑: 对不起,也许我能解释得更清楚些。不会同时生成所有代码,可以在任何时候每天/每月/每年创建一次 此外,我需要能够定义代码的字符,例如,字母数字或仅数字我建议您

我必须为数据库中的每个“公司”创建唯一的代码

我认为这是可能的唯一方法是使用
rand()
创建一个随机数,然后检查数据库中该“公司”是否存在该数字,如果它确实存在

我的问题是:有没有更好的方法来做到这一点-一个更有效的方法。好像我正在创建10000个代码,而DB中已经有500000个代码,它将越来越慢

关于更好的方法有什么想法或建议吗

编辑:

对不起,也许我能解释得更清楚些。不会同时生成所有代码,可以在任何时候每天/每月/每年创建一次

此外,我需要能够定义代码的字符,例如,字母数字或仅数字

我建议您使用“通用唯一标识符”:为每个公司生成随机代码。通过这种方式,您可以避免检查数据库中的重复项:

任何人都可以创建UUID,并使用它来识别具有 对同一标识符永远不会出现的合理信心 由任何人无意中创建以识别其他内容。 因此,使用UUID标记的信息可以在以后合并到 无需解决标识符(ID)冲突的单个数据库


在PHP中,您可以使用函数uniqid来实现此目的:

如果代码只是整数,则使用autoincrement或获取当前最大值并开始递增它

MySQL的UUID函数应该会有所帮助


插入表(col1,col2)值(UUID(),“someValue”)

请参阅,希望如此。它必须是代码吗?你能在mysql中使用自动增量吗?如果没有,您可以尝试一个具有足够多数字的随机数(例如,某个数字太大,需要很长时间才能出现问题,从而减慢系统速度)第三种方法是将随机数与随机选取的字符相结合,以增加可能性,减少减慢系统速度的机会。这不是唯一的方法。另一个问题是只生成随机数。两种答案都非常不同。使用Uuid是一个很好的建议,但请记住PHP的函数
uniqid()
不会生成真正的Uuid,而是基于微时间生成一个值,可能空间更小(Uuid有128位)。是的,我知道uniqid()不会生成真正的Uuid。还有其他几种实现,如此PECL包: