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




算法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框架网|原创作品.质量保障.竭诚为您服务


版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

C# GUID序列转换生成唯一16字符串19数字序号
C# 将GUID转换为最16字符串序号
C# 生成日期时间数字唯一序号,尾部添加指定位数长度随机码
文件目录文件名与文件名互转换C#.Net
生成流水号,数字序号可以指定长度,SP下载
新增记录时自动生成记录序号号码(单据号码)并填充文本框
C#.NET信通用接口设计-调用信API案例|C/S框架网
TypeConverter.ConvertFromString 通用方法:字符串转换为具体类型
C#类扩展方法,字符串对象转换,常用扩展方法StringExtensions
C#.Net 转换人民币大写金额
C#.NET 对象(字符串)转换常用扩展方法
C#正则表达式查找替换指定字符串(标识)范围内容
C#Winform验证输入框内容是数字
C#日期类型转换工具(时间戳,字符串,long,byte类型互转)
C# 将数组、集合、可枚举类型转换成逗号分隔字符串(String.Join)
C#.NET 定义动态对象dynamic以及转换JSON字符串
数字签名(Data Sign)+存取令牌(Access Token)双重安全请求WebApi接口
取消用户ID长度为1限制
数据字典窗体根据某个字段类型自动生成改类型流水序号
C#模拟百度搜索词自动语义匹配,使用分词算法抽取关键词