php一个简单的uuid的实现

     uuid:说白就是保证不管任何时间、设备上的结果都不会重复。

     在网上看了几个uuid的实现,几乎上都是基于时间戳,php自带的uniqid()函数也是基于时间戳的。

     我的实现思路如下:

     1. 首先用时间保证以不会生成与之前重复的时间的。我精确毫秒,保证时间上几乎唯一。

     2. 保证在多态设备上唯一。

           我在其中加入时区信息。保证不同时区内容,不会重复。(其实,最后想想这个对于我现在使用不到的。除非你的服务器部署在同时区并且需要数据同步。并且我还加入了服务器IP地址信息,IP地址已经包含区域信息了。)

  我加入IP信息为了保证信息在不同机器是不同的。

    3. 在剩余的位数加上,保证同一台设备不会出现随机数。

      我会将以上的所有内容转换十六进制的。

    最后格式: timestamp+时区标志+时区+服务器IP+毫秒+随机数若干

/*********
* median :随机位的个数
**********/
function my_uuid($<span style="line-height: 22.3999996185303px; font-family: sans-serif;">median </span> = 3)
{
        $dex = "0123456789abcdef";
        $mt = microtime();
        list($msc, $ts) = explode(" ", $mt);
        $uuid = dechex($ts);<span style="white-space:pre">	</span> //时间戳精确到秒

        $tm = date("Z");
        $sign = 0;<span style="white-space:pre">	</span>//时区标志
        if($tm < 0) {
            $sign = 1;
            $tm = abs($tm);
        }
        $tm = intval($tm/3600);<span style="white-space:pre">	</span>//计算时区,
        $uuid .= $sign."".$dex[$tm];

        $ip = $_SERVER["SERVER_ADDR"];<span style="white-space:pre">	</span>//ip地址信息
        $ip = explode(".", $ip);
        $ip = array_map(function($v) {
            $dex = "0123456789abcdef";
            if(isset($v)) {
                $idx = intval($v);
                return "{$dex[($idx>>4)&0xf]}{$dex[$idx&0xf]}";
            } else {return "00";}

        }, $ip);

        foreach($ip as $v) {
            $uuid .= $v;
        }

        $msc = ltrim($msc, "0."); <span style="white-space:pre">	</span>//毫秒
        $uuid .= dechex($msc);

        for($i = 0; $i < $median; $i++) {<span style="white-space:pre">	</span>//随机数
            $uuid  .= $dex[rand()&0xf];
        }

        return $uuid;
 }

来自:http://blog.csdn.net/reage11

http://www.rhttp.cn

时间: 2024-11-10 07:02:21

php一个简单的uuid的实现的相关文章

一个简单的java web 项目

本文实现一个简单的 java web 项目,包括以下5个功能: 1. 登录 用户默认主页index.jsp , 可选择登录功能,输入用户名和密码,若登录成功,则进入产品管理总页面main.jsp.若不成功仍退回index.jsp 2. 注册 用户默认主页index.jsp ,  可选择注册功能 ,若注册,则进入 register.jsp 3. 管理产品(增加,删除,查看) 登录成功后,进入产品管理总页面main.jsp.第一次进入main.jsp,默认显示所有产品列表.在此页面上更实现 查询某个

jfinal初接触,一个简单的文件上传例子

写了个上传的小例子. 从jfinal官网下载jfinal-1.8_demo_for_jsp.zip 然后下载jfinal-1.8-lib.zip 按要求删掉该删除的,引入一些包,之后的项目结构: DemoConfig.java中配置路由,只留下了根路径: /** * 配置路由 */ public void configRoute(Routes me) { me.add("/", CommonController.class); //me.add("/blog", B

创建一个简单的 MDM 服务器(2)

四.实现 server URL 接下来以推送最简单的锁屏命令为例,演示如何实现从服务器推送完整的 MDM 消息给注册设备. 首先实现一个简单的Jsp 页面.页面中是一个 html 表单,在<select>标签中我们会列出所有注册设备的 UUID(当然列出设备名称会更好),当你选择一个UUID,点击submit 按钮,服务器会向这个设备推送锁屏命令. servlet lock 来负责处理这个表单: Stringudid=request.getParameter("select1&quo

搭建一个简单的DHCP服务器

实验环境: 系统:RHEL6.4 一.给DHCP服务器配置固定IP [[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=....... TYPE=Ethernet UUID=...... ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.50.253 NETMASK=255.255.255.0 [[em

新秀学习Hibernate——一个简单的例子

一个.Hibernate开发. 上篇博客已经为大家介绍了持久层框架的发展流程,持久层框架的种类. 为了可以使用Hibernate高速上手,我们先解说一个简单的Hibernate应用实例hibernate_first. 二.开发流程. 1.首先在MyEclipce中新建一个hibernate_first的项目,然后新建后的项目文件夹为: 2.配置Hibernate环境. 3.编写持久化类User.java package com.bjpowernode.hibernate; import java

利用SpringBoot+Logback手写一个简单的链路追踪

目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简单的链路追踪,下面详细介绍下. 一.实现原理 Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志. MDC(Mapped Diagnostic Context,映射调试上下文)是log4j和logback提供的一种

一个简单的主机管理模拟程序

最近写的一个小练习,主要是把前面学的东西整合一下.写了一个简单的主机管理界面,主要是练习以下知识点: Session和Cookie进行登录验证(装饰器) 数据库的基本操作 (单表,1对多,多对多) Form的简单使用实现验证 Bootstrap模板写个简单界面 自定义分页 信号,中间件,CSRF,模板语言,JavaScript,AJAX等等 界面比较low,毕竟不是专业的. 附件里面是Django的源代码,3个文件放在一起winrar解压就可以打开

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)

[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe. 假设 Visual Studio 2005 的安装路径为“D:\Program

完成一个简单的时间片轮转多道程序内核代码

王康 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 分别是1 存储程序计算机工作模型,cpu执行程序的基础流程: 2 函数调用堆栈:各种寄存器和存储主要是为了指令的传取值,通过eip,esp,eax,ebp和程序内存的分区,搭配push pop call return leave等一系列指令完成函数调用操作. 3 中断:多道批程序! 在复习一下上一讲的几个重要指令