Поддерживает ли RFC 4122 UUID без дефиса?

Я понимаю, что UUID содержит набор символов, сгруппированных в 5 групп в шаблоне символов 8-4-4-4-12 согласно RFC 4122. Пример:

Я использую популярную библиотеку Google for Go для анализа UUID (https://github.com/google/uuid). Эта библиотека, в частности, анализирует оба варианта без каких-либо ошибок.

Я должен проанализировать потенциальный UUID согласно RFC 4122. Но я не уверен, что RFC 4122 учитывает123e4567e89b12d3a456426614174000одинаково действителен, как123e4567-e89b-12d3-a456-42661417400. Я не нашел в официальной документации ни одного материала , в котором бы говорилось, действительны ли UUID без дефиса (или пунктира).

Поделитесь, пожалуйста, своими мыслями, спасибо.

2 ответа

RFC 4122 определяет строковое представление UUID в разделе 3 следующим образом:

        The formal definition of the UUID string representation is
  provided by the following ABNF [7]:

  UUID                   = time-low "-" time-mid "-"
                           time-high-and-version "-"
                           clock-seq-and-reserved
                           clock-seq-low "-" node

Исходя из этого, любой UUID без дефисов не соответствует стандарту.

... Эта библиотека, в частности, без каких-либо ошибок анализирует как 123e4567-e89b-12d3-a456-42661417400, так и 123e4567e89b12d3a456426614174000.

И явно задокументировано, что он способен анализировать нестандартные представления UUID. Цитирую из документации :

func Parse
func Parse(s string) (UUID, error)
Анализ декодирует s в UUID или возвращает ошибку. Декодируются как стандартные формы UUID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx и urn:uuid:xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, так и кодировка Microsoft {xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} и необработанная шестнадцатеричная кодировка: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx .

Но я не уверен, что RFC 4122 считает 123e4567e89b12d3a456426614174000 столь же действительным, как 123e4567-e89b-12d3-a456-42661417400.

UUID — это 16-байтовое двоичное значение, а не строковое представление двоичного значения.

RFC определяет стандартное строковое представление для UUID, но это не делает другие строковые представления недействительными в RFC.

Если вашему приложению требуется ввод в стандартном строковом представлении, то приложение должно проверить строку перед вызовом Parse.

Другие вопросы по тегам