PHP中如何不利用扩展来生成GUID

首先我们来简单地普及下GUID, 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。 GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。

在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项、类及接口标识、数据库、系统目录等对象。 GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。例如:2F9679FF-8B86-D021-B42D-00C04FC964TF 即为有效的 GUID 值。

说了这么多,和其它的标识序列相比,优势在哪?

1、GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同

2、世界上的任何两台计算机都不会生成重复的 GUID 值

3、需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理

4、GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储

所以一般来说,需要借用硬件的某些信息,但是PHP得装扩展,如何不装扩展来模拟呢?

function get_guid() {
$charid = strtoupper(md5(uniqid(mt_rand(), true)));
$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;
}

我要评论!

想一个你喜欢的昵称。
给一个你的常用邮箱。
想和萌萌哒的TA们说点啥。
  • i (PCRE_CASELESS) 如果设定此修正符,模式中的字符将同时匹配大小写字母。 m(PCRE_MULTILINE) 默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅 仅匹配...
  • Web 2.0 的发展为网络用户的互动提供了更多机会。用户通过在论坛发表评论,或是在博客发表留言都可能有意或无意输入一些破坏性的内容,从而造成网页不能正常显示,影响其它用户的使用。 XSS 全称为 Cross Site Scripting,因为 CSS 已经用作样式表的简称,故称为 XSS。 XSS...
  • 其实就是换行符的系统默认常量。 unix系列用 \n windows系列用 \r\n mac用 \r PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性。 如: <?php echo PHP_EOL; //windows平台相当于 echo "\r\n"; //unix\linu...
  • 在设计登录的模式时,会考虑到让SESSION能够独立于浏览器的行为,那也就是说不会因为关闭了浏览器导致会话失效,这个时候肯定优先使用数据库来存储SESSION相关的内容。 php的session是可以程序恢复的,这个和java不太一样。session的恢复机制可以实现多个应用程序session的共享...
微信扫一扫即可带走我!