我想要做的是为我网站上的文章创建一个 12 个字符的 ID,类似于 youtube 如何处理他们的视频 ID ( http://www.youtube.com/watch?v=53iddd5IcSU )。现在我正在生成一个 MD5 哈希,然后像这样抓取它的 12 个字符:
$ArticleId = substr(MD5("Article".$currentID),10,12)
其中 $currentID 是数据库中的数字 ID(例如 144)
我有点偏执,我会遇到重复的 $ArticleId,但实际上发生这种情况的可能性有多大?而且,由于我的数据库中的列是唯一的,我怎样才能处理这种罕见的情况而不会抛出一个丑陋的错误?
PS 我制作了一个小脚本来检查前 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 ...