php生成像qq号码这种的唯一数字id?

WBOY
Libérer: 2016-06-06 20:32:57
original
1593 Les gens l'ont consulté

是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?

回复内容:

是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?

有两种方法可以解决。
1. 如果你只用php而不用数据库的话,那时间戳+随机数是最好的方法,且不重复;
2. 如果需要使用数据库,即你还需要给这个id关联一些其他的数据。那就给MySQL数据库中的表的id一个AUTO_INCREMENT(自增)属性,每次插入一条数据时,id自动+1,然后使用mysql_insert_id()LAST_INSERT_ID()返回这个自增后的id。

1.随机范围大的话,随机数很难重复的
2.OK,也考虑重复的情况,那给数据库表这个随机数字段加索引,时间复杂度为O(LogN)

时间戳是唯一的,时间戳加一个固定的值最后得到的值也是唯一的。最好不要去数据库比对,那样太浪费时间了。

设定一个取号范围,然后全部放入数据库。
每发出一个id就在数据库里面将这个号标记为「已使用」。
发号的时候随机一个没被标记成「已使用」的id,然后返回那个id。

时间戳 + 随机数,就能搞定了

最简单的:用时间戳取uniqid

这个问题已经有现成的解决方法了,使用php uuid扩展就能完美解决这个问题,这个扩展能生成唯一的完全数字签名。。如果你不使用composer请参考https://github.com/lootils/uuid,如果你的项目是基于composer搭建的,那么请参考https://github.com/ramsey/uuid

时间戳 + 随机数

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal