首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >插入8个随机字符的唯一字符串

插入8个随机字符的唯一字符串
EN

Stack Overflow用户
提问于 2010-01-06 05:21:31
回答 6查看 7.2K关注 0票数 3

我使用PHP和MySQL,我有一个包含3个字段((IDUsernamePID))的表。

我希望PID字段包含8个唯一字符的字符串。

我的解决方案是在PHP中生成随机字符串,并检查它是否存在。如果它存在,那么它将生成另一个字符串。

有没有更好的解决方案可以节省处理时间,比如MySQL触发器或类似的东西?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-06 05:45:35

这将为您提供一个随机的8个字符串:

代码语言:javascript
复制
substr(str_pad(dechex(mt_rand()), 8, '0', STR_PAD_LEFT), -8);

点击此处:http://www.richardlord.net/blog/php-password-security

或者,如果用户名字段是唯一的,您还可以使用:

代码语言:javascript
复制
substr(md5('username value'), 0, 8);

虽然这是非常不可能的,特别是对于md5,但这两种情况都不能保证字符串是唯一的,所以我可能会这样做:

代码语言:javascript
复制
// Handle user registration or whatever...

function generatePID($sUsername) {
    return substr(md5($sUsername), 0, 8);
}

$bUnique = false;
$iAttempts = 0;

while (!$bUnique && $iAttempts < 10) {
    $aCheck = $oDB->findByPID(generatePID("username value")); // Query the database for a PID matching whats generated
    if (!$aCheck) { // If nothing is found, exit the loop
        $bUnique = true;
    } else {
        $iAttempts++;
    }
}

// Save PID and such...

..。这可能只会产生1个'check‘查询,在唯一的情况下可能会产生2个,并将确保唯一的字符串。

票数 1
EN

Stack Overflow用户

发布于 2010-01-06 05:23:33

字符需要是随机的吗?或者只是独一无二的?如果它们只需要是唯一的,那么您可以使用时间戳。基于时间的值将确保唯一性。

如果使用另一种方法,则必须根据数据库检查生成的值,直到得到唯一值为止。

票数 0
EN

Stack Overflow用户

发布于 2010-01-06 05:51:59

为什么不以正确的方式使用UUID(也称为GUID),它们总是唯一的,不需要检查它们是否是唯一的。它可能有36个字符,但您可以将它们存储为十六进制,这节省了磁盘空间并提高了比标准CHAR数据更快的速度。

你可以在PHP doc for functions that do this上阅读评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2009171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档