使用PHP uniqid函数生成唯一ID

生成唯一ID的应用场景非常普遍,如临时缓存文件名称,临时变量,临时安全码等,uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID。由于生成唯一ID与微秒时间关联,因此ID的唯一性非常可靠。

生成的唯一ID默认返回的字符串有 13 个字符串长,如果不定义唯一ID的前缀,最多可返回23个字符串长,如果再结合md5()函数,生成的唯一ID可靠性将更高,这种生成的ID比随机性的ID 最大优点在于可实现排序,特别是一些需要存储在数据库中的值。

一,函数原型

string uniqid ( [string prefix [, bool more_entropy]] )

可定义唯一ID的前缀与长度

二,版本兼容

PHP 3, PHP 4, PHP 5

三,函数基础用法与实例

1,生成一个唯一ID

<?php 
echo uniqid(); 
?> 

2,结合md5()函数生成一个唯一ID

<?php 
echo md5(uniqid()); 
?> 

输出:dfbc5c8c6438de075da28b3c8a413fd0

3,生成多个唯一ID,由于是以微秒计

<?php 
echo uniqid(); 
echo uniqid(); 
echo uniqid(); 
?> 

输出:

4bfd0e375396b
4bfd0e3753981
4bfd0e3753983

由生成的结果来看,唯一ID之间具有可排序性的。
使用uniqid()函数生成唯一ID既能用于生成临时性ID也能用于生成永久性唯一ID(存储数据库)。

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

下面小编给大家整理了三种解决办法,具体内容如下:

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

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

2、php内置函数uniqid()

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

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

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

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;
  }
}

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

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

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;
 }

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
YII的models中的rules部分是一些表单的验证规则,对于表单验证十分有用,在相应的视图(views)里面添加了表单,在表单被提交之前程序都会自动先来这里面的规则里验证,只有通过对其有效的限制规则后才能被提交,可以很有效地保证表单安全和信息的有效性。还是给大家具体说明一下: 以下是视图(views)部分的简单代码: ?php $form=$this-beginWidget('CActiveForm', array( 'id'='tag-form', 'enableAjaxValidation'=fa
关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢? 当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随机数是最好的方法,且不重复; 2. 如果需要使用数据库,即你还需要给这个id关联一些其他的数据。那就给MySQL数据库中的表的id一个AUTO_INCREMENT(自增)属性,每次插入一条数据时,id自动+1,然后使用mysql_insert_id()或LAST_INSERT_I

PHP的运行机制与原理(底层) - 2015-11-19 14:11:35

说到php的运行机制还要先给大家介绍php的模块,PHP总共有三个模块:内核、Zend引擎、以及扩展层;PHP内核用来处理请求、文件流、错误处理等相关操作;Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要mysql扩展来连接MySQL数据库;当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还; 最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终
一、下载Eclipse的PHP插件 百度搜索phpeclipse,看到某条结果是带有SourceForge.net字样的,点进去,找到Download按钮,点击之后,等待5秒就会开始下载了。 二、安装Eclipse的PHP插件 插件下载完成之后,解压,然后把site.xml删掉(大部分插件不用删这个文件,但是PHPEclipse必须删),最后把整个文件夹复制到Eclipse的dropins文件夹里面,重启Eclipse即可。 三、在Eclipse新建PHP工程和新建PHP文件 在插件安装成功的前提下,新建
在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、js等,而不必从你的服务器读取,这样在一定程度上加快了网站的打开速度,又可以节约一下你的服务器流量。 具体文字说明不给大家多说了,下面通过代码实例给大家讲解。 比如 link rel="stylesheet" type="text/css" href=#> 中的href和src加上版
在php中设置session有很多方面包有给session设置值或直接设置过期、失效和有效期,下面小编来给大家给各位朋友介绍怎么使用。 我们先来看看在php.ini中session怎么设置,打开 php.ini,查找Session设置部分中以下一项,代码如下: session.save_path = "N;/path" session.save_path = "C:/Temp" #此处以你自己设定的路径为准 这项设置提供给我们可以给session存放目录进行多级散列,其中“N”表示要设置的目录级数,后面的
一、制作思路 由于注册的时候常常会用到注册码来防止机器恶意注册,这里我发表一个产生png图片验证码的基本图像,简单的思路分析: 1、产生一张png的图片 2、为图片设置背景色 3、设置字体颜色和样式 4、产生4位数的随机的验证码 5、把产生的每个字符调整旋转角度和位置画到png图片上 6、加入噪点和干扰线防止注册机器分析原图片来恶意注册 7、输出图片 8、释放图片所占内存 二、实现方法 authcode.php文件 ?php session_start (); header ( 'Content-type
声明类成员或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。 为了兼容PHP4,如果没有指定“可见性”,属性和方法默认为public。 由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。 静态属性不可以由对象通过-操作符来访问。 用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。 就像其它所有的PHP静态变量一样,静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。 所以你可以把静态属性初始化为整型或数
在微信公众服务号开发需求中经常有获取用户位置信息的功能,通过用户的位置信息,可以做一些地图导航,以及基于LBS的营销活动。 下面通过给大家介绍微信服务号获取用户位置信息的原理与步骤。 原理 1. 位置信息获取流程 2. 位置信息报文 xmlToUserName![CDATA[gh_public_member_account]]/ToUserNameFromUserName![CDATA[oNEGGwGfl8f5xMEqVHToL63LDL40]]/FromUserNameCreateTime1444035

php实现的递归提成方案实例 - 2015-11-15 17:11:44

本文实例讲述了php实现的递归提成方案。分享给大家供大家参考,具体如下: 最近CRM项目中用到了递归提成的方案,分析如下: SQL语句如下: CREATE TABLE `crm_proxy_bonux_rule` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '超过的部份提成规则ID',`bouns_rule_name` varchar(20) NOT NULL COMMENT '规则名称,如D套餐0-20范围',`rid` bigint(20) DEFAUL