削减uuid进一步做短串

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

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

但我们觉得这很长。

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

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

任何语言的任何想法或样本都可以

提前致谢

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

将UUID存储为base64字符串

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

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

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

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

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

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

  1. base-64将3个8位字节转换为4个6位字符,因此16个字节的数据变为22个字符长
  2. base-85将4个8位字节转换为5个6.4位字符,因此16个字节的数据变为20个字符长

这一切都取决于您是否需要可读字符串以及您想要使用的标准/通用编码。

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

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