robertboeser / robo-id
Requires
- php: ^8.0
- skleeschulte/base32: ^0.0.2
README
格式
RoboID 有两部分,一部分是基于时间的(T)和一部分是随机的(R)。基于时间的一部分基于 Unix 时间戳,由 45 位组成。随机部分由 30 位(短版本)或 80 位(长版本)组成。
长版本将与 uuid 兼容。这意味着在随机部分,位 0-3(uuid 版本)设置为 'B',位 16-17(uuid 变体)设置为 10b。
有三种不同的字符串表示形式,以及一种 json 表示形式。每个实现都必须接受并导出 json 表示形式。
十六进制
S: TTTTTTTTTTTT-RRRRRRRR L: TTTTTTTTTTTT-RRRRRRRRRRRRRRRRRRRR X: TTTTTTTTTTTT-RRRRRRRRRRRRRRRRRRRR-XXXXXXXXXXXXXXXX 时间的部分使用零左填充到 48 位。随机部分使用零右填充到 32 或 80 位。
Base32
S: TTTTTTTTT-RRRRRR L: TTTTTTTTT-RRRRRRRRRRRRRRRR X: TTTTTTTTT-RRRRRRRRRRRRRRRR-XXXXXXXXXXXXXXXX 基于时间的部分和随机部分使用 base32 crockford 字符集编码。使用这种表示形式不需要填充。
UUID
AAAAAAAA-BBBB-VCCC-WDDD-EEEEEEEEEEEE A 和 B 一起构成基于时间的部分。基于时间的部分使用 100b 左填充到 48 位。这确保了 ID 以不同于 '0' 的字符开始。V 被硬编码为 'B'。在长版本中,C 到 E 一起构成随机部分。在短版本中,C 和 D 被填充为零。随机部分在 E 中编码,并使用零右填充。
JSON
{ "v": "S|L|X", // 版本 "t": "基于时间的部分", // 十六进制编码 "r": "随机部分", // 十六进制编码 "x": "扩展部分" // 十六进制编码 }