有没有什么方法可以生成一个不像UUID(GUID)那么长的唯一号码?

时间:2012-08-13 20:54:01

标签: c# uniqueidentifier

  

可能重复:
  Formulas to generate a unique id?

基本上我需要生成一个唯一的数字,但我不希望它太长,例如UUID。大小的一半(如果不是更小)。

任何人都可以想到任何方法吗?

基本上我将有一个可能被多人使用的应用程序,该应用程序生成文件并将它们上传到Web服务器。这些名称必须是唯一的。

顺便说一句,我不打算使用数据库表来跟踪这些内容。

3 个答案:

答案 0 :(得分:3)

生成UUID,只取字符串的前半部分。

如果您担心生成重复的ID,您的选择是使它们非随机和自动递增,或者检查是否存在新生成的ID:

do {
  newId = generateNewId();
} while (idExists(newId));

答案 1 :(得分:0)

如果你需要它是唯一的,请使用UUID并使用网址缩短器。

答案 2 :(得分:0)

激起了我的好奇心:

// create a 32-bit uid:
    var i = BitConverter.ToUInt32(Guid.NewGuid().ToByteArray(), (new Random()).Next(0, 12));
// create a 64-bit uid
    var l = BitConverter.ToUInt64(Guid.NewGuid().ToByteArray(), (new Random()).Next(0, 8));

当然,下面的内容可能同样适用,因为当你截断它时你会失去guid的大部分功能,并且可能会使用随机数:

l = BitConverter.ToUInt64(BitConverter.GetBytes((new Random()).NextDouble()), 0);

...如果您正在寻找64位整数。