C# GUID序列号转换生成唯一的16位短字符串或19位长数字序号
作者:C/S框架网|www.cscode.ne  发布日期:2021/03/07 18:24:25
  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




算法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获得一个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




C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


上一篇 下一篇