C#生成唯一的字符串或者数字
2011-09-19 16:36
931 查看
当我们想要获得一个唯一的key的时候,通常会想到GUID。这个key非常的长,虽然我们在很多情况下这并不是个问题。但是当我们需要将这个36个字符的字符串放在URL中时,会使的URL非常的丑陋。
想要缩短GUID的长度而不牺牲它的唯一性是不可能的,但是如果我们能够接受一个16位的字符串的话是可以做出这个牺牲的。
我们可以将一个标准的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);
}
想要缩短GUID的长度而不牺牲它的唯一性是不可能的,但是如果我们能够接受一个16位的字符串的话是可以做出这个牺牲的。
我们可以将一个标准的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);
}
相关文章推荐
- C#生成唯一的字符串或者数字
- 在C#中生成唯一的字符串和数字【GUID】转
- 在C#中生成唯一的字符串和数字
- 在C#中生成唯一的字符串和数字
- C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中
- C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
- C#判断一个字符串是否是数字或者含有某个数字
- C#判断一个字符串是否是数字或者含有某个数字的方法
- 【转】C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
- 生成唯一数字字符串
- Generate unique strings and numbers in C#(生成一个唯一的字符串和数值)
- 将32位md5压缩成8位32进制生成8位长度的唯一英文数字组合字符串
- 生成19纯数字的字符串或者生成32位UUID
- C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
- C#根据字符串生成唯一的数字
- php生成随机字符串可指定纯数字、纯字母或者混合的
- C#生成随机字符串(数字,字母,特殊符号)
- [C#]生成一串包含字符和数字的随机字符串的方法
- [C#]生成一串包含字符和数字的随机字符串的方法
- 判断字符串是否由数字组成 自动生成6位的密码 数据库操作,定位记录返回其值,或者返回默认值