16位纯数字,组合起来是多少个呢?很难一口说出准确数字。
2位纯数字,组合起来是多少个呢?
10*10 = 100个
3位纯数字,组合起来是多少个呢?
10*10*10 = 1000个
因为每个数字都是0-9,一共10个。
以此类推,16位纯数字,一共 10*10*10*10*10*10*10*10*10*10*10*10*10*10*10*10种可能。
虽然数目很大,但是也是有限范围内的,在里面搞随机的话,有限范围内取出一定数目的数字,客观上肯定会重复,只不过是想办法达到避免重复的概率而已!
那么换个思路呢?
如果以时间的维度来计算怎么样?那么时间永远是无限往前跑的,这样就永远不可能重复啦!!!
但是同一时间不同ip客户端生成的,时间也是浮云,那么我们解决不同客户端同一时刻生成也不一样,才是王道!
$begin = microtime(true);$generateNum = 500000;//(默认50万条,我机器只需2秒钟!!!经过5000万测试数据,测试24小时,都OK!)$result = array();$num = 0;while($num < $generateNum){ $result[] = substr(uniqid('', true), 15).substr(microtime(), 2, 8); $num++;}var_dump(microtime(true)-$begin);if($result === array_unique($result)){ echo 'OK!';//数据没有重复,可以使用}else{ echo 'Fuck,Repeat!';//有重复数据,数据不能使用!}//http://my.oschina.net/cart/unset($result);exit();