隐藏

C#中Guid.ToString (String)五种格式,以及将32位的GUID转为16位及其他格式

发布:2021/6/18 23:46:33作者:管理员 来源:本站 浏览次数:1147

一、生成各种格式的32位GUID 
System.Guid.NewGuid().ToString()全球唯一标识符 (GUID是微软对UUID的标准实现)
(GUID) 是一个字母数字标识符,用于指示产品的唯一性安装。在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用GUID。 
①GUID的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID值。 
②GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。在 Windows 平台上,GUID 
应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。 
③Guid.NewGuid()是指生成唯一码的规则 
System.Guid.NewGuid().ToString(format); 
说明符 返回值的格式N 32位字符:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxD 由连字符分隔的 32 位数字: 
 

该图来自:https://docs.microsoft.com/en-us/dotnet/api/system.guid.tostring?redirectedfrom=MSDN&view=netframework-4.8#System_Guid_ToString_System_String


  1. /// <summary>
  2. /// 获取GUID的方法(默认是有连接符的32位数字)
  3. /// </summary>
  4. /// <param name="gUIDType">GUID的生成类型</param>
  5. /// <returns>返回GUID的字符串</returns>
  6. public string GetGUID(GUIDType gUIDType=GUIDType.D)
  7. {
  8. string tmpGUID=string.Empty;
  9. switch (gUIDType)
  10. {
  11. case GUIDType.N:
  12. //标识符N的生成格式(没有连接符的32位数字)
  13. tmpGUID = Guid.NewGuid().ToString(GUIDType.N.ToString());
  14. break;
  15. case GUIDType.D:
  16. //标识符N的生成格式(有连接符的32位数字)
  17. tmpGUID = Guid.NewGuid().ToString(GUIDType.D.ToString());
  18. break;
  19. case GUIDType.B:
  20. //标识符N的生成格式(有连接符和花括号的32位数字)
  21. tmpGUID = Guid.NewGuid().ToString(GUIDType.B.ToString());
  22. break;
  23. case GUIDType.P:
  24. //标识符N的生成格式(有连接符和括号的32位数字)
  25. tmpGUID = Guid.NewGuid().ToString(GUIDType.P.ToString());
  26. break;
  27. case GUIDType.X:
  28. //标识符N的生成格式(四个十六进制值用大括号括起来,其中第四个值是八个十六进制值的子集,这些值也用大括号括起来)
  29. tmpGUID = Guid.NewGuid().ToString(GUIDType.X.ToString());
  30. break;
  31. default:
  32. break;
  33. }
  34. return tmpGUID;
  35. }
  36. //五种生成GUID的枚举
  37. public enum GUIDType
  38. {
  39. N,
  40. D,
  41. B,
  42. P,
  43. X,
  44. }

二、生成16位GUID  


  1. /// <summary>
  2. /// 根据GUID生成16位的唯一ID
  3. /// </summary>
  4. /// <returns></returns>
  5. public string GUIDTO16()
  6. {
  7. long lg = 1;
  8. foreach (byte b in Guid.NewGuid().ToByteArray())
  9. {
  10. lg *= ((int)b+1);
  11. }
  12. string tmp = string.Format("{0:x}",lg-DateTime.Now.Ticks);
  13. return tmp;
  14. }

三、生成22位的唯一数字,并发可用


  1. /// <summary>
  2. /// 生成22位的唯一数字,并发可用
  3. /// </summary>
  4. /// <returns></returns>
  5. public string GetUniqueIDTO22()
  6. {
  7. System.Threading.Thread.Sleep(1);
  8. //保证yyyyMMddHHmmssffff唯一
  9. Random rd = new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(),0));
  10. string strUniqueID = DateTime.Now.ToString("yyyyMMddHHmmssffff")+rd.Next(1000,9999);
  11. return strUniqueID;
  12. }