генератор уникальных кодов php
Генератор уникальных кодов php
Коды генерируются гарантированно уникальные (в пределах одной сессии). Это достигается за счет того, что в качестве кода сперва используются ключи массива, а не значения. Даже если какой-либо код будет сгенерирован повторно, то просто перезапишется уже имеющийся элемент массива, а не добавится новый. Отсутствие проверок типа in_array значительно повышает скорость работы генератора. Главный недостаток этого алгоритма в том, что для генерации больших объемов данных потребуется много оперативной памяти. Для особо критичных случаев при выборе символов, составляющих код, лучше использовать не программный ГСЧ, а какой-нибудь аппаратный, чтобы обеспечить максимальную непредсказуемость данных.
Для красоты символы в готовых кодах можно разделить на группы, используя разделитель. Ниже приведены несколько примеров кодов с разделителями и без. Разделитель на 8-й позиции:
[0] => A6DC5536-81EFDE02
[1] => 525586D3-8773E542
[2] => A21B0A2E-8CC3240B
[3] => 3F66FCBC-E6B9A8AF
[4] => 8EFEBB51-B3CA57AE
[5] => F888C622-D14A0AD6
[6] => FFDE76BA-C218681A
[7] => 17E262B3-BFA110C8
[8] => B64A8B15-399EA874
[9] => 5CF57146-0C0A0022
Разделитель на каждой 4-й позиции:
[0] => 0C06-85BC-7201-E7B6
[1] => D4F7-E0A3-384F-9938
[2] => 2350-2DC4-E85C-70DC
[3] => 1EF3-7998-AE3E-A4E3
[4] => 144C-B738-C683-38A5
[5] => 1248-AB10-0881-86B6
[6] => 2528-8C13-1C04-C23F
[7] => A6EB-79B6-57A9-3B4F
[8] => 4B8B-9ED0-A737-FA1B
[9] => AFFB-2DB8-85FF-9484
Только цифры, разделителей нет:
[0] => 5437151350716448
[1] => 2133900712368713
[2] => 4785741281845748
[3] => 5593174921255829
[4] => 3735223131404105
[5] => 4795261818633735
[6] => 6881470329618676
[7] => 0408149990357380
[8] => 6868536157610001
[9] => 3155755636830187
При тестировании для генерации 500 тысяч уникальных 16-значных кодов у меня было затрачено в среднем 2-3 секунды.
Генерация уникального ID на PHP
Очень часто при разработке сайтов требуется генерировать уникальный ID на PHP. Приведу пример, с которым я столкнулся в своей практике. Я занимался Интернет-магазином, и там были 2 типа товаров, которые настолько разные по своей природе, что отправлять заказы в одну таблицу было крайне неразумно. Но если я размещаю заказы по 2-м таблицам, то ID каждого заказа не является уникальным. Ведь может быть 10-й заказ в первой таблице и 10-й заказ во второй таблице. И как их различать? Вот эту проблему я и решил. А как, Вы узнаете из этой статьи.
Я добавил в каждую таблицу по одному полю key, в которое поместил уникальное значение, зависящее от текущего времени, которое, как известно, не стоит на месте (если, конечно, сервер не движется со скоростью света). Вот так это выглядело:
И затем этот key я записывал в таблицу с заказом. И затем идентифицировал заказ не по его ID, а именно по ключу, который был уникальным для каждого заказа.
Вроде всё хорошо, однако, не так давно я нашёл прекрасную функцию, которая называется uniqid(), которая позволяет ещё лучше уникализировать ID.
Вариант без параметров аналогичен моему варианту, только он более короткий (и в плане кода, и в плане результата). А теперь описание параметров:
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 1 ):
Хм, не знал про данную функцию, надо будет поюзать.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
uniqid
(PHP 4, PHP 5, PHP 7, PHP 8)
uniqid — Сгенерировать уникальный ID
Описание
Получает уникальный идентификатор с префиксом, основанный на текущем времени в микросекундах.
Список параметров
Может быть полезно, к примеру, если идентификаторы генерируются одновременно на нескольких хостах и генерация идентификаторов производится в одну и ту же микросекунду.
Возвращаемые значения
Возвращает уникальный идентификатор в виде строки.
Эта функция пытается создать уникальный идентификатор, но не даёт 100% гарантии уникальности.
Примеры
Пример #1 Пример использования uniqid()
Примечания
В Cygwin параметр more_entropy должен быть задан как true для работы этой функции.
User Contributed Notes 25 notes
For the record, the underlying function to uniqid() appears to be roughly as follows:
In other words, first 8 hex chars = Unixtime, last 5 hex chars = microseconds. This is why it has microsecond precision. Also, it provides a means by which to reverse-engineer the time when a uniqid was generated:
Increasingly as you go further down the string, the number becomes «more unique» over time, with the exception of digit 9, where numeral prevalence is 0..3>4>5..f, because of the difference between 10^6 and 16^5 (this is presumably true for the remaining digits as well but much less noticeable).
The following class generates VALID RFC 4211 COMPLIANT Universally Unique IDentifiers (UUID) version 3, 4 and 5.
Version 3 and 5 UUIDs are named based. They require a namespace (another valid UUID) and a value (the name). Given the same namespace and name, the output is always the same.
Version 4 UUIDs are pseudo-random.
UUIDs generated below validates using OSSP UUID Tool, and output for named-based UUIDs are exactly the same. This is a pure PHP implementation.
// Usage
// Named-based UUID.
Seriously, avoid using this function. Here’s an example of why:
As you can see, using it w/ a DB can cause the creation of documents with repeated ID’s. You should instead opt for:
5819fa0b63be3 9f39aa0ecd89d
5819fa0b70ed3 2c0735cabfcce
5819fa0b712bb 15e45d1ca1e90
5819fa0b712bb 89593dc230eb3
5819fa0b712bb 449795704aeef
5819fa0b712bb b046877b80ac9
5819fa0b712bb 0a6fa0ae3ec7b
5819fa0b712bb ba2f3f4d6afe0
5819fa0b712bb af03cfac83fd6
5819fa0b712bb eb9c3c6d475c0
5819fa0b712bb edfbbf59d5e1b
5819fa0b712bb 500dca18888d4
5819fa0b716a3 4f5a40ef715f1
5819fa0b716a3 154e42b616825
5819fa0b716a3 a879a22663c9b
5819fa0b716a3 ea7c044ddda8a
5819fa0b716a3 2c81a44dc674e
5819fa0b716a3 bb32f37304fd9
5819fa0b716a3 30cdf6c0317d7
5819fa0b716a3 d25f529d126ae
Generating an MD5 from a unique ID is naive and reduces much of the value of unique IDs, as well as providing significant (attackable) stricture on the MD5 domain. That’s a deeply broken thing to do. The correct approach is to use the unique ID on its own; it’s already geared for non-collision.
IDs should never be obfuscated for security, so if you’re worried about someone guessing your ID, fix the system, don’t just make it harder to guess (because it’s nowhere near as difficult to guess as you imagine: you can just brute force the 60,000 MD5s that are generatable from millisecond IDs over the course of a given minute, which the typical computer can do in less than 0.1s).
The php5-uuid functions could definitely use some documentation to clarify how they should be used, but here’s what I’ve gleaned by examining the OSSP source code (found here: http://ossp-uuid.sourcearchive.com/documentation/1.5.1-1ubuntu1/php_2uuid_8c-source.html).
The uuid_make() function takes two arguments when generating v1 or v4, but four arguments are required when generating v3 or v5. The first two arguments have been demonstrated below and are straightforward, so I’ll skip to the as-yet non-described arguments.
Here’s a simple class illustrating the proper usage (note that if php5-uuid is not installed on your system, each function call will just return false):
class UUID <
/**
* Generates version 1: MAC address
*/
public static function v1 () <
if (! function_exists ( ‘uuid_create’ ))
return false ;
/**
* Generates version 4 UUID: random
*/
public static function v4 () <
if (! function_exists ( ‘uuid_create’ ))
return false ;
microtime = 1306620716.0457
V1 UUID: 7fddae8e-8977-11e0-bc11-003048c3b1f2
V3 UUID of URL=’abc’: 522ec739-ca63-3ec5-b082-08ce08ad65e2
V4 UUID: b3851ec7-4871-4527-92b5-ef5616bae1e6
V5 UUID of URL=null: e129f27c-5103-5c5c-844b-cdf0a15e160d
——————-
microtime = 1306620716.0465
V1 UUID: 7fddb83e-8977-11e0-9e6e-003048c3b1f2
V3 UUID of URL=’abc’: 522ec739-ca63-3ec5-b082-08ce08ad65e2
V4 UUID: 7e78fe0d-59b8-4637-af7f-e88d221a7d1e
V5 UUID of URL=null: e129f27c-5103-5c5c-844b-cdf0a15e160d
——————-
microtime = 1306620716.0467
V1 UUID: 7fddbfb4-8977-11e0-a2bc-003048c3b1f2
V3 UUID of URL=’abc’: 522ec739-ca63-3ec5-b082-08ce08ad65e2
V4 UUID: 12a940c7-0f3f-46a1-bb5f-bdd602e10654
V5 UUID of URL=null: e129f27c-5103-5c5c-844b-cdf0a15e160d
As you can see, the calls to v3() always return the same UUID because the same URL parameter, «abc», is always supplied. The same goes for the v5() function which is always supplied a null URL.
The v4() UUIDs are always entirely different because they are (pseudo)random. And the v1() calls are very similar but just slightly different because it’s based on the computer’s MAC address and the current time.
Another UUID function. This time using /dev/random
/**
* @brief Generates a Universally Unique IDentifier, version 4.
*
* This function generates a truly random UUID. The built in CakePHP String::uuid() function
* is not cryptographically secure. You should uses this function instead.
*
* @see http://tools.ietf.org/html/rfc4122#section-4.4
* @see http://en.wikipedia.org/wiki/UUID
* @return string A UUID, made up of 32 hex digits and 4 hyphens.
*/
public function uuidSecure () <
I use such UUID (it not RFC. )
(server_id)-(clientIP)-(unixtime)-(milliseconds)-(random)
I can easyly determine which server at which time and who initiate creating of object.
I use this function to generate microsoft-compatible GUID’s.
will return ‘PpQXn7COf’ and:
will return ‘9007199254740989’
echo rand_uniqid ( 1 );
?>
Calls to uuid_make that use the constants UUID_MAKE_V5 or UUID_MAKE_V3 (using Debian package php5-uuid available June 2010) will not work with only two variables.
I could not find good documentation, so I read some source code and figured out that this would work:
uuid_create(&$v5);
//uuid_make($v5, UUID_MAKE_V5);
uuid_make($v5, UUID_MAKE_V5,$v5,$uniqid());
uuid_export($v5, UUID_FMT_STR, &$v5String);
Please use at your own risk. This may not be the best way to give this param variables, but it at least makes it work what appears to be properly (generating unique ID’s).
I imagine that UUID_MAKE_V3 is similar in what it needs.
Most of these notes are grossly wrong.
First: you probably shouldn’t be using uniqid at all. I can’t think of a good reason to use it. Maybe to use as an identifier for a particular run of your script in logging, where you don’t particularly care if there’s a collision? I don’t know.
Second: don’t rely on the output of uniqid to be, in any way, unique. This will break if you use it twice in quick succession, or if you have two different users at the same time, or if the phase of the moon is wrong.
Fourth: do not use random bytes for a unique identifier (like hackan suggests). That only serves to virtually guarantee that you will eventually have a collision. (You can use random bytes, and get another set of random bytes if there’s a collision. but it’s a lot easier to just use a sequential identifier like you should, possibly along with a random key)
echo struuid ( false ); //Return sample: F4518NTQTQ
echo struuid ( true ); //Return sample: F451FAHSUCD90N6YNRBQHLZ9E1W
I have been using mimecs version lately and do not think it’s safe to think the results are always unqiue.
Although it could be just my bad programming, I found exactly 1 collission while debugging my code. It seems to me that if my code was incorrect it would have happened more than once.
I recommend anyone to include time as a factor of such an ID as to be a little more certain it is in fact unique.
note hackan at gmail dot com is not or no longer valid even in a for loop uniqid delivers uniq values
Tested:
PHP 7.3.18 (cli) (built: May 12 2020 10:55:29) ( ZTS MSVC15 (Visual C++ 2017) x64 )
PHP 7.4.3 (cli) (built: Oct 6 2020 15:47:56) ( NTS )
If you are storing the value to database it might be more efficient to use more letters than in hexadecimal, for me I decided 0-9a-z is good enough.
Notice also that many databases are case insensitive by default so using capitals maybe unwise anyway:
?>
String length may vary with this method.
I wouldn’t use:
$prefix = exec(«hostname»);
— since it’s CPU-expensive.
Instead use php_uname(‘n’) if you have many visitors.
This builds slightly on david’s post below. The differences are that it doesn’t require Cake anymore and there is a graceful fallback for /dev/urandom in case that isn’t available (/dev/urandom is not available on windows systems for example).
Since it uses mt_rand(), it is still cryptographically secure.
/**
* @brief Generates a Universally Unique IDentifier, version 4.
*
* This function generates a truly random UUID. The built in CakePHP String::uuid() function
* is not cryptographically secure. You should uses this function instead.
*
* @see http://tools.ietf.org/html/rfc4122#section-4.4
* @see http://en.wikipedia.org/wiki/UUID
* @return string A UUID, made up of 32 hex digits and 4 hyphens.
*/
function uuidSecure () <
mt_rand() features in a lot of comments here. It is a good PRNG for Monte Carlo simulations, not for anything related to security. Wikipedia’s page on cryptographically-secure PRNGs explains. If you want it to be hard for an attacker to guess or predict a «random» UUID, try using /dev/random instead.
If you want many ids and performance of this function is an issue why not pull uniquid() out of the loop, eg:
$base = uniqueid();
$ids[] = array();
wooshoofoo, the reason mimec is calling mt_rand multiple times is because the largest number mt_rand can produce is 2^31 (2147483647, as reported by mt_getrandmax() on my server). RFC 4122 requires a 128 bit value.
Also they are not «4 digit sequeces», but 4 digit hexadecimal numbers. 16^4 == 2^16.
mimec’s limiting each random result to 2^16 avoids problem of PHP’s 2^32 integer max (http://php.net/manual/en/language.types.integer.php).
If you want to call mt_rand fewer times: mimec’s version calls mt_rand 8 times ( 16 bits * 8 = 128 bits ). You *could* call mt_rand 5 times ( 31 bits + 31 bits + 31 bits + 31 bits + 4 bits = 128 bits ). But then you would have keep all your values as strings.
/**
* Another (ugly) «random or pseudo-random» version of RFC 4122
*
* This version calls mt_rand() the fewest possible times.
* if mt_getrandmax() == 2^31 then this will call mt_rand() 5 times YMMV
*
* Personally, I would use mimec’s version
* To handle the large values, we’ll keep everything as strings.
*
* @return string
*/
function uuid () <
?>
However, I think mimec’s version is much more elegant.
Генерация случайных буквенно-цифровых строк в PHP
Позвольте мне начать этот пост, сказав, что почти ни одно событие не является случайным. Даже исход классического броска монеты теоретически можно было бы предсказать, если бы мы знали о влиянии каждого фактора, например, трения, гравитации и начальной силы.
То же самое применимо к генерации случайных чисел и буквенно-цифровых строк. Самое лучшее, на что мы можем надеяться, это генерировать числа и строки, которые не следуют шаблону и не могут быть практически предсказаны злоумышленником.
В этом уроке мы рассмотрим различные методы генерации случайных чисел и буквенно-цифровых строк в PHP. Некоторые из них будут криптографически безопасны, а другие предназначены только для случайного использования, например, назначение псевдослучайных имен файлов или создание URL-адресов и предложение имен пользователей.
Создание случайных чисел в PHP
Функция стала еще лучше в PHP 7.2.0, избавившись от ошибки модульного смещения. Это означает, что для некоторых конкретных значений ваша последовательность случайных чисел теперь будет немного лучше по сравнению со старыми версиями. Однако какой-то специализированный код может действительно полагаться на эту предвзятость. Если это так, вы можете использовать более старый алгоритм, вызвав функцию mt_srand() для задания начального числа для генератора случайных чисел и передачи MT_RAND_PHP в качестве значения второго параметра.
В приведенной выше последовательности у нас было 1267 два раза на выходе, но это не означает, что после этого вся последовательность начала повторяться. Маловероятно, чтобы такое же число повторялось так быстро в случайной последовательности, но это возможно!
Криптографически безопасные случайные целые числа
Случайные числа с плавающей точкой
Изменение начального числа генераторов случайных чисел
Важно помнить, что предоставление начального значения случайного числа за один раз до вызова rand() и mt_rand() не обязательно приведет к получению более качественных случайных чисел. Фактически, использование одного и того же начального случайного числа каждый раз даст вам одно и то же случайное число!
Изменение случайного числа полезно в ситуациях, когда вы хотите создать случайную, но воспроизводимую последовательность. Следующий фрагмент кода генерирует одну и ту же последовательность случайных чисел при повторном запуске.
Генерация случайных буквенно-цифровых строк в PHP
Существует множество способов генерации случайных буквенно-цифровых строк, и то, что вы используете, будет зависеть от ваших потребностей.
Создание перетасованных строк
Помните, что случайная строка, сгенерированная таким образом, не является криптографически безопасной. Тем не менее, строка по-прежнему будет довольно непредсказуемой для общего использования, например, для генерации случайных имен файлов или URL-адресов. Вот несколько примеров:
В обоих случаях ваш результат, скорее всего, будет разным. В первом случае мы просто перетасовали допустимую строку символов, а затем взяли первые 10 символов. Во втором случае мы добавили «video» в начале сгенерированной строки и «.mp4» в конце.
Этот способ генерации случайных буквенно-цифровых строк очень прост, но у него есть несколько проблем. Например, вы никогда не получите одинаковые символы в своей случайной строке дважды. Кроме того, длина строки случайного вывода может достигать только длины входной строки.
Создание случайных строк
Если проблемы, перечисленные выше, являются неприемлемыми, вы можете посмотреть на некоторые другие реализации. Следующий код поможет решить эти проблемы.
Создание случайных шестнадцатеричных строк
Ниже приведен пример вывода, возвращаемого этими функциями:
Как вы можете видеть, генерация случайных и уникальных шестнадцатеричных строк длиной до 40 символов очень проста в PHP.
Генерация криптографически безопасных случайных строк
Заключительные мысли
В этом уроке мы рассмотрели генерацию случайных чисел и буквенно-цифровых строк в PHP. Генерация случайных чисел может быть полезна в самых разных ситуациях, например, в играх, в которых вы должны порождать вражеских игроков или произвольно давать пользователям некоторые подсказки о письмах, чтобы они могли сформировать целое слово.
Подобно случайным числам, генерация случайных буквенно-цифровых строк также может быть весьма полезной во многих случаях. С помощью str_shuffle() вы можете выбрать, какой набор символов появится в ваших случайных строках. С помощью sha1() и md5() вы можете легко генерировать случайные шестнадцатеричные последовательности, а с помощью random_bytes() вы можете генерировать криптографически защищенные строки. Это позволит вам генерировать осмысленные, но рандомизированные имена файлов и имена пользователей, которые трудно подобрать.
Надеюсь, вам понравился этот урок. Если у вас есть какие-либо вопросы, не стесняйтесь задавать их в комментариях.
PHP: как создать случайную, уникальную, буквенно-цифровую строку?
как можно было бы создать случайную, уникальную строку, используя цифры и буквы для использования в ссылке проверки? Например, когда вы создаете учетную запись на веб-сайте, и он отправляет вам электронное письмо со ссылкой, и вам нужно щелкнуть эту ссылку, чтобы подтвердить свою учетную запись. угу. один из них.
Как я могу создать один из них с помощью PHP?
24 ответов:
Примечание: это решение не должно использоваться в ситуациях, когда качество ваших случайность может повлиять на безопасность приложения. В частности, rand() и uniqid() не криптографически безопасный генератор случайных чисел!—9—>. Смотрите Скотт для безопасной альтернативы.
Если вам не нужно, чтобы он был абсолютно уникальным с течением времени:
в противном случае (учитывая, что вы уже определили уникальный логин для вашего пользователя):
я просто изучал, как решить эту же проблему, но я также хочу, чтобы моя функция создавала токен, который можно использовать для поиска пароля. Это означает, что мне нужно ограничить способность маркера угадывать. Потому что uniqid основано на времени, и согласно php.net » возвращаемое значение немного отличается от microtime ()», uniqid не соответствует критериям. В PHP рекомендует использовать openssl_random_pseudo_bytes() вместо того, чтобы генерировать криптографически безопасный жетоны.
быстрый, короткий и по существу ответ:
Ниже приведена самая сильная функция, которую я мог бы сделать, которая удовлетворяет критериям (это реализованная версия ответа Эрика).
объектно-ориентированная версия самого популярного решения
Я создал объектно-ориентированное решение, основанное на Скотт‘ы ответ:
использование
пользовательские алфавит
при необходимости вы можете использовать пользовательский алфавит. Просто передайте строку с поддерживаемыми символами конструктору или сеттеру:
вот выходные образцы
Я надеюсь, что это поможет кто-то. Ура!
эта функция генерирует случайный ключ, используя цифры и буквы:
Я опаздываю, но я здесь с некоторыми хорошими исследовательскими данными, основанными на функциях, предоставляемых Скотт. Поэтому я настроил цифровую каплю океана только для этого 5-дневного автоматизированного теста и сохранил сгенерированные уникальные строки в базе данных MySQL.
в этот период я использовал 5 различных длин (5, 10, 15, 20, 50) и +/-0.5 млн записей были вставлены для каждой длины. Во время моего теста только длина 5 сгенерированных +/-3K дубликатов из 0.5 миллионов и остальные длины не создавали никаких дубликатов. Таким образом, мы можем сказать, что если мы используем длину 15 или выше с функциями Скотта, то мы можем генерировать высоконадежные уникальные строки. Вот таблица с данными моих исследований:
Я надеюсь, что это помогает.
вы можете использовать UUID (универсальный уникальный идентификатор), его можно использовать для любых целей, от строки аутентификации пользователя до идентификатора платежной транзакции.
UUID-это 16-октетное (128-битное) число. В своей канонической форме UUID представлен 32 шестнадцатеричными цифрами, отображаемыми в пяти группах, разделенных дефисами, в виде 8-4-4-4-12 в общей сложности 36 символов (32 буквенно-цифровых символа и четыре дефиса).
некоторые примеры вывода будут выглядеть так:
надеюсь, что это поможет кому-то в будущем 🙂
где length-длина нужной строки (делится на 4, в противном случае она округляется до ближайшего числа, делящегося на 4)
например (в псевдокоде)
используйте код ниже, чтобы сгенерировать случайное число из 11 символов или изменить число в соответствии с вашим требованием.
вот окончательный уникальный генератор id для вас. сделано мной.
мне нравится использовать хэш-ключи при работе с проверочными ссылками. Я бы рекомендовал использовать microtime и хэширование, используя MD5, поскольку не должно быть причин, по которым ключи должны быть одинаковыми, поскольку он хэшируется на основе microtime.
Скотт, да ты сам пишешь и хорошее решение! Спасибо.
Я также должен генерировать уникальный маркер API для каждого моего пользователя. Ниже приведен мой подход, я использовал информацию о пользователе (Userid и имя пользователя):
пожалуйста, посмотрите и дайте мне знать, если никаких улучшений я могу сделать. Спасибо
после прочтения предыдущих примеров я придумал следующее:
я дублирую 10 раз массив[0-9, A-Z] и перемешиваю элементы, после того как я получаю случайную начальную точку для substr (), чтобы быть более «творческим» 🙂 вы можете добавить [a-z] и другие элементы в массив, дублировать более или менее, быть более творческим, чем я
вот что я использую на одном из моих проектов, он работает и генерирует УНИКАЛЬНЫЙ СЛУЧАЙНЫЙ ТОКЕН:
обратите внимание, что я умножил метку времени на три, чтобы создать путаницу для тех, кто пользователь может быть интересно, как этот токен генерируется;)
Я думаю, что это лучший способ использовать.
выше функция будет генерировать вам случайную строку длиной 11 символов.
мы можем использовать эти две строки кода для создания уникальной строки проверили около 10000000 раз итерации
для действительно случайных строк, вы можете использовать
поэтому, даже если вы попытаетесь создать строку несколько раз в одно и то же время, вы получите разные выходные данные.
Это простая функция, которая позволяет генерировать случайные строки, содержащие буквы и цифры (буквенно-цифровой). Вы также можете ограничить длину строки. Эти случайные строки могут быть использованы для различных целей, в том числе: реферальный код, промокод, код купона. Функция опирается на следующие функции PHP: base_convert, sha1, uniqid, mt_rand
Я считаю, что проблема со всеми существующими идеями заключается в том, что они наверное уникальный, но не наверняка уникальный (как указано в ответе Дариуша Вальчака на loletech). У меня есть решение, которое на самом деле является уникальным. Это требует, чтобы ваш скрипт имел какую-то память. Для меня это база данных SQL. Вы также можете просто написать в файл где-нибудь. Есть две реализации:
Первый метод: есть два поля, а не 1, которые обеспечивают уникальность. Первое поле-это идентификационный номер, который не является случайным, но является уникальным (первый идентификатор-1, второй-2. ). Если вы используете SQL, просто определите поле ID со свойством AUTO_INCREMENT. Второе поле не является уникальным, но случайным. Это может быть создано с помощью любого из других методов, которые люди уже упоминали. Идея Скотта была хороша, но md5 удобен и, вероятно, достаточно хорош для большинства целей:
Второй метод: в основном та же идея, но изначально выберите максимальное количество строк, которые когда-либо будут созданы. Это может быть просто очень большое число, как триллион. Затем сделайте то же самое, сгенерируйте идентификатор, но обнулите его так, чтобы все идентификаторы имели одинаковое количество цифр. Затем просто объедините идентификатор со случайной строкой. Это будет достаточно случайным для большинства целей, но раздел ID гарантирует, что он также уникален.
вы можете использовать этот код, Я надеюсь, что это будет полезно для вас.