Как преобразовать строку в целое число в PHP?

-6

(Этот вопрос касается не PHP-литья).

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

Итак, мой вопрос: возможно ли преобразовать (длинную, например) последовательность строк в уникальную (или достаточно уникальную для не менее миллиона преобразований) последовательность чисел, есть ли доступные варианты, о которых я понятия не имею? Просто чтобы показать вам пример:

 $uName = $this->newUsername;
$publicId = $this->strToInt(somecomplexstring); // Outputs something like 13272992
// Or feed with username
$publicId = $this->strToInt($uName);

спросил(а) 2021-01-28T00:42:23+03:00 3 месяца, 1 неделя назад
1
Решение
62

Вы можете подумать о том, чтобы использовать что-то вроде слизняков. Таким образом, ваш пользователь будет иметь уникальный идентификатор в базе данных, а также уникальный пул (случайная строка, например TGqJItemU5TGqJItemU5f6S5VaCr2n). Затем вы можете использовать этот пул вместо идентификатора при представлении данных в браузере.

ответил(а) 2021-01-28T00:42:23+03:00 3 месяца, 1 неделя назад
44

Как указано в комментарии, вы можете использовать uniquid для получения уникальной строки. эта функция вернет шестнадцатеричную строку.

Если вам нужны только цифры, вам просто нужно преобразовать шестнадцатеричное число в десятичный номер с этим hexdec.

Окончательный код будет выглядеть так:

hexdec(uniqid());

Другой способ получить целое число из строки - использовать md5. Эта функция также возвращает шестнадцатеричную строку, поэтому вам нужно будет использовать hexdec для получения десятичного числа

Обратите внимание, что md5 не является уникальной строкой, существует (очень маленькая) вероятность случайного столкновения (1 из 340 undecillion, см. " Сколько случайных элементов до того, как MD5 вызывает столкновения" для получения дополнительной информации)

ответил(а) 2021-01-28T00:42:23+03:00 3 месяца, 1 неделя назад
-4

Вы можете использовать:

md5 (uniqid (rand(), true))

ответил(а) 2021-01-28T00:42:23+03:00 3 месяца, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема