减少uuid进一步做短串

时间:2009-08-19 19:13:05

标签: c# python string uniqueidentifier uuid

我需要为给定的唯一字符串生成唯一的记录ID。

我尝试使用uuid格式似乎很好。

但我们觉得这是长篇大论。

所以我们需要将uuid字符串9f218a38-12cd-5942-b877-80adc0589315减少到更小。通过删除' - '我们可以节省4个字符。从uuid中删除最安全的部分是什么?我们不需要普遍唯一的id,但我们喜欢使用uuid作为源,但减少了字符串。

我们需要特定于站点/数据库的唯一ID(SQL Server / ADO.NET数据服务)。

任何语言的任何想法或样本都很好

提前致谢

5 个答案:

答案 0 :(得分:9)

为什么不把它转换成64字符串呢?你可以将它减少到22个字符。

Storing UUID as base64 String

答案 1 :(得分:3)

如果您使用的是MS-SQL,您应该只使用uniqueindentifier数据类型,它是紧凑的(16字节),并且由于SQL引擎知道它,它可以使用它优化索引和查询。

答案 2 :(得分:2)

UUID提供(几乎)128位唯一性。您可以将其缩短为16个二进制字节或22个base64编码的字符。我不建议删除UUID的任何部分,否则,它只会失去意义。设计UUID使得所有128位都有意义。如果你想要的少于那个,你应该使用其他一些模式。

例如,如果您可以保证仅使用版本4 UUID,那么您可以只使用前32位,或仅使用最后32位。你失去了独特性,但你有相当随机的数字。只需避免修复的位(版本和变体)。

但如果你不能保证,你会遇到真正的问题。对于版本1 UUID,第一个位对于同一天生成的UUID不是唯一的,并且最后一个位对于在同一系统中生成的UUID不是唯一的。即使您对UUID进行CRC校验,也不能保证您具有16位或32位唯一性。

在这种情况下,只需使用其他方案。使用系统随机数生成器生成32位随机数,并将其用作唯一ID。如果您打算剥离UUID,请不要依赖UUID。

答案 3 :(得分:2)

UUID是128位或16字节。没有编码,你可以得到低至16字节。 UUID通常以十六进制编写,使其成为32字节可读字符串。使用其他编码,您会得到不同的结果:

  1. base-64将3个8位字节转换为4个6位字符,因此16个字节的数据变为22个字符
  2. base-85将4个8位字节转换为5个6.4位字符,因此16个字节的数据变为20个字符
  3. 这完全取决于您是否需要可读字符串以及您想要使用的标准/通用编码。

答案 4 :(得分:0)

UUID有128位。你考虑过对它进行CRC吗?这可以很容易地降低到16或32位,并将使用所有原始信息。如果CRC不够好,您可以始终使用正确散列的前几个字节(例如,SHA256)。

如果你真的想减少UUID,它的格式在RFC 4122中描述。您应该能够找出实现中不需要的部分。