PHP生成唯一ID的三种方法

1、md5(time() . mt_rand(1,1000000));

  这种方法有一定的概率会出现重复

2、php内置函数uniqid()

  uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.

  w3school参考手册有一句话:"由于基于系统时间,通过该函数生成的 ID 不是最佳的。如需生成绝对唯一的 ID,请使用 md5() 函数"。

下面方法返回结果类似:5DDB650F-4389-F4A9-A100-501EF1348872

com_create_guid()是php自带的生成唯一id方法,php5之后貌似已经没有了。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15


function uuid() {

if (function_exists ( ‘com_create_guid‘ )) {

return com_create_guid ();

} else {

mt_srand ( ( double ) microtime () * 10000 ); //optional for php 4.2.0 and up.随便数播种,

4.2.0以后不需要了。

$charid = strtoupper ( md5 ( uniqid ( rand (), true ) ) ); //根据当前时间(微秒计)生成唯一id.

$hyphen = chr ( 45 ); // "-"

$uuid = ‘‘ . //chr(123)// "{"

substr ( $charid, 0, 8 ) . $hyphen . substr ( $charid, 8, 4 ) . $hyphen . substr ( $charid, 12, 4 ) .

$hyphen . substr ( $charid, 16, 4 ) . $hyphen . substr ( $charid, 20, 12 );

//.chr(125);// "}"

return $uuid;

}

}

3、官方uniqid()参考手册有用户提供的方法,结果类似:{E2DFFFB3-571E-6CFC-4B5C-9FEDAAF2EFD7}.


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24


public function create_guid($namespace = ‘‘) {

static $guid = ‘‘;

$uid = uniqid("", true);

$data = $namespace;

$data .= $_SERVER[‘REQUEST_TIME‘];

$data .= $_SERVER[‘HTTP_USER_AGENT‘];

$data .= $_SERVER[‘LOCAL_ADDR‘];

$data .= $_SERVER[‘LOCAL_PORT‘];

$data .= $_SERVER[‘REMOTE_ADDR‘];

$data .= $_SERVER[‘REMOTE_PORT‘];

$hash = strtoupper(hash(‘ripemd128‘, $uid . $guid . md5($data)));

$guid = ‘{‘ .

substr($hash, 0, 8) .

‘-‘ .

substr($hash, 8, 4) .

‘-‘ .

substr($hash, 12, 4) .

‘-‘ .

substr($hash, 16, 4) .

‘-‘ .

substr($hash, 20, 12) .

‘}‘;

return $guid;

}

时间: 2025-01-02 15:41:53

PHP生成唯一ID的三种方法的相关文章

php 生成唯一id的几种解决方法

网上查了下,有很多的方法 1.md5(time() . mt_rand(1,1000000)); 这种方法有一定的概率会出现重复 2.php内置函数uniqid() uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. w3school参考手册有一句话:"由于基于系统时间,通过该函数生成的 ID 不是最佳的.如需生成绝对唯一的 ID,请使用 md5() 函数". 下面方法返回结果类似:5DDB650F-4389-F4A9-A100-501EF1348872 functi

游戏服务器生成全局唯一ID的几种方法

在服务器系统开发时,为了适应数据大并发的请求,我们往往需要对数据进行异步存储,特别是在做分布式系统时,这个时候就不能等待插入数据库返回了取自动id了,而是需要在插入数据库之前生成一个全局的唯一id,使用全局的唯一id,在游戏服务器中,全局唯一的id可以用于将来合服方便,不会出现键冲突.也可以将来在业务增长的情况下,实现分库分表,比如某一个用户的物品要放在同一个分片内,而这个分片段可能是根据用户id的范围值来确定的,比如用户id大于1000小于100000的用户在一个分片内.目前常用的有以下几种:

MySQL给字段唯一索引的三种方法

建表时添加 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `stu_id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`stu_id`), UNIQUE KEY `UK_student_name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET

PHP生成唯一ID的方法

PHP自带生成唯一id的函数:uniqid() 它是基于当前时间微秒数的 用法如下: echo uniqid(); //13位的字符串 echo uniqid("php_"); //当然你可以加上前缀 echo uniqid("php_", TRUE); //如果第二个参数more_entropy为true则生成23位字符串 但是它生成的标识有可能不是唯一的,所以很多人会: //这是第一种简单的方法,当然用sha1()函数也可以. echo md5(uniqid()

php生成随机数的三种方法

php生成随机数的三种方法 如何用php生成1-10之间的不重复随机数? 例1,使用shuffle函数生成随机数. <?php$arr=range(1,10);shuffle($arr);foreach($arr as $values){  echo $values." ";}?> 例2,使用array_unique函数生成随机数. <?php$arr=array();while(count($arr)<10){  $arr[]=rand(1,10);  $ar

javascript生成对象的三种方法

/** js生成对象的三种方法*/ // 1.通过new Object,然后添加属性 示例如下: var people1 = new Object(); people1.name = 'xiaohailong01'; people1.age = 31; alert("name:" + people1.name + ", age:" + people1.age); // 2.直接接收json数据生成 var people2 = { name : 'xiaohailon

Mybatis+Mysql插入数据库返回自增主键id值的三种方法

一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法:插入一条数据,只插入不为null的字段,不会影响有默认值的字段支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)优先使用传入的参数值,参数值空时,才会使用序列.UUID,自动增长 controller的实际应用:使用方法id会直接将映射到参数的实体上使用时直接使用

三种方法,让WPF项目生成单文件

原文:三种方法,让WPF项目生成单文件 在使用WPF写一些小工具时,往往需要将多个DLL文件嵌入到EXE文件里,生成单文件.这里介绍三种方案: 把DLL文件作为嵌入资源 使用Costura.Fody 使用.NET Reactor. 一.把DLL文件转换为嵌入资源 第一步,在项目中新建Resources文件夹,把需要的dll文件拷贝到该目录中(可以是多个dll文件),然后修改每个文件的属性,将生成操作改为嵌入的资源,例如: 拷贝dll文件 修改生成操作 第二步,修改App.xaml.cs文件,添加

CSS实现导航条Tab切换的三种方法

前面的话 ??导航条Tab在页面中非常常见,本文说详细介绍CSS实现导航条Tab的三种方法 布局 ??根据上图所示,先规定几个定义,上图的模块整体叫做导航,由导航标题和导航内容组成.要实现上图所示的布局效果,有两种布局方法:语义布局和视觉布局 [语义布局] ??从语义布局的角度来看,每一个导航标题和其对应的导航内容应该是一个整体 <style> body,p{margin: 0;} h2{margin: 0;font-size:100%;} ul{margin: 0;padding: 0;li