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();