Поддерживает ли 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.