随机生成防猜不重复的16位纯数字序列号【快速且高性能】
博客专区 > letwang 的博客 > 博客详情
随机生成防猜不重复的16位纯数字序列号【快速且高性能】
letwang 发表于5年前
随机生成防猜不重复的16位纯数字序列号【快速且高性能】
  • 发表于 5年前
  • 阅读 5748
  • 收藏 17
  • 点赞 3
  • 评论 6

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

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

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 138
博文 67
码字总数 76298
评论 (6)
化蝶自在飞
为何不用range(0,9)呢?
letwang

引用来自“化蝶自在飞”的评论

为何不用range(0,9)呢?

因为每组数据,是可以个性化更改来配置的
Harryma
学习了,呵呵
letwang

引用来自“Harryma”的评论

学习了,呵呵

客气!
吾爱
生成少量的还行。大量数据用php的数组排重,性能真没问题?
letwang

引用来自“吾爱”的评论

生成少量的还行。大量数据用php的数组排重,性能真没问题?
哈哈哈 肯定有问题! 上面排重,只是个demo,具体怎么排重,有很多方法,比如入mysql时使用忽略插入等。。
×
letwang
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: