C# GUID序列号转换生成唯一的16位短字符串或19位长数字序号
C# GUID序列号转换生成唯一的16位短字符串或19位长数字序号
扫一扫加微信
当我们想要生成一个唯一key的时候,通常会想到GUID,如:DF52435C-FB0C-46FD-9634-A46BA8723A58
这个key非常的长,缩短GUID的长度且不牺牲它的唯一性是不可能的,若我们能接受一个16位的字符串可以采取下面的算法生成短字符串。
将标准的GUID DF52435C-FB0C-46FD-9634-A46BA8723A58 转换成短的字符串,
如:3c4ebc5f5f2c4edc
算法1:
C# Code:
/// <summary>
/// 将GUID转换为最长16位的序号字符串
/// </summary>
/// <param name="removeZero">移除后面的000,d6acd6cb8621a000==>d6acd6cb8621a</param>
/// <returns></returns>
public static string GetSysID(bool removeZero = true)
{
long result = 1;
int index = 1;
byte[] bs = Guid.NewGuid().ToByteArray();
foreach (byte b in bs)
{
result *= ((int)b + index * 2);
index++;
}
var hex = string.Format("{0:x}", result);
//d6acd6cb8621a000==>d6acd6cb8621a
if (removeZero)//移除后面的000
{
while (hex.Substring(hex.Length - 1, 1) == "0")
hex = hex.Substring(0, hex.Length - 1);
}
return hex;
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 将GUID转换为最长16位的序号字符串
/// </summary>
/// <param name="removeZero">移除后面的000,d6acd6cb8621a000==>d6acd6cb8621a</param>
/// <returns></returns>
public static string GetSysID(bool removeZero = true)
{
long result = 1;
int index = 1;
byte[] bs = Guid.NewGuid().ToByteArray();
foreach (byte b in bs)
{
result *= ((int)b + index * 2);
index++;
}
var hex = string.Format("{0:x}", result);
//d6acd6cb8621a000==>d6acd6cb8621a
if (removeZero)//移除后面的000
{
while (hex.Substring(hex.Length - 1, 1) == "0")
hex = hex.Substring(0, hex.Length - 1);
}
return hex;
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
算法2:
C# Code:
/// <summary>
/// 将一个标准的GUID转换成短的字符串如:3d4ebc5f5f2c4ede,生成1亿次都不会出现重复。
/// </summary>
/// <returns></returns>
public static 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);
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 将一个标准的GUID转换成短的字符串如:3d4ebc5f5f2c4ede,生成1亿次都不会出现重复。
/// </summary>
/// <returns></returns>
public static 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);
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
将标准的GUID获得一个19位长的序列,8346734568923542345,生成1亿次都不会出现重复。
C# Code:
/// <summary>
/// 获得一个19位长的序列,8346734568923542345,生成1亿次都不会出现重复。
/// </summary>
/// <returns></returns>
public static string GenerateIntID()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt64(buffer, 0).ToString();
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 获得一个19位长的序列,8346734568923542345,生成1亿次都不会出现重复。
/// </summary>
/// <returns></returns>
public static string GenerateIntID()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt64(buffer, 0).ToString();
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
扫一扫加微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网