Heim  >  Artikel  >  Backend-Entwicklung  >  怎么生成唯一数字

怎么生成唯一数字

WBOY
WBOYOriginal
2016-06-23 13:55:152982Durchsuche

比方说时间戳已经生成了 然后再怎么处理保证唯一。。


回复讨论(解决方案)

time().mt_rand(100000,99999).mt_rand(100000,999999)

没法保证绝对唯一! 

时间戳 在秒间是唯一的
php 提供的最小时间分辨率为 微秒

微秒+???

function uninum(){	list($sec, $usec) = explode(' ',microtime());	return str_replace('.','',sprintf('%f',$sec + $usec).mt_rand(100000,999999));}echo uninum();

时间戳 在秒间是唯一的
php 提供的最小时间分辨率为 微秒

 哈哈 微秒可以有

time()

单击无法保证唯一

时间+数据库唯一数字??>唯一数字

用微秒的函数 在连上一个随机数什么的  就已经有很好的唯一性了

用时间戳+随机

比如时间戳是445656623323
后面再加上5位随机数

主要基本能保证不重复,但不能保证绝对不重复,不过要是重复了,概率相当于买大乐透,2元一次,连中十多二十次呢。

如果你觉得5位随机数不够,可以增加到20位,30位,如果你的服务器能撑得住的话,概率相当于明天看到外星人了。


当然,如果你还不放心的话,还有两个办法,时间戳+IP地址组合+两三位随机数,这个就绝对不会重复了

另一个办法就是时间戳+随机数,写进数据库前对照一下看看有没有一样的,如果有,重新生成随机数。

用时间戳+随机

比如时间戳是445656623323
后面再加上5位随机数

主要基本能保证不重复,但不能保证绝对不重复,不过要是重复了,概率相当于买大乐透,2元一次,连中十多二十次呢。

如果你觉得5位随机数不够,可以增加到20位,30位,如果你的服务器能撑得住的话,概率相当于明天看到外星人了。


当然,如果你还不放心的话,还有两个办法,时间戳+IP地址组合+两三位随机数,这个就绝对不会重复了

另一个办法就是时间戳+随机数,写进数据库前对照一下看看有没有一样的,如果有,重新生成随机数。



最新版本的 PHP date新增了u,可以显示毫秒。
其实最安全的唯一数肯定是根据时间来的。

1)microtime(true)
2)  uniqid()
3) 根据用户IP+浏览器标示头+时间戳

时间戳+md5(字符串)

也可以用mysql表的自增id作为唯一数

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn