Snowflake ID 生成器与解码器
在你的浏览器中,用 Twitter 或 Discord 纪元生成并解码 64 位的 Snowflake ID。你输入的任何内容都不会离开你的设备。
这款 Snowflake ID 生成器完全在你的浏览器中运行。你输入或解码的 ID、时间戳和字段值绝不会离开你的设备,也不会有任何内容上传到 ArrayKit。
打开 ULID 生成器
关于 Snowflake ID 生成器
这款 Snowflake ID 生成器像 Twitter 和 Discord 那样构建 64 位的 Snowflake ID:把一个毫秒时间戳、一个工作机 id、一个进程 id 和一个每毫秒序列打包进一个 BigInt。选择 Discord 或 Twitter 纪元预设,或以 Unix 毫秒输入你自己的纪元,然后设置时间戳和各字段值来铸造一个 ID。切换到解码,可粘贴任意 Snowflake,并在你选择的纪元下查看精确的毫秒时间戳、它的 ISO 时间,以及工作机、进程和序列位。它非常适合用来逆推一条 Discord 消息是何时发布的、在测试固件中复现一个 ID,或对一套分布式 id 方案做合理性检查。所有的位移都在你的设备上进行;你输入的 ID 和时间戳绝不会被上传。
功能特性
- 从时间戳、工作机、进程和序列生成一个 64 位 Snowflake
- 一键使用 Discord(1420070400000)和 Twitter(1288834974657)纪元预设
- 为任何其他 Snowflake 方案提供以 Unix 毫秒表示的自定义纪元字段
- 解码模式把任意 Snowflake 转换为它的时间戳、ISO 时间和字段位
- 「现在」按钮用你的时钟为时间戳赋值,生成一个当前时间的 ID
- BigInt 运算让全部 64 位保持精确——大 ID 不损失精度
- 当工作机、进程或序列溢出各自的位时给出清晰的范围错误
- 完全在你的浏览器中运行,不向任何服务器发送任何 ID
如何使用 Snowflake ID 生成器
- 选择 Discord、Twitter 或一个自定义纪元
- 在生成中,设置时间戳以及工作机、进程和序列的值
- 复制得到的 64 位 Snowflake ID
- 切换到解码并粘贴一个 Snowflake,读回它的时间戳和各字段
示例
输入
175928847299117063 (Discord epoch)
输出
timestamp: 2016-04-30T11:18:25.796Z
worker: 1 process: 0 sequence: 7
解码一个 Discord Snowflake,可恢复它的创建时间及其字段位。
常见错误与故障排除
- 解码出的时间戳偏差了几十年(例如 1970 年或 2100 年)。 — 你用错了纪元来解码。请把预设切换为与来源匹配的——Discord 与 Twitter 纪元相差数年——或设置精确的自定义纪元。
- 生成报告「Sequence must be between 0 and 4095.」(序列必须在 0 到 4095 之间。) — 序列字段只有 12 位。请让工作机和进程保持在 0–31,序列保持在 0–4095,让每个值都能装进它的位槽。
- 「Timestamp is before the chosen epoch.」(时间戳早于所选纪元。) — 一个 Snowflake 存储的是自其纪元以来的毫秒数,因此时间戳必须等于或晚于纪元。请选择一个更晚的时间,或一个更小的纪元。
- 粘贴的 ID 看起来被取整了,或丢失了最后几位。 — Snowflake 超出了 JavaScript 的安全整数范围,因此请把它们当作字符串。本工具使用 BigInt,但请避免粘贴一个已被其他工具解析为浮点数的 ID。
常见问题
- 什么是 Snowflake ID?
- Snowflake 是 Twitter 和 Discord 使用的一种 64 位 id,它把一个毫秒时间戳、一个工作机(机器)id、一个进程 id 和一个每毫秒序列打包进一个可排序的数字中,因此 id 无需中心计数器就能保持唯一且大致按时间排序。
- 我如何从一条 Discord 消息的 ID 找出它是何时发送的?
- 在选中 Discord 纪元的情况下,把消息或用户 id 粘贴进解码。本工具会移出 42 个时间戳位,加上 Discord 纪元(1420070400000 毫秒),并以 ISO 和 Unix 毫秒显示精确的创建时间。
- Twitter 和 Discord 纪元有什么区别?
- 两种布局的位宽相同,但它们从不同的起点开始计数毫秒:Twitter 使用 1288834974657(2010 年 11 月),Discord 使用 1420070400000(2015 年 1 月)。用错的那个来解码会让每个时间戳都偏移那段差值。
- 为什么工作机和进程上限为 31,序列上限为 4095?
- 该布局给工作机和进程各 5 位(2^5 − 1 = 31),给序列 12 位(2^12 − 1 = 4095)。超过这些上限的值会溢出到下一个字段,因此生成器会拒绝它们。
- 我可以为自己的服务使用自定义纪元吗?
- 可以。选择自定义预设,并以 Unix 毫秒输入你的纪元。之后生成和解码都会使用该值,这让你可以处理任何保持 42/5/5/12 位布局的 Snowflake 风格方案。
- 我生成或解码的 ID 会被发送到任何地方吗?
- 不会。每一次位移都用 BigInt 在你的浏览器中运行。你输入或粘贴的时间戳、id 和字段值绝不会离开你的设备,也不会上传到 ArrayKit。
相关工具
全部 ArrayKit 工具