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


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

php

ハルヒ凉宫 8 years, 10 months ago

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

软绵绵小狗子 answered 8 years, 10 months ago

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

被窝中的幻想体 answered 8 years, 10 months ago

最简单的:用时间戳取uniqid

铃科Ω百合子 answered 8 years, 10 months ago

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

自宅警备员 answered 8 years, 10 months ago

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

jgames answered 8 years, 10 months ago

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

叫老夫如何是好 answered 8 years, 10 months ago

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

LONELY? answered 8 years, 10 months ago

Your Answer