1. 程式人生 > >C#中Guid.ToString Method (String)五種格式,以及將將32位的GUID轉為16位及其他格式

C#中Guid.ToString Method (String)五種格式,以及將將32位的GUID轉為16位及其他格式

一、生成各種格式的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;
        }