Сокращение UUID - PullRequest
       5

Сокращение UUID

7 голосов
/ 27 мая 2020

Что было бы хорошим способом сокращения UUID для использования в кнопке в пользовательском интерфейсе, когда идентификатор - это все, что мы знаем о цели?

Кажется, GitHub сокращает идентификаторы фиксации, беря 7 символов из начало. Например, b1310ce6bc3cc932ce5cdbe552712b5a3bdcb9e5 будет отображаться на кнопке как b1310ce. Хотя эта более короткая версия и не идеальна, ее достаточно, чтобы выглядеть уникально в том контексте, в котором она отображается. Я ищу аналогичное решение, которое подойдет для UUID. Мне интересно, какая часть UUID более случайна, чем другая.

Самый простой вариант - разделение на da sh и использование первой части. Тогда UUID 42e9992a-8324-471d-b7f3-109f6c7df99d будет сокращен как 42e9992a. Все решения, которые я могу придумать, кажутся одинаково произвольными. Возможно, есть какое-то нестандартное решение для дизайна пользовательского интерфейса, о котором я не думал.

Ответы [ 3 ]

2 голосов
/ 27 мая 2020

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

(...) Хотя эта более короткая версия не идеальна, достаточно, чтобы посмотреть уникальный в контексте, в котором он отображается. (...)

вы можете использовать хеширование.

Хеширование :

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

Хеширование очень распространено и простое в использовании на многих популярных языках; простой подход в Python:

import hashlib
import uuid
encoded_str = uuid.UUID('42e9992a-8324-471d-b7f3-109f6c7df99d').bytes
hash_uuid = hashlib.sha1(encoded_str).hexdigest()
hash_uuid[:10]
'b6e2a1c885'

Ожидается, что небольшое изменение в строке приведет к тому, что другая строка будет правильно отображать уникальность.

# Second digit is replaced with 3, rest of the string remains untouched 
encoded_str_two = uuid.UUID('43e9992a-8324-471d-b7f3-109f6c7df99d').bytes
hash_uuid_two = hashlib.sha1(encoded_str_two).hexdigest()
hash_uuid_two[:10]
'406ec3f5ae'
1 голос
/ 03 июня 2020

Энтропия UUID является самой высокой в ​​первых битах для UUID V1 и V2 и равномерно распределена для V3, V4 и V5. Итак, первые N символов не хуже, чем любое другое подмножество N.

Для N = 8, то есть группы перед первым da sh, шансы на то, что в списке будет конфликт, вы могли бы разумно отображать на одном экране GUI исчезающе мало.

0 голосов
/ 03 июня 2020

Поразмыслив над этим, я понял, что короткий git commit ha sh используется как часть команд командной строки. Поскольку этого требования не существует для UUID и графических пользовательских интерфейсов, я просто решил использовать многоточие для сокращения. Вот так 42e9992...

...