您的位置:首页 > 编程语言 > C#

C#根据字符串生成唯一的数字

2011-07-17 11:13 2759 查看
根据字符串生成唯一的数字标识, 一般我们都会采用GUID, 根据字符串计算MD5, 计算出来的MD5码就是一个GUID.

但是GUID太长了, 是一个128位的数字, 在存储的时候, 会很占地方, 考虑能不能生成一个短一点的数字, 比如32为的数字, 搜了搜, 有人给出了这样的方法.

: 我们可以将一个标准的GUID 21726045-e8f7-4b09-abd8-4bcc926e9e28 转换成短的字符串 3c4ebc5f5f2c4edc

下面的方法会生成一个短的字符串,并且这个字符串是唯一的。重复1亿次都不会出现重复的,它也是依照GUID的唯一性来生成这个字符串的。

private string GenerateStringID()
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
return string.Format("{0:x}", i - DateTime.Now.Ticks);
}

如果想生成一个数字序列而不是字符串,你将会获得一个19位长的序列。下面的方法会把GUID转换为Int64的数字序列。

private long GenerateIntID()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt64(buffer, 0);
}

看起来这个方法是可行的, 但是暂时没有找到严谨的数据论证, 可以保证多高的不冲突性能. 毕竟是做key值, 如果有一个重复, 程序就挂了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: