文档章节

随机生成防猜不重复的16位纯数字序列号【快速且高性能】

letwang
 letwang
发布于 2013/10/16 14:36
字数 375
阅读 6190
收藏 18

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

© 著作权归作者所有

共有 人打赏支持
letwang
粉丝 148
博文 63
码字总数 75344
作品 1
南京
技术主管
加载中

评论(6)

letwang
letwang

引用来自“吾爱”的评论

生成少量的还行。大量数据用php的数组排重,性能真没问题?
哈哈哈 肯定有问题! 上面排重,只是个demo,具体怎么排重,有很多方法,比如入mysql时使用忽略插入等。。
吾爱
吾爱
生成少量的还行。大量数据用php的数组排重,性能真没问题?
letwang
letwang

引用来自“Harryma”的评论

学习了,呵呵

客气!
Harryma
Harryma
学习了,呵呵
letwang
letwang

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

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

因为每组数据,是可以个性化更改来配置的
化蝶自在飞
化蝶自在飞
为何不用range(0,9)呢?
万能 ID 生成器--Node-AnyID

在程序里经常都需要生成一些特定格式的 id ,每种场合的需求都可能有些不一样,虽然写起来代码不复杂,但零零碎碎的东西做多了也挺烦的,于是设计了这个用于 node.js 的万能 ID 生成器。 An...

aleung
2017/08/19
225
0
产生唯一随机码的方法分析

自己写代码产生随机的数字和字母组合,每产生1个去数据库查询该随机码是否已存在,如果已存在,则重新产生,直到不重复为止。 优点:没发现有啥优点。 缺点:产生速度慢,还要查询数据库,当...

好铁
2016/07/04
96
0
如何在高并发分布式系统中生成全局唯一Id

又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上。最近还写了一个发邮件的组件以及性能测试请看 《NET开发邮件发送功能的全面教程(含邮件组件源码)》 ,还...

shezjl
2015/05/22
0
0
纵使有花兼明月何堪无酒亦无人/xukey

xukey base on ukey 支持PHP7 请选择PHP7分支,修复内存泄露的bug Based on the Twitter Snowflake algorithm PHP unique ID generator functions list: string ukeynextid(void); Get the n......

纵使有花兼明月何堪无酒亦无人
2016/05/05
0
0
网络基础知识总结

计算机网络的基础,可以简单的总结为以下条例; Ⅰ.网络层次的划分 为了以便在更大范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联网参考模型”,即著名的OSI(O...

XRedm
2017/07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ std::function 和 std::bind

C++11提供了std::function和std::bind两个工具,用于引用可调用对象。这些可调用对象包括 普通函数,Lambda表达式,类的静态成员函数,非静态成员函数以及仿函数等。引用可调用对象,可以用于...

yepanl
今天
1
0
python:可迭代对象的索引

关于 python的range的用法: 注意是[ 开始,结束)的半开区间,不包括结束 http://www.runoob.com/python/python-func-range.html import collectionsfrom collections import Iterable字符串......

Oh_really
今天
2
0
docker-compose ,docker-stack

1.例子 version: "3"services: php: image: registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5 ports: - "38080:80" networks: - my_php_mysql volum......

chenbaojun
今天
3
0
SQL_Server2000示例数据库NorthWind的分析(转)

SQL_Server2000示例数据库NorthWind的分析 表名:Categories(食品类别表) 表结构: 字段名称 数据类型 长度 允许为空 CategoryID(主键) int 4 否 CategoryName nvarchar 15 否 Description ...

QQZZFT
今天
1
0
laravel 5.5 Session store not set on request.

laravel 5.5 数据存入session,会出现Session store not set on request.错误。查了下laravel 5.5将session放到global middleware中,需要laravel的文件 ./app/Http/Kernel.php中的加上一句:...

MichaelShu
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部