этот код гарантирует уникальный идентификатор - PullRequest
1 голос
/ 09 февраля 2011

Я пытаюсь создать уникальный идентификатор, который является случайным.Это решение было предложено, но я не гарантирую, что они будут уникальными.

function uid($n) {
    $id_part = base_convert($n, 10, 36);
    $rand_part = str_shuffle('abcdefghijklmnopqrstuvwxyz0123456789');
    return sprintf("%05s%.15s", $id_part, $rand_part);
}

Код использует уникальный идентификатор из идентификатора автоинкремента базы данных (я предполагаю, что это ввод $ n), затем добавляются некоторые символы заполнения.Это дает предположительно «уникальные» 5-значный базовый идентификатор 36 основной идентификатор + 15 мусорных символов.Может ли кто-нибудь подтвердить, действительно ли результатом будут уникальные идентификаторы.

Чтобы ответить на вопрос, для чего я делаю это точно.Мне нужно дать пользователям уникальный идентификатор, который не совпадает напрямую с их идентификатором в базе данных.Таким образом, пользователь 1 не знает, что он был зарегистрирован ранее, чем пользователь 2, но каждый пользователь по-прежнему должен иметь уникальный «передний идентификатор».

Ответы [ 3 ]

2 голосов
/ 09 февраля 2011

Он будет уникальным в таблице, из которой происходит $n, так же, как и $n без каких-либо дополнительных случайных символов.Он не будет глобально уникальным во всех приложениях, равно как и строки с фиксированной длиной.Все, что вы можете гарантировать, это вероятность создания одной и той же строки дважды.

0 голосов
/ 09 февраля 2011
$token = hash('sha256', rand() . microtime() . $_SERVER['REMOTE_ADDR']) // rand as possible
0 голосов
/ 09 февраля 2011

Вы можете попробовать встроенные функции, такие как:

http://php.net/manual/en/function.uniqid.php

http://php.net/manual/en/function.com-create-guid.php

Зависит от того, сколько уникальности вы хотите иметь.Если это только для вашего приложения или глобально.

Глобальный Guid будет лучшим вариантом.

...