uniqueidentifier — Из какого набора символов состоит уникальный php?

Я хотел бы подготовить простое регулярное выражение для PHP uniqid, Я проверил uniqid вручную ищет набор символов, используемых в качестве возвращаемого значения. Но в документации только упоминается, что:

@ возврат строки уникальный идентификатор, как строка.

А также

С пустым префиксом возвращаемая строка будет иметь длину 13 символов. Если more_entropy имеет значение true, это будет 23 символа.

Я хотел бы знать, каких символов можно ожидать в возвращаемом значении. Это шестнадцатеричная строка? Как узнать наверняка? Где найти что-то еще о функции uniqid?

4

Решение

В документации не указывается содержимое строки; только его длина. Как правило, вы не должны зависеть от этого. Если вы печатаете значение между парой разделителей, например кавычками, вы можете использовать их в регулярном выражении:

"([^"]+)"    ($1 contains the value)

Пока вы разрабатываете для конкретной версии PHP, вы можете проверить ее реализацию и предположить, что она не меняется. Если вы обновляете, вы должны проверить, если предположение остается в силе.

Комментарий в uniqid документация описывает, что это по сути шестнадцатеричное число с необязательным числовым суффиксом:

if (more_entropy) {
uniqid = strpprintf(0, "%s%08x%05x%.8F", prefix, sec, usec, php_combined_lcg() * 10);
} else {
uniqid = strpprintf(0, "%s%08x%05x", prefix, sec, usec);
}

Что дает вам два возможных формата вывода:

  1. uniqid() — 13 символов, шестнадцатеричное число
  2. uniqid('', true) — 14 — 23 символа, шестнадцатеричное число с суффиксом с плавающей точкой
    вычислено в другом месте

Если вы используете другие разделители, кроме буквенно-цифровых символов и точек, вы можете использовать одно из этих простых регулярных выражений, чтобы получить значение в любом из двух форматов:

  1. [0-9a-f]+
  2. [.0-9a-f]+

Если вам нужна 100% гарантия формата для любой версии PHP, вы можете написать свою собственную функцию на основе sprintf.

Я признаю, что маловероятно, что uniqid значительно изменится; Я ожидал бы создание других расширений, чтобы обеспечить другие форматы. Еще один комментарий в uniqid документация показывает реализацию UUID в соответствии с RFC 4211. Была также дискуссия на stackoverflow об этом.

3

Другие решения

Я нашел это на сайте php: http://www.php.net/manual/en/function.uniqid.php#95001

Если верить этому, то версия из 13 символов полностью шестнадцатеричная.
Однако версия из 23 символов имеет:

  • 14 символов (шестнадцатеричное)
  • затем точка
  • затем еще 8 символов (десятичные)

Если вам нужно быть полностью уверенным, вы можете убедиться в этом сами: http://sandbox.onlinephpfunctions.com/code/c04c7854b764faee2548180eddb8c23288dcb5f7

0

По вопросам рекламы [email protected]