我想创建一个函数,使我能够始终根据这两个输入参数生成唯一值:
public string ReturnUniqueValue(DateTime date, string ID)
{
// Logic here
}
日期参数采用以下格式:
2017-08-14 11:55:32.00
虽然ID的格式如下:
112452573848
我想生成一个唯一的哈希,其长度为40个字符,并且它永远不会重复。
这是否适用于datetime参数+唯一ID字符串?
我认为日期时间永远不会相同(几乎不可能),因此应该能够始终生成唯一值?
答案 0 :(得分:1)
你可以
在代码中:
public string ReturnUniqueValue(DateTime date, string ID)
{
var result = default(byte[]);
using (var stream = new MemoryStream())
{
using (var writer = new BinaryWriter(stream, Encoding.UTF8, true))
{
writer.Write(date.Ticks);
writer.Write(ID);
}
stream.Position = 0;
using (var hash = SHA256.Create())
{
result = hash.ComputeHash(stream);
}
}
var text = new string[20];
for (var i = 0; i < text.Length; i++)
{
text[i] = result[i].ToString("x2");
}
return string.Concat(text);
}
注意:如果您只想为多个参数提供单个唯一值,则应该已经进行了简单的连接。由于您明确要求使用包含40个字符的“哈希”,因此这种更精细的解决方案可能更适合。
注意:将此扩展到更多相同类型的参数(例如两个字符串)应包括流中的参数位置以避免冲突((a,b)!=(b,a))。