【发布时间】:2011-03-29 23:17:49
【问题描述】:
我有一个电子邮件地址,我想根据它创建一个唯一的 ID,所以说电子邮件是 me@email.com 变成 66wyy7eu
我找到了一个接近的解决方案http://www.php.net/manual/en/function.uniqid.php#96898,但它需要输入是数字
【问题讨论】:
标签: php uniqueidentifier
我有一个电子邮件地址,我想根据它创建一个唯一的 ID,所以说电子邮件是 me@email.com 变成 66wyy7eu
我找到了一个接近的解决方案http://www.php.net/manual/en/function.uniqid.php#96898,但它需要输入是数字
【问题讨论】:
标签: php uniqueidentifier
电子邮件已经是独一无二的。
您也不能保证电子邮件的哈希值始终是唯一的。
如果您使用数据库。自增字段将是唯一的
【讨论】:
查看hash()。这应该允许您根据字符串输入生成足够唯一的 ID。
【讨论】:
你读过 md5 吗? PHP md5 function
【讨论】:
就我个人而言,我会使用 md5() 或 sha1() 之类的东西。 PHP 确实有一个 hash() 函数,允许您指定使用的算法:http://php.net/manual/en/function.hash.php
【讨论】:
请参阅我对另一个具有相同性质的问题的回答,该功能可以根据您的需要进行相应修改:
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!
注意: 字符的限制会影响它可以生成的唯一字符串的数量,数据库中的字符串越多,循环速率就越高,这可能会增加数据库的负载和导致用户的页面变慢。
【讨论】: