C#中使用GUID生成唯一标识符的方法与格式详解

沈亦白
沈亦白
发布时间:2026-10-16| 7人浏览过
原创

GUID(全局唯一标识符)是用于在网络或系统中确保实体唯一性的标准。在C#开发中,通过System.Guid结构可轻松生成和处理GUID。本文涵盖GUID的基础概念、内置格式化输出方式以及基于字节转换的轻量级ID生成技巧。

GUID简介与核心优势

全局唯一标识符(GUID),也被称为通用唯一识别码(UUID)。它是由算法生成的128位二进制数字,旨在确保在分布式环境或多节点系统中,生成的标识符在全球范围内保持唯一。

GUID的主要优势在于其去中心化的生成机制。无需中央注册机构,任何计算机均可独立生成理论上不重复的唯一标识。虽然生成出的字符串较长,但在数据库主键、会话标识等场景下,能有效避免碰撞风险,简化系统架构设计。

C#中GUID的生成与格式化

在.NET框架中,System.Guid类提供了丰富的功能来处理GUID。最核心的操作是使用静态方法 Guid.NewGuid() 来生成一个新的唯一标识符。

为了适应不同的业务需求(如存储限制、展示美观度),GUID支持多种格式化字符串进行转换。这些格式通过 .ToString(string format) 方法指定:

  • D 格式(默认):包含连字符的标准形式。例如:3294b8e6-1b8d-4c5a-9f3e-7d8c2a1b0e9f。
  • N 格式:仅包含十六进制数字,无分隔符。常用于短链接或紧凑存储。例如:3294b8e61b8d4c5a9f3e7d8c2a1b0e9f。
  • B 格式:大括号包裹的标准形式。例如:{3294b8e6-1b8d-4c5a-9f3e-7d8c2a1b0e9f}。
  • P 格式:圆括号包裹的标准形式。例如:(3294b8e6-1b8d-4c5a-9f3e-7d8c2a1b0e9f)。
  • X 格式:特定的十六进制变体,包含0x前缀和花括号分组。例如:{0x3294b8e6,0x1b8d,0x4c5a,{0x9f,0x3e,0x7d,0x8c,0x2a,0x1b,0x0e,0x9f}}。

若不传入参数或传入空字符串,系统将默认使用 D 格式。传入其他未定义的值会抛出异常。

完整代码示例

以下代码展示了如何在C#控制台中调用上述各种格式化方法,并演示了两种基于GUID数据流的自定义ID生成逻辑。

class Program
{
    static void Main(string[] args)
    {
        // 1. 标准格式生成示例
        var uuid = Guid.NewGuid().ToString();      // 默认 D 格式: e.g., 3294b8e6-1b8d-4c5a-9f3e-7d8c2a1b0e9f
        var uuidN = Guid.NewGuid().ToString("N");  // N 格式: e.g., 3294b8e61b8d4c5a9f3e7d8c2a1b0e9f
        var uuidD = Guid.NewGuid().ToString("D");  // D 格式: e.g., 3294b8e6-1b8d-4c5a-9f3e-7d8c2a1b0e9f
        var uuidB = Guid.NewGuid().ToString("B");  // B 格式: e.g., {3294b8e6-1b8d-4c5a-9f3e-7d8c2a1b0e9f}
        var uuidP = Guid.NewGuid().ToString("P");  // P 格式: e.g., (3294b8e6-1b8d-4c5a-9f3e-7d8c2a1b0e9f)
        var uuidX = Guid.NewGuid().ToString("X");  // X 格式: e.g., {0x3294b8e6,0x1b8d,0x4c5a,{0x9f...}}

        // 2. 自定义简短ID生成示例
        var shortId1 = GenerateShortId1(); // 返回短字符串
        var longId2 = GenerateShortId2();  // 返回长整型数值
    }

    /// 
    /// 方法1:将GUID字节转换为乘积再减去时间戳,生成较短的十六进制串
    /// 
    private static string GenerateShortId1()
    {
        long i = 1;
        foreach (byte b in Guid.NewGuid().ToByteArray())
        {
            i *= ((int)b + 1);
        }
        // 减去当前时间刻度以减少碰撞概率,转为小写十六进制
        return string.Format("{0:x}", i - DateTime.Now.Ticks);
    }

    /// 
    /// 方法2:取GUID前8个字节转换为Int64,生成更紧凑的数字ID
    /// 
    private static long GenerateShortId2()
    {
        byte[] buffer = Guid.NewGuid().ToByteArray();
        return BitConverter.ToInt64(buffer, 0);
    }
}

注意事项与排错

在使用 ToString() 方法时,务必注意格式参数的有效性。除了上述列出的 D、N、B、P、X 外,其他任何非空字符串输入都将导致运行时报错。若需存储或传输GUID,建议优先选择 N 格式以节省空间,或在需要人类可读性时选择默认的 D 格式。

以上就是C#使用GUID(全局统一标识符)的详细内容,更多关于C#开发技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。