多语言展示
当前在线:1372今日阅读:126今日分享:42

如何生成一个全局唯一的id

在程序开发中,我们在很多时候会有这样的一个需求:生成一个全局唯一ID。比如购物系统中,生成一个唯一的订单ID,我们在程序里怎么保证生成的ID是一个唯一的ID呢?下面我们以PHP为例,一起来看下如何生成。
方法/步骤
1

在php中,我们可以用php自带的uniqid函数来生成一个唯一的ID,该函数是基于当前时间来生成的,以微秒来计算,代码如图,我们循环生成10个ID,看是否唯一。

2

运行下页面,得到结果如图

3

uniqid函数还接受二个参数,第一个参数是一个前缀符,我们可以添加一个符号在每个ID前面。第二个参数是指示是否生成更长的字符。//function uniqid ($prefix = '', $more_entropy = false) {}修改下代码,传入这二个参数,如图。

4

再次运行,得到结果

5

由于uniqid函数是基于当前时间来生成的,当你系统的并发量很大时,那是有可能在同一个微秒触发生成二个ID的可能性,所以这个方法是有可能生成二个相同的ID的,(虽然这个概率很低很低)基于上面说的,我们可以添加一个前缀,因为同一个用户在同一微秒要操作二次生成ID的机会是微乎其微的,所以这个前缀我们可以用用户ID来做,如果用户没登陆时,就用一个四位数的随机数来代替,这样保证唯一性就安全很多了。

6

再次运行页面,我们可以得到这个更多位数的安全唯一ID,因为前缀用的是用户ID,该ID是数据的自增长主键列,肯定是唯一的。

7

如果上面的生成方法都不满足你系统的要求,你要严格保证每个ID都是唯一性的,绝对不能有重复的,那么我们也是有办法的。那就是先用uniqid函数生成一批ID,保存在数据库里,生成完后,再通过sql语句把数据库相同的ID去掉(如果有的话)。那么当我们需要唯一ID时,就从数据库里取一个出来,取出后,标志该条数据为已取,这样则能绝对保证ID是唯一的了。

推荐信息