php中生成uuid的方法

Generate name based md5 UUID (version 3)

  1. /**
  2. * Generate name based md5 UUID (version 3).
  3. * @example '7e57d004-2b97-0e7a-b45f-5387367791cd'
  4. */
  5. public function uuid()
  6. {
  7. // fix for compatibility with 32bit architecture; seed range restricted to 62bit
  8. $seed = mt_rand(0, 2147483647) . '#' . mt_rand(0, 2147483647);
  9.  
  10. // Hash the seed and convert to a byte array
  11. $val = md5($seed, true);
  12. $byte = array_values(unpack('C16', $val));
  13.  
  14. // extract fields from byte array
  15. $tLo = ($byte[0] << 24) | ($byte[1] << 16) | ($byte[2] << 8) | $byte[3];
  16. $tMi = ($byte[4] << 8) | $byte[5];
  17. $tHi = ($byte[6] << 8) | $byte[7];
  18. $csLo = $byte[9];
  19. $csHi = $byte[8] & 0x3f | (1 << 7);
  20.  
  21. // correct byte order for big edian architecture
  22. if (pack('L', 0x6162797A) == pack('N', 0x6162797A)) {
  23. $tLo = (($tLo & 0x000000ff) << 24) | (($tLo & 0x0000ff00) << 8)
  24. | (($tLo & 0x00ff0000) >> 8) | (($tLo & 0xff000000) >> 24);
  25. $tMi = (($tMi & 0x00ff) << 8) | (($tMi & 0xff00) >> 8);
  26. $tHi = (($tHi & 0x00ff) << 8) | (($tHi & 0xff00) >> 8);
  27. }
  28.  
  29. // apply version number
  30. $tHi &= 0x0fff;
  31. $tHi |= (3 << 12);
  32.  
  33. // cast to string
  34. $uuid = sprintf(
  35. '%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x',
  36. $tLo,
  37. $tMi,
  38. $tHi,
  39. $csHi,
  40. $csLo,
  41. $byte[10],
  42. $byte[11],
  43. $byte[12],
  44. $byte[13],
  45. $byte[14],
  46. $byte[15]
  47. );
  48.  
  49. return $uuid;
  50. }

函数来源:fzaninotto/faker

地址:https://github.com/fzaninotto/Faker

PHP 生成 UUID 函数的更多相关文章

  1. mysql 生成UUID() 即 ORACLE 中的guid()函数

    MYSQL 生成UUID 即 guid 函数-- 带 - 的UUIDselect UUID() -- 去掉 - 的UUIDselect replace(uuid(),'-','') 一个表的数据插入另 ...

  2. php生成UUID

    UUID含义是 通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, O ...

  3. java生成UUID通用唯一识别码 (Universally Unique Identifier)

    转自:http://blog.csdn.net/carefree31441/article/details/3998553 UUID含义是通用唯一识别码 (Universally Unique Ide ...

  4. (转)java生成UUID通用唯一识别码 (Universally Unique Identifier)

    (原文链接:http://blog.csdn.net/carefree31441/article/details/3998553)   UUID含义是通用唯一识别码 (Universally Uniq ...

  5. PostgreSQL 下生成 UUID(Guid)

    最近在Windows 10 下安装了 PostgreSQL(postgresql-9.6.3-1-windows.exe),在学习过程中,发现PostgreSQL 支持UUID(Guid)类型,但是却 ...

  6. [转载]MySQL UUID() 函数

    目录 目录 一 引子 二 MySQL UUID() 函数 三 复制中的 UUID()四 UUID_SHORT() 函数 3.1 实验环境介绍 3.2 搭建复制环境 3.3 基于 STATEMENT 模 ...

  7. Windows 10 下 PostgreSQL 生成 UUID(Guid)

    最近在Windows 10 下安装了 PostgreSQL(postgresql-9.6.3-1-windows.exe),在学习过程中,发现PostgreSQL 支持UUID(Guid)类型,但是却 ...

  8. Oracle中生成uuid的方法

    Oracle中生成uuid的方法 下载LOFTER客户端 在Oracle SQL 提供了一个生成uuid的函数sys_guid: http://download.oracle.com/docs/cd/ ...

  9. MySQL UUID函数的详解(转)

    MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l  都可以实现生成唯一值的功能: ...

随机推荐

  1. [TimLinux] JavaScript 代码控制滚动条移动到顶部/底部

    1. scrollIntoView函数 这个函数控制滚动条顶部内容.还是底部内容呈现在视图窗口中,接收一个参数:boolean值. true: 顶部出现在视图窗口中 false: 底部存在在视图窗口中 ...

  2. POJ 3281 Dining(网络流-拆点)

    Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will c ...

  3. A.Math Problem

    题意:这里有n个区间,你需要添加一个区间,使得每个区间都至少有一个共同的点在这个区间,且长度最小,输出最小的长度. 分析:找出所有区间右端点的最小值,和所有区间左端点的最大值,然后答案就是max(0, ...

  4. ARTS-S golang goroutines and channels(一)

    先用golang实现一个简单的tcp服务端,假定文件名为clock1.go // clock1.go package main import ( "fmt" "io&qu ...

  5. 学Maven,这篇万余字的教程,真的够用了!

    1 Maven 介绍 1.1 为什么使用 Maven 由于 Java 的生态非常丰富,无论你想实现什么功能,都能找到对应的工具类,这些工具类都是以 jar 包的形式出现的,例如 Spring,Spri ...

  6. 【JS】332- 为什么我更喜欢对象而不是 switch 语句

    昨天偷懒了,欢迎点击关注???这样我就多更大的动力日更了- 正文从这里开始~~~ 最近(或者不是最近,这完全取决于您什么时候阅读这边文章),我正在跟我的团队伙伴讨论如何去处理这种需要根据不同的值去处理 ...

  7. 【重温基础】16.JSON对象介绍

    本文是 重温基础 系列文章的第十六篇. 今日感受:静. 系列目录: [复习资料]ES6/ES7/ES8/ES9资料整理(个人整理) [重温基础]1-14篇 [重温基础]15.JS对象介绍 本章节复习的 ...

  8. 【JS】306- 深入理解 call,apply 和 bind

    作者:一像素 链接:https://www.cnblogs.com/onepixel/p/6034307.html 在JavaScript 中,call.apply 和 bind 是 Function ...

  9. AQS系列(六)- Semaphore的使用及原理

    前言 Semaphore也是JUC包中一个用于并发控制的工具类,举个常用场景的例子:有三台电脑五个人,每个人都要用电脑注册一个自己的账户,这时最开始只能同时有三个人操作电脑注册账户,这三个人中有人操作 ...

  10. Python批量更新模块的方法【面试必学】

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:ranchlin      小编的环境为win10+python 3. ...