Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 进一步减少uuid以生成短字符串_C#_Python_String_Uniqueidentifier_Uuid - Fatal编程技术网

C# 进一步减少uuid以生成短字符串

C# 进一步减少uuid以生成短字符串,c#,python,string,uniqueidentifier,uuid,C#,Python,String,Uniqueidentifier,Uuid,我需要为给定的唯一字符串生成唯一记录id 我尝试使用uuid格式,这似乎很好 但我们觉得这很长 因此,我们需要将uuid字符串9f218a38-12cd-5942-b877-80adc0589315缩减为更小。通过删除“-”,我们可以节省4个字符。从uuid中删除最安全的部分是什么?我们不需要通用的唯一id,但我们喜欢使用uuid作为源,但减少了字符串 我们需要特定于站点/数据库的唯一id(SQL Server/ADO.NET数据服务) 任何语言的任何想法或样本都可以 提前感谢为什么不把它转换成

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

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

但我们觉得这很长

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

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

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


提前感谢

为什么不把它转换成64进制的字符串呢?这样你可以把它减少到22个字符


如果您使用的是MS-SQL,您可能应该只使用UniqueIdentifier数据类型,它既紧凑(16字节),又因为SQL引擎知道它,所以可以使用它优化索引和查询

UUID有128位。你考虑过做一个CRC吗?这样就可以很容易地将其降到16或32位,并使用所有原始信息。如果CRC不够好,您可以始终使用适当哈希的前几个字节(例如SHA256)

如果您真的想减少UUID,其格式如中所述。您应该能够从中找出您的实现不需要的部分。

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

例如,如果您可以保证只使用版本4的UUID,那么您可以只使用前32位,或者只使用最后32位。你失去了唯一性,但你有相当多的随机数。只需避免固定的位(版本和变体)

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


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

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

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

  • 这完全取决于您是否想要可读字符串以及您想要使用的编码的标准/通用程度。

    UUID也是16字节,所以这根本不会使它变小。Glenn,UniqueIdentifier==UUID,但OP肯定在谈论将其存储为字符串。这取决于他需要多少唯一性。这就是为什么我建议使用CRC和另一种方法。不幸的是,如果不去掉UUID的状态,就无法减少UUID的原始位。这是因为需要128位的随机性才能被视为UUID,并将冲突的可能性充分降低到接近零的水平。他不需要将其视为UUID。他需要它是(本地)唯一的一组位。