UUID作为全局唯一标识符已成为数据唯一性的黄金标准。随着Flutter技术的普及,掌握跨平台UUID生成方案成为开发者必备技能。本文将深入解析最新RFC9562标准,并手把手教你实现Flutter全版本UUID生成方案。

一、概述

RFC4122和RFC9562是与通用唯一标识符(UUID)相关的国际标准,主要用于规范UUID的生成和格式:

  1. RFC4122

    最初定义了UUID的生成标准(128位唯一标识符),包含版本1到版本5。例如版本1基于时间戳和MAC地址,版本4基于随机数生成。标准格式为32个十六进制字符,分为5组(如 550e8400-e29b-41d4-a716-446655440000

    典型应用:

    • V1(时间戳+MAC地址):分布式系统节点标识
    • V4(随机数):高安全性场景
    • V5(命名空间SHA1):固定资源标识
  2. RFC9562

    2024年发布的新标准,取代了RFC4122。新增了版本6、7、8,优化了时间排序、分布式生成等场景的兼容性。例如版本7基于时间戳和随机数,更适合数据库主键等应用

    重大改进:

    • 新增V6-V8三种算法
    • 优化时间排序性能(V6/V7)
    • 增强分布式生成兼容性(V8)

关系:RFC9562是对RFC4122的扩展和更新,保留原有版本(1-5),补充新版本(6-8)以应对更复杂的需求

版本 生成逻辑 适用场景
V4 真随机数 会话ID、临时凭证
V6 时间有序 数据库主键
V7 毫秒时间戳+随机数 日志追踪
V8 自定义算法 私有协议

二、Flutter代码案例

2.1 添加依赖

flutter pub add uuid

2.2 基础案例

void _uuidTest() {
  var uuid = Uuid();

  // Generate a v1 (time-based) id
  var v1 = uuid.v1();

  var v1Exact = uuid.v1(
      config: V1Options(
          0x1234,
          DateTime.utc(2011, 11, 01).millisecondsSinceEpoch,
          5678,
          [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
          null)); 

  // Generate a v4 (random) id
  var v4 = uuid.v4();

  // Generate a v4 (crypto-random) id
  var v4Crypto = uuid.v4(config: V4Options(null, CryptoRNG()));

  // Generate a v5 (namespace-name-sha1-based) id
  var v5 = uuid.v5(Namespace.url.value, 'www.google.com');

  // Generate a v6 (time-based) id
  var v6 = uuid.v6(); 

  var v6Exact = uuid.v6(
      config: V6Options(
          0x1234,
          DateTime.utc(2011, 11, 01).millisecondsSinceEpoch,
          5678,
          [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
          null));

  // Generate a v7 (time-based) id
  var v7 = uuid.v7();

  var v7Exact = uuid.v7(
      config: V7Options(
          DateTime.utc(2011, 10, 9, 8, 7, 6, 543, 210).millisecondsSinceEpoch, [
        0x01,
        0x23,
        0x45,
        0x67,
        0x89,
        0xab,
        0x01,
        0x23,
        0x45,
        0x67
      ])); 

  // Generate a v8 (time-random) id
  var v8 = uuid.v8(); 

  var v8Exact = uuid.v8(
      config: V8Options(DateTime.utc(2011, 10, 9, 8, 7, 6, 543, 210), [
        0x01,
        0x23,
        0x45,
        0x67,
        0x89,
        0xab,
        0x01,
        0x23,
        0x45,
        0x67
      ])); 

  debugPrint('v1        | $v1');
  debugPrint('v1 exact  | $v1Exact');
  debugPrint('v4        | $v4');
  debugPrint('v4 crypto | $v4Crypto');
  debugPrint('v5        | $v5');
  debugPrint('v6        | $v6');
  debugPrint('v6 exact  | $v6Exact');
  debugPrint('v7        | $v7');
  debugPrint('v7 exact  | $v7Exact');
  debugPrint('v8        | $v8');
  debugPrint('v8 exact  | $v8Exact');
}

输出示例:

flutter: v1        | ff9cd040-d030-11f0-ba79-3ff36f7641da
flutter: v1 exact  | 710b962e-041c-11e1-9234-0123456789ab
flutter: v4        | cb77de1f-6536-4293-a264-eac240cb92c3
flutter: v4 crypto | 30978383-8757-4141-9538-7cb4cd43e798
flutter: v5        | c74a196f-f19d-5ea9-bffd-a2742432fc9c
flutter: v6        | 1f0d030f-fa13-6d10-a5c2-0b144e2093a7
flutter: v6 exact  | 1e1041c7-10b9-662e-9234-0123456789ab
flutter: v7        | 019ae3b5-c366-7b81-8386-55846748dde3
flutter: v7 exact  | 0132e7b8-962f-7123-8567-89ab01234567
flutter: v8        | 20251203-1015-8031-a432-a32940bea43c
flutter: v8 exact  | 20111009-0807-8106-8543-89ab01234567

后续文章优先在 WX公众号"天天开发"中发布,如有需要请搜索关注!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐