【问题标题】:PHP unique ID based on username/email基于用户名/电子邮件的 PHP 唯一 ID
【发布时间】:2011-03-29 23:17:49
【问题描述】:

我有一个电子邮件地址,我想根据它创建一个唯一的 ID,所以说电子邮件是 me@email.com 变成 66wyy7eu

我找到了一个接近的解决方案http://www.php.net/manual/en/function.uniqid.php#96898,但它需要输入是数字

【问题讨论】:

    标签: php uniqueidentifier


    【解决方案1】:

    电子邮件已经是独一无二的。

    您也不能保证电子邮件的哈希值始终是唯一的。

    如果您使用数据库。自增字段将是唯一的

    【讨论】:

    • 啊,但它是基于电子邮件的 url。但我不想使用电子邮件保护隐私
    • 根据您获得的流量,md​​5 或 sha1 可能就足够了。高流量需要数据库来跟踪唯一性
    • 如果电子邮件是唯一的,为什么散列的电子邮件也不是唯一的?前提是您使用相同的哈希算法...
    • 因为哈希是有限数量的字符。您可以散列一个 1GB 的文件,但仍然得到与散列的 1 字节字符串相同大小的散列。这意味着最终,相同的哈希可以通过 2 个不同的输入产生
    • @jase:sha1 不太可能发生这种情况,sha512 根本不会发生这种情况
    【解决方案2】:

    查看hash()。这应该允许您根据字符串输入生成足够唯一的 ID。

    【讨论】:

      【解决方案3】:

      你读过 md5 吗? PHP md5 function

      【讨论】:

        【解决方案4】:

        就我个人而言,我会使用 md5() 或 sha1() 之类的东西。 PHP 确实有一个 hash() 函数,允许您指定使用的算法:http://php.net/manual/en/function.hash.php

        【讨论】:

          【解决方案5】:

          请参阅我对另一个具有相同性质的问题的回答,该功能可以根据您的需要进行相应修改:

          PHP random URL names (short URL)

          如上所述,电子邮件地址是唯一的,如果您将它们存储到数据库中,您将从自动增量列中获得唯一的标识号。

          使用该 ID,您可以使用上述函数为该 ID 创建一个唯一哈希,并将其存储在同一行中,然后您的电子邮件地址有 2 个标识符,内部使用的 ID 和加密密钥用作短网址服务。

          另外还有一种更简单的方法,当您不断创建随机字符串然后检查它是否在您的数据库中时,如果密钥在您的数据库中,那么您生成另一个并再次检查,直到您有一个唯一的 id。

          这是一个简单的例子:

          function createRandomID($length = 9)
          {
              $random = '';
              for ($i = 0; $i < $length; $i++)
              {
                  $random .= chr(rand(ord('a'), ord('z')));
              }
              return $random;
          }
          

          然后简单地做:

          do
          {
              $id = createRandomID();
          }while(!idExists($id));
          
          //Insert $id into our DB along with the email!
          

          注意: 字符的限制会影响它可以生成的唯一字符串的数量,数据库中的字符串越多,循环速率就越高,这可能会增加数据库的负载和导致用户的页面变慢。

          【讨论】:

            猜你喜欢
            • 2020-12-03
            • 1970-01-01
            • 2015-03-02
            • 2019-01-08
            • 2010-11-24
            • 2013-01-31
            • 1970-01-01
            • 2019-04-26
            • 2011-07-15
            相关资源
            最近更新 更多