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

- Link: https://www.xuepaijie.com/html/skill/devops/570.html
- Published: 2016-03-09T20:30:21+08:00
- Author: Admin

首先我们来简单地普及下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得装扩展，如何不装扩展来模拟呢？**

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