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

WBOY
풀어 주다: 2016-06-06 20:32:57
원래의
1598명이 탐색했습니다.

是不是需要使用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

时间戳 + 随机数

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿