【问题标题】:What is guid and how could I generate this in php?什么是 guid,我如何在 php 中生成它?
【发布时间】:2014-07-30 09:09:18
【问题描述】:

我想为我们的用户创建一个唯一的字符串。我们的网站在 php 中。

现在我为此使用 uniqid(),但每次刷新页面时它都会返回一个新值。我怎么能停下来每次都生成这个?

谁能帮帮我?

【问题讨论】:

  • 这个字符串的用途是什么?
  • 我不想为我的购物车使用会话,想用数据库集成购物车,不想向用户显示这个购物车数据库唯一 ID,所以我需要一个唯一键来执行此操作.
  • 将会话存储在数据库中。

标签: php unique guid


【解决方案1】:

工作了一整夜后,我得到了一个函数,它生成 guid 格式的唯一代码,它对我有用

function generateGuid($include_braces = false) {
    if (function_exists('com_create_guid')) {
        if ($include_braces === true) {
            return com_create_guid();
        } else {
            return substr(com_create_guid(), 1, 36);
        }
    } else {
        mt_srand((double) microtime() * 10000);
        $charid = strtoupper(md5(uniqid(rand(), true)));

        $guid = substr($charid,  0, 8) . '-' .
                substr($charid,  8, 4) . '-' .
                substr($charid, 12, 4) . '-' .
                substr($charid, 16, 4) . '-' .
                substr($charid, 20, 12);

        if ($include_braces) {
            $guid = '{' . $guid . '}';
        }

        return $guid;
    }
}

【讨论】:

    【解决方案2】:

    您可以使用hash function 从用户标识符(id 或/和登录)中获取哈希值。比如你md5

    echo md5('sectus'); // e60e49ef667707f291844f87abeaebe5
    

    【讨论】:

      【解决方案3】:

      GUID 是全局唯一标识符,更具体地说是 Microsoft 对 UUID(通用唯一标识符)规范的实现。

      可以在此处找到与 UUID 相关的完整规范(维基百科以方便阅读)http://en.wikipedia.org/wiki/Universally_unique_identifier#Variants_and_versions

      我通常建议使用久经考验的库来生成 UUID。到目前为止,最好的是 Ben Ramsey 的 UUID,它可以在 Github 上找到,并且有很好的文档。

      https://github.com/ramsey/uuid

      【讨论】:

        【解决方案4】:

        最常见的方式是使用sessions

        在您的情况下执行此操作的基本方法是:

        <?php
        session_start();
        if (empty($_SESSION['uid'])) {
            $_SESSION['uid'] = uniqid('xyz', true);
        }
        
        ...rest of your application...
        
        ?>
        

        然后在您的其余代码中,您可以引用$_SESSION['uid'] 来识别每个用户,跨页面加载。请注意,会话不会永远持续(取决于您的 PHP 配置)。

        【讨论】:

          【解决方案5】:

          从这里:How to generate a new GUID?

          如果您需要一个非常独特的 ID:

          $uid = dechex( microtime(true) * 1000 ) . bin2hex( random_bytes(8) );
          

          如果您确实需要 RFC 合规性:

          $guid = vsprintf('%s%s-%s-4000-8%.3s-%s%s%s0', str_split($uid,4));
          

          【讨论】:

            猜你喜欢
            • 2015-02-15
            • 2013-09-21
            • 2012-05-16
            • 2011-03-03
            • 1970-01-01
            • 1970-01-01
            • 2013-10-28
            • 2011-02-15
            • 2018-11-16
            相关资源
            最近更新 更多