进一步缩减UUID以生成短字符串
我需要为给定的唯一字符串生成一个独特的记录ID。
我尝试使用UUID格式,这看起来不错。
但是我们觉得这个长度有点长。
所以我们想把这个UUID字符串 9f218a38-12cd-5942-b877-80adc0589315 缩短一些。通过去掉'-',我们可以节省4个字符。那么,从UUID中去掉哪个部分是最安全的呢?我们不需要全球唯一的ID,但我们想用UUID作为基础,同时缩短字符串。
我们需要的是特定于网站/数据库的唯一ID(SQL Server/ADO.NET数据服务)。
任何语言的想法或示例都可以。
提前谢谢你!
5 个回答
如果你在使用MS-SQL数据库,建议你使用uniqueidentifier这种数据类型。它的大小很小,只有16个字节。而且因为SQL引擎对它很了解,所以在使用它的时候,可以更好地优化索引和查询速度。
UUID(通用唯一标识符)几乎提供了128位的唯一性。你可以把它缩短成16个二进制字节,或者22个用Base64编码的字符。不过,我不建议你去删减UUID的任何部分,否则它就失去了原本的意义。UUID的设计是为了让这128位的每一位都有其特定的含义。如果你需要更少的位数,最好使用其他的方案。
举个例子,如果你能保证只使用版本4的UUID,那么你可以只取前32位或者后32位。这样虽然会失去一些唯一性,但你会得到相对随机的数字。只要避免使用那些固定的位(比如版本和变体),就可以了。
但是如果你不能保证这一点,那就会遇到真正的问题。对于版本1的UUID来说,生成在同一天的UUID的前面几位可能不会唯一,而在同一个系统中生成的UUID的后面几位也可能不唯一。即使你对UUID进行CRC校验,也不能保证你会得到16位或32位的唯一性。
在这种情况下,最好使用其他的方案。可以使用系统的随机数生成器生成一个32位的随机数,作为你的唯一标识符。如果你打算缩短UUID的长度,就不要依赖UUID了。
为什么不直接把它转换成一个 base 64 字符串呢?这样可以把它缩短到 22 个字符。