UUID ≠ текст
Для пояснения, UUID на самом деле 128-битное значение , а не текст или цифры.Вы можете думать о них как о 128-битных целых числах без знака.
Шестнадцатеричная строка
Люди не очень хорошо читают и пишут 128-битные символы 128 1
и 0
.Когда UUID должен быть написан для использования человеком, мы используем строку 16 шестнадцатеричный (цифры 0
- 9
и буквы a
- f
).Мы используем 32 шестнадцатеричных символа, сгруппированных с 4 дефисами, чтобы представить эти 128 битов в общей сложности 36 символов.Например:
550e8400-e29b-41d4-a716-446655440000
Нет «специальных» символов
Что касается «специальных символов», упомянутых вВопрос, вы увидите только эти 23 возможных символа в шестнадцатеричном представлении UUID:
abcdefABCDEF1234567890-
Нижний регистр необходим по спецификации
В последней международной спецификации от 2008-08 говорится (выделено мое):
6.5.4 Программное обеспечение, генерирующее шестнадцатеричное представление UUID , не должно использовать верхний регистр буквы.ПРИМЕЧАНИЕ. - Рекомендуется, чтобы шестнадцатеричное представление, используемое во всех читаемых человеком форматах, было ограничено строчными буквами.Программное обеспечение, обрабатывающее это представление, однако, должно принимать как прописные, так и строчные буквы, как указано в 6.5.2.
Нарушения Общие
Однако Microsoft, Apple и другие обычнонарушать строчные правила.В какой-то момент Microsoft выпустила программное обеспечение, которое генерировало смешанный регистр (с использованием прописных и строчных букв), что, по-видимому, является непреднамеренной функцией.
Сделайте так, как указано в спецификации:
- Используйте строчные буквы для вывода.
- Допускайте либо строчные, либо прописные буквы для ввода.
Документация Java для метода UUID
class 'toString
документирует в BNF , что верхний регистр допускается при генерации строки, что противоречит стандарту UUIDСпецификация.Однако фактическое поведение класса и его метода toString
в реализации Oracle для Java 8 является правильным, с использованием строчных букв для вывода, но допускается либо прописных, либо строчных букв для ввода.
Ввод вв нижнем / верхнем регистре:
UUID uuidFromLowercase = UUID.fromString ( "897b7f44-1f31-4c95-80cb-bbb43e4dcf05" );
UUID uuidFromUppercase = UUID.fromString ( "897B7F44-1F31-4C95-80CB-BBB43E4DCF05" );
Вывод только в нижний регистр:
System.out.println ( "uuidFromLowercase.toString(): " + uuidFromLowercase );
System.out.println ( "uuidFromUppercase.toString(): " + uuidFromUppercase );
uuidFromLowercase.toString (): 897b7f44-1f31-4c95-80cb-bbb43e4dcf05
uuidFromUppercase.toString (): 897b7f44-1f31-4c95-80cb-bbb43e4dcf05
См. Этот код, запущенный в режиме реального времени в IdeOne.com .
нользначение
Когда UUID еще не известен, вы можете использовать специальный UUID, состоящий из всех нулей.
00000000-0000-0000-0000-000000000000
Примеры значений
Некоторые примеры значений UUID можно увидеть с помощью любого из множества вебсайты, которые генерируют ценности.Например:
Или используйте инструмент командной строки.Почти каждая операционная система поставляется в комплекте с таким инструментом.В Mac OS X запустите Terminal.app и введите uuidgen
.