8 个版本

0.1.7 2023 年 10 月 11 日
0.1.6 2023 年 10 月 5 日
0.1.5 2023 年 9 月 17 日
0.1.4 2023 年 7 月 31 日
0.1.0 2023 年 6 月 28 日

#356 in 编码

Download history

每月 153 次下载
用于 euid-toys

MIT 许可证

47KB
908

DRAFT#5

可扩展的通用唯一标识符

EUID (可扩展的通用唯一标识符) 是一种设计用于通过改进排序和可扩展性来确保高效数据管理的唯一标识符。EUID 包含毫秒级的时戳,并使用随机数(64 位,最低位)来实现可预测的顺序和唯一性。扩展功能允许附加可选数据,增强 EUID 的多功能性。

时戳和随机性

EUID 包含精确到毫秒级别的 Unix 时戳,以便于排序。然而,当以相同的毫秒生成时,它们的顺序没有保证。为了解决这个问题,64 位随机数被分为两部分:“高”部分递增 1,“低”部分接收随机生成数据。这个过程确保了可预测的排序顺序。

扩展

EUID 包含一个扩展功能,允许附加 15 位数据(范围从 0 到 32767)。如果附加的数据占用少于 15 位,则剩余位用随机生成数据填充。扩展是可选的,如果不需要附加数据,则扩展长度设置为 0。但是,如果需要附加数据,则扩展长度必须与附加数据的位数大小相匹配。

编码、解码和用于错误检测的校验-模符号

EUID 使用一组 10 个数字和 22 个字母进行编码和解码,排除 26 个字母集中的四个字母(I、L、O、U)。在解码过程中,EUID 接受大写和小写字母,将 'i' 和 'l' 视为 1,将 'o' 视为 0。然而,在编码过程中,仅使用大写字母以确保一致性。为了以低成本检测传输和输入错误,将在 EUID 的最后字符串中添加校验-模符号。这些符号编码数字模 127,允许早期错误检测。通过利用剩余位并添加一个符号(2 位 + 5 位),最终的编码 ID 成为 27 个字符的字符串。校验-模值为 127 消除了解码过程中校验-模验证的需要。

符号值 解码符号 编码符号
0 0 O o 0
1 1 I i L l 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 A a A
11 B b B
12 C c C
13 D d D
14 E e E
15 F f F
16 G g G
17 H h H
18 J j J
19 K k K
20 M m M
21 N n N
22 P p P
23 Q q Q
24 R r R
25 S s S
26 T t T
27 V v V
28 W w W
29 X x X
30 Y y Y
31 Z z Z

二进制布局(大端模式)

        0               1               2               3
  0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                         Timestamp High                        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |      Timestamp Low      | N Bit Random + Ops Ext Data |Ext Len|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                             Random                            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                             Random                            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

EUID的关键属性

  • 紧凑性:EUID设计为128位格式,优化空间利用率。
  • 可读性和URL安全性:EUID专门设计为便于人类阅读,并可在URL中使用。
  • 字典序排序:EUID便于字典序排序,生成时支持同一毫秒内单调递增的ID。
  • 可扩展性:EUID可以附加最多15位用户定义数据,提高其通用性。
  • 规范编码:EUID遵循规范编码格式,结果为标准化的27字符字符串表示。
  • 不区分大小写:EUID解码不区分大小写,确保一致的解释。
  • 错误检测:EUID利用校验-模机制来检测打印和传输错误。

参考实现

参考实现位于src目录。

参考

依赖

~215KB