文档章节

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

letwang
 letwang
发布于 2013/10/16 14:36
字数 375
阅读 6406
收藏 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
粉丝 169
博文 54
码字总数 81441
作品 1
南京
技术主管
私信 提问
加载中

评论(5)

吾爱
吾爱
生成少量的还行。大量数据用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
网络基础知识总结

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

XRedm
2017/07/26
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

没有更多内容

加载失败,请刷新页面

加载更多

isEmpty和null的区别

isEmpty和null的区别: 1.一个是对象为空(IsNull),一个是值为空(IsEmpty) 2.IsNull指任务类型变量是否为空包括对象类型的变量。 IsNull函数: 功能:返回Boolean的值,指明表达是否不包...

DemonsI
10分钟前
0
0
Centos7 安装mysql与php

https://blog.csdn.net/qq_36431213/article/details/79576025 官网下载安装mysql-server 依次使用下面三个命令安装 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.r......

Yao--靠自己
20分钟前
0
0
详解如何实现一个简单的 vuex

首先我们需要知道为何要使用 vuex。父子组件通信用 prop 和自定义事件可以搞定,简单的非父子组件通信用 bus(一个空的 Vue 实例)。那么使用 vuex 就是为了解决复杂的非父子组件通信。 仅仅...

嫣然丫丫丫
25分钟前
1
0
算法——RangePartitioner实现之reservoirSample

简介 reservoir的作用是:**在不知道文件总行数的情况下,如何从文件中随机的抽取一行?**即是说如果最后发现文字档共有N行,则每一行被抽取的概率均为1/N? 我们可以:定义取出的行号为cho...

freeli
27分钟前
1
0
Python安装及netcdf数据读写

一、在CentOS7系统上安装Python3 在anaconda官网下载(http://https://www.anaconda.com/download/#linux)(Anaconda指的是一个开源的Python发行版本,是Python的包管理器和环境管理器) 下...

voole
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部