缩写UUID

问题描述 投票:3回答:1

当我们只知道目标的id时,有什么好的方法可以将UUID缩写到用户界面的按钮中?

GitHub似乎对提交ID的缩写是从头开始取7个字符。例如 b1310ce6bc3cc932ce5cdbe552712b5a3bdcb9e5 会出现在按钮中,作为 b1310ce. 虽然这个较短的版本并不完美,但在显示它的上下文中已经足够看起来很独特了。我正在寻找一个类似的解决方案,这将适用于UUIDs。我想知道的是UUID的某些部分比另一个更随机。

最直接的方案是在破折号处进行分割,并使用第一部分。UUID 42e9992a-8324-471d-b7f3-109f6c7df99d 就会被缩写为 42e9992a. 所有我能想到的解决方案似乎都是一样的武断。也许有一些我没有想到的框架外的用户界面设计方案。

user-interface uuid user-experience
1个回答
1
投票

UUID的熵在UUID V1和V2的前几位最高,V3、V4和V5则分布均匀。所以,前N个字符不比其他任何N个字符子集差。

对于N=8,即第一个破折号之前的组,在你可以合理显示在一个GUI屏幕内的列表中出现碰撞的几率是微乎其微的。


2
投票

问题是你是想显示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'

0
投票

想了一会儿,我意识到短git提交哈希是作为命令行命令的一部分使用的。由于UUID和图形用户界面不存在这个要求,我干脆决定用省略号来表示缩写。像这样 42e9992...

© www.soinside.com 2019 - 2024. All rights reserved.