【发布时间】:2010-02-14 04:03:35
【问题描述】:
我正在尝试为我网站上的文章创建一个 12 个字符的 ID,类似于 youtube 如何处理他们的视频 ID (http://www.youtube.com/watch?v=53iddd5IcSU)。现在我正在生成一个 MD5 哈希,然后像这样抓取它的 12 个字符:
$ArticleId = substr(MD5("Article".$currentID),10,12)
其中 $currentID 是数据库中的数字 ID(例如 144)
我有点偏执,我会遇到重复的 $ArticleId,但实际上发生这种情况的可能性有多大?而且,由于我的数据库中的列是唯一的,我怎样才能处理这种罕见的情况而不会抛出一个丑陋的错误?
附:我制作了一个小脚本来检查前 5000 个 $ArticleId 中的重复项,但没有。
编辑:我不喜欢 base64_encode 哈希的样子,所以我这样做了:
function retryAID($currentID)
{
$AID = substr(MD5("Article".$currentID*2),10,12);
$setAID = "UPDATE `table` SET `artID` = '$AID' WHERE `id` = $currentID ";
mysql_query($setLID) or retryAID($currentID);
}
$AID = substr(MD5("Article".$currentID),10,12);
$setAID = "UPDATE `table` SET `artID` = '$AID' WHERE `id` = $currentID ";
mysql_query($setAID) or retryAID($currentID);
由于 AID 列是唯一的,mysql_query 会抛出错误,retryAID 函数会找到唯一的 id...
【问题讨论】:
标签: php md5 uniqueidentifier