基本上我需要生成一个唯一的数字,但我不希望它太长,例如UUID。大小的一半(如果不是更小)。
任何人都可以想到任何方法吗?
基本上我将有一个可能被多人使用的应用程序,该应用程序生成文件并将它们上传到Web服务器。这些名称必须是唯一的。
顺便说一句,我不打算使用数据库表来跟踪这些内容。
答案 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位整数。