我需要为给定的唯一字符串生成唯一的记录ID。
我尝试使用uuid格式似乎很好。
但我们觉得这是长篇大论。
所以我们需要将uuid字符串9f218a38-12cd-5942-b877-80adc0589315减少到更小。通过删除' - '我们可以节省4个字符。从uuid中删除最安全的部分是什么?我们不需要普遍唯一的id,但我们喜欢使用uuid作为源,但减少了字符串。
我们需要特定于站点/数据库的唯一ID(SQL Server / ADO.NET数据服务)。
任何语言的任何想法或样本都很好
提前致谢
答案 0 :(得分:9)
为什么不把它转换成64字符串呢?你可以将它减少到22个字符。
答案 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字节可读字符串。使用其他编码,您会得到不同的结果:
这完全取决于您是否需要可读字符串以及您想要使用的标准/通用编码。
答案 4 :(得分:0)
UUID有128位。你考虑过对它进行CRC吗?这可以很容易地降低到16或32位,并将使用所有原始信息。如果CRC不够好,您可以始终使用正确散列的前几个字节(例如,SHA256)。
如果你真的想减少UUID,它的格式在RFC 4122中描述。您应该能够找出实现中不需要的部分。