Я пытаюсь создать 12-символьный идентификатор для статей на моем веб-сайте, аналогично тому, как YouTube обрабатывает их видео-идентификатор (http://www.youtube.com/watch?v=53iddd5IcSU).). Сейчас я генерирую хэш MD5, а затем собираю 12 символов как это:
$ArticleId = substr(MD5("Article".$currentID),10,12)
где $ currentID - числовой идентификатор из базы данных (например, 144)
Я немного параноик, что столкнусь с дубликатом $ ArticleId, но реалистично, каковы шансы, что это произойдет? А также, учитывая, что столбец в моей базе данных является уникальным, как я могу справиться с этим редким сценарием без появления ужасной ошибки?
P.S. Я сделал небольшой скрипт для проверки дубликатов в первых 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 найдет уникальный идентификатор ...