PHP的uuid
博客专区 > dzb3688 的博客 > 博客详情
PHP的uuid
dzb3688 发表于3年前
PHP的uuid
  • 发表于 3年前
  • 阅读 70
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: php生成uuid

优点:

能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。

缺点:

比较占地方,和INT类型相比,存储一个UUID要花费更多的空间。
使用UUID后,URL显得冗长,不够友好。

一个库100分表:

 public static function uuid($tid) {
        return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x-%02d', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) . mt_rand(0, 9), $tid
        );
    }

一个库16分表:

 /**
     * % 印出百分比符号,不转换。
     * b 整数转成二进位。
     * c 整数转成对应的 ASCII 字元。
     * d 整数转成十进位。 
     * f 倍精确度数字转成浮点数。
     * o 整数转成八进位。 
     * s 整数转成字串。 
     * x 整数转成小写十六进位。 
     * X 整数转成大写十六进位。
     * 0xffff=== 0-9,A-F    
     * 样本1000    00,  01, 02, 03, 04 ,05, 06, 07, 08 , 09, 10 ,11 ,12, 13 ,14 ,15 ,16   ====》 9    80   40  80  50 50  40  90  50   80   90  90  70  70  50 30  30  平均值:62
     */
    function site_uuid($shop) {
        $Str = substr($shop, -2, 2);
        if ($Str <= 16) {
            $deid = $Str;
        } else {
            if ($Str % 10 == 0) {
                $deid = 10;
            } elseif ($Str % 11 == 0) {
                $deid = 11;
            } elseif ($Str % 12 == 0) {
                $deid = 12;
            } elseif ($Str % 13 == 0) {
                $deid = 13;
            } elseif ($Str % 14 == 0) {
                $deid = 14;
            } elseif ($Str % 15 == 0) {
                $deid = 15;
            } elseif ($Str % 16 == 0) {
                $deid = 16;
            } else {
                $deid = '0' . substr($shop, -1, 1);
            }
        }
        return sprintf('%04x%04x-%05x-%05x-%04x%04x-%07s-%02d', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), dechex($shop), $deid);
    }

uuid得到所在的分表

    /**
     * 根据uuid得到所在的分表
     */
    public static function get_table_by_uuid($nid) {
        $arr_exp = explode('-', $nid);
        $table_id = $arr_exp[count($arr_exp) - 1];
        return $table_id;
    }


打印结果:

/**
*1ac77ef6-109f-4f0a-acaa-8045c4273077b-53
*
*229b2eb1-74cd-4cb2-b7c4-78c0598167bba-53
*
*37a32baa-846b-4b20-bafa-08110f0c18723-53
**/


共有 人打赏支持
粉丝 7
博文 40
码字总数 10255
×
dzb3688
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: