C#中Guid.ToString Method (String)五種格式,以及將將32位的GUID轉為16位及其他格式
阿新 • • 發佈:2019-02-05
一、生成各種格式的32位GUID
System.Guid.NewGuid().ToString()全球唯一識別符號
(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://msdn.microsoft.com/en-us/library/97af8hh4.aspx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test
{
class Program
{
Program po = new Program();
static void Main(string[] args)
{
Console.WriteLine ("Guid的[N”、“D”、“B”、“P”或“X”]引數表示的含義:");
Console.WriteLine("N:去掉連線符");
Console.WriteLine(System.Guid.NewGuid().ToString("N"));
Console.WriteLine("使用Replace(\"-\",\"\")");
String guid = System.Guid.NewGuid().ToString().Replace("-","");
Console.WriteLine (guid);
Console.WriteLine("D:[hyphens]連字元");
Console.WriteLine(System.Guid.NewGuid().ToString());
Console.WriteLine(System.Guid.NewGuid().ToString("D"));
Console.WriteLine("B:[braces]括弧");
Console.WriteLine(System.Guid.NewGuid().ToString("B"));
Console.WriteLine("P:parentheses]圓括號");
Console.WriteLine(System.Guid.NewGuid().ToString("P"));
Console.WriteLine("X:");
Console.WriteLine(System.Guid.NewGuid().ToString("X"));
}
}
}
執行結果:
二、生成16位GUID
【因為要求生成18位一下的唯一id,第一反應是生成18位以下的GUID,寫完以後我發現還有其他的解決方式,生成13位或者10位的當前時間的時間戳,它也是唯一的】
/// <summary>
/// 根據GUID生成16位GUID
/// </summary>
/// <returns></returns>
public static string GuidTo16String()
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
return string.Format("{0:x}",i-DateTime.Now.Ticks);
}
執行結果:
獲取19位
/// <summary>
/// 根據GUID獲取19位
/// </summary>
/// <returns></returns>
public static long GuidToLongID()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt64(buffer, 0);
}
執行結果:
22位
/// <summary>
/// 生成22位唯一的數字 併發可用
/// Author : 付義方
/// </summary>
/// <returns></returns>
public static string GenerateUniqueID()
{
System.Threading.Thread.Sleep(1); //保證yyyyMMddHHmmssffff唯一
Random d = new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0));
string strUnique = DateTime.Now.ToString("yyyyMMddHHmmssffff") + d.Next(1000, 9999);
return strUnique;
}
/// <summary>
/// 生成22位唯一的數字 併發可用
/// Author : 付義方
/// </summary>
/// <returns></returns>
public static string GenerateUniqueID()
{
System.Threading.Thread.Sleep(1); //保證yyyyMMddHHmmssffff唯一
Random d = new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0));
string strUnique = DateTime.Now.ToString("yyyyMMddHHmmssffff") + d.Next(1000, 9999);
return strUnique;
}