UUID 生成器在线

加载中…

操作选好版本与条数点「生成」,每条右边有「复制」;顶部可切到「随机字符串」与「校验与解析」

猜你喜欢

在线 UUID 生成器:v4 随机版、v7 时间有序版与空 UUID,一次最多 1000 条,可切大写、去掉连字符、加花括号(GUID 写法)或加引号与逗号直接贴进代码数组。另有随机字符串与密钥模式,长度 1~4096 位,十六进制、Base64、Base64URL、Base58 与纯数字预设任选,实时给出约多少位熵;还能贴一条 UUID 进来校验版本与变体、解出时间戳。全部在本机算,不上传。

怎么用

页面顶部常驻一句说明:UUID、随机字符串与密钥都在你这台设备的浏览器里现算现出,不上传、不保存到任何服务器,也不写进浏览器的本地存储。本机只记你选的那些设置。

如果顶部出现一条红色提示,说明这个浏览器环境没有提供 crypto.getRandomValues(安全随机源),页面退回了普通伪随机数——当临时编号仍然够用,但生成的结果别用作密钥。

顶部三个页签:UUID/GUID(默认)、随机字符串、校验与解析。进页面就会先生成一条,省你一次点击。

一、UUID/GUID

  • 版本:
    • v4 · 随机(默认):128 位里除掉 4 位版本位与 2 位变体位,其余 122 位全随机。绝大多数场合用它。
    • v7 · 时间有序:前 48 位是生成时刻的 Unix 毫秒时间戳,后面 74 位随机。按字符串排序就是按生成时间排序,当数据库主键特别合适(下面「原理与冷知识」里讲为什么)。
    • 空 UUID:全零的 00000000-0000-0000-0000-000000000000,标准里专门留出来表示「这里还没有值」。写测试数据、填占位字段时用得着,它不消耗随机数。
  • 生成几条:1 到 1000。批量造测试数据时直接拉到几百条,复制走贴进表格或代码里。
  • 四个格式开关,可以任意组合:
    • 大写:9F8C2A71-…,Windows 注册表与部分语言的默认写法。
    • 去掉连字符:32 位纯十六进制,很多数据库列里存的是这一种。
    • 加花括号:{9f8c2a71-…},注册表与 COM 组件里的 GUID 写法。
    • 加引号与逗号:每条外面套双引号、行尾补逗号(最后一行不补),整段复制走正好是一个代码数组。
  • 结果只有一条时会用大字显示;条数多时一行一条。每一行右边有复制,顶部的复制按钮把这一批按一行一条复制走,下载 .txt 把这一批存成一个文本文件(文件也是在本机现造的,不经过网络)。
  • 条数超过 200 时,页面上只铺前 200 行免得卡顿,但复制与下载拿到的仍是全部。

二、随机字符串/密钥

这一块分两种模式,用页签上方的两个小按钮切换。它是给「顺手要一条」准备的;专门要随机字符串(按位数、按字符集、批量、排除易混字符)的话,随机字符串生成器 那一页做得更细。

按字符——你关心的是「几位」:

  • 长度:1 到 4096,旁边有 16/32/64/128 四个快捷值(32 位随机字符串是最常被要到的一档)。
  • 字符集预设:
    预设 候选字符 个数 每个字符的熵
    自选 下面四个开关+自定义 看你怎么勾 随之变化
    十六进制 0-9 a-f 16 4 位
    Base64 字符表 A-Z a-z 0-9 + / 64 6 位
    Base64URL 字符表 A-Z a-z 0-9 - _ 64 6 位
    Base58 Base62 去掉 0 O I l 58 约 5.86 位
    纯数字 0-9 10 约 3.32 位
  • 选了具体预设时,下面四个开关会灰掉(预设已经把候选字符定死了)。选自选才能自己勾小写、大写、数字、符号,并在自定义字符集里补几个字符——那个框只收可打印的 ASCII 字符,空格、换行与中文会被自动去掉,重复的也只留一个,最多收 128 个。
  • 生成几条:同样 1 到 1000。

按字节(密钥)——你关心的是「多少位」:

  • 密钥长度:16 字节(128 位)/24 字节(192 位)/32 字节(256 位)/64 字节(512 位)。
  • 输出编码:十六进制或 Base64。同样一批字节,十六进制写出来是 2 倍长度的字符,Base64 约 1.34 倍。
  • 接口密钥、会话令牌、加盐值这类地方,规范里写的是「多少位」而不是「多少个字符」,用这个模式最省事:选 32 字节就是 256 位,不用自己拿长度乘 log₂ 去凑。

三、校验与解析

把一条 UUID 贴进文本框(超过 32 个字符时会自动校验一次,也可以点校验),页面会给出:

  • 合不合法;不合法时说清楚卡在哪儿——字符数不对、混进了非十六进制的字符,还是连字符分段的位置不对。
  • 是第几版(v1 到 v8,以及空 UUID 与全 f 的 Max UUID)。
  • 哪种变体:标准变体(RFC 4122/9562)、NCS 向后兼容、微软保留、未来保留。
  • 里面的时间戳:v7 与 v1 会解出生成时刻,显示成年月日时分秒毫秒。
  • 四种常见写法:标准小写、大写、去掉连字符、加花括号,各带一个复制。

输入很宽容:带不带连字符、大写小写、外面套着花括号或引号、前面带 urn:uuid: 前缀,都认。用刚生成的那条按钮可以把上一批里的第一条直接填进来。

怎么看结果

UUID 的 128 位是怎么分的

标准写法 xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx,32 个十六进制字符共 128 位。其中两个位置不是随机的:

  • 第 13 个字符(上面的 M)=版本位,直接写着版本号。所以 v4 的那一位永远是 4,v7 永远是 7。
  • 第 17 个字符(上面的 N)=变体位,标准变体的高两位固定是二进制 10,所以那一位只可能是 8、9、a、b 四个之一。

这两处是肉眼就能查的:看到第 13 位不是 4、第 17 位不在 89ab 里,那多半不是标准生成出来的 UUID,只是一串凑数的十六进制。本页的「校验与解析」正是照这两处判的。

熵读数怎么看

「随机字符串」页签右下角实时给三个读数:候选字符个数、约多少熵、这个强度。熵的公式很简单:

熵 = 长度 × log₂(候选字符个数)

分档写死在页面里,三档:

档位 熵 一句话
偏短 不到 64 位 当临时编号够用,别当密钥
一般 64 ~ 127 位 当唯一编号、短链后缀绰绰有余;长期密钥建议再拉长
够当密钥 128 位及以上 接口密钥、会话令牌、加盐值都够用

几个常见长度对照着看:16 位十六进制=64 位熵;32 位十六进制=128 位熵(等于一条 UUID 的总位数);22 位 Base64=132 位熵;一条 v4 UUID 的随机部分是 122 位,落在「一般」档——这正是「UUID 别直接当密钥」的原因:它设计目标是不重复,不是不可猜;而且很多系统会把 UUID 打进日志、放进网址,密钥不该出现在那些地方。

那条红色提示

顶部出现红条,说明这个浏览器环境拿不到 crypto.getRandomValues。常见于很老的浏览器、某些应用内嵌的简易浏览器,或是在非安全上下文(http 页面)里被限制。此时页面仍然生成,但用的是普通伪随机数——它的内部状态是可以被推算的,当临时编号无妨,当密钥就等于给人留后门。换一个较新的浏览器,或在 https 页面里打开,红条就会消失。

页面提示的那几句

  • 「候选字符是空的」:四个开关一个没勾、自定义字符集也是空的,先勾一类。
  • 「只铺前 200 条」:结果太多时页面上少画一点,复制与下载不受影响。
  • 「自定义字符集里只能放可打印的 ASCII 字符」:你填进去的内容里有空格、换行或中文,已经被去掉了。

常见问题

该选 v4 还是 v7?

看这串编号会不会被按顺序存进索引。只是当个临时标识(请求编号、上传文件名、前端里的列表 key),v4 最省心,也最不泄露信息。要拿它当数据库主键,优先 v7:它前 48 位是时间戳,新记录总是排在索引最末端,写入时不会到处引发页分裂;v4 因为完全随机,每插一条都可能落在索引中间,表一大就明显变慢。代价是 v7 暴露了生成时刻——如果这串编号会公开露出去,而你不希望别人从中读出「这条记录是什么时候建的」,那就还是用 v4。

数据库里该存大写还是小写、要不要连字符?

标准(RFC 9562)规定生成时一律输出小写,解析时大小写都要认。所以新写的系统跟着标准走:小写、带连字符,可读性最好。要不要去掉连字符,取决于存法:用专门的 UUID 类型存(PostgreSQL 的 uuid、SQL Server 的 uniqueidentifier)时,连字符只是显示格式,存进去的是 16 个字节,你怎么写都行;用字符串列存的话,去掉连字符能省 4 个字节、索引也稍小一点,但代价是所有出口都要记得补回来。最要紧的是全库统一:同一列里混着两种写法,等值查询会直接查不到。本页的「校验与解析」可以把任意一种写法翻成另外三种。

32 位随机字符串怎么生成?

「随机字符串」页签,长度点快捷值 32,字符集按用途挑:贴进网址选 Base58,当接口密钥选 Base64URL 或换到「按字节(密钥)」,对接老系统选十六进制。这里说的「32 位」是 32 个字符,不是二进制位——32 个十六进制字符正好 128 位。字符集怎么选、各种长度各有多少熵、怎么排除易混字符,随机字符串生成器 那一页有完整的说法。

一次能生成多少条?会不会把浏览器卡住?

UUID 与字符串都是 1 到 1000 条。1000 条 UUID 是 36000 个字符,瞬间就好;但「1000 条 × 4096 位长字符串」是四百万个字符,生成本身不慢,把它们全画进页面才慢——所以页面上最多铺 200 行,其余交给复制与下载。真要一次上万条,更合适的做法是在服务端用标准库生成。

和站内别的随机工具有什么区别?

随机密码生成器 生成的是给人记、给人输的密码:讲究易读、可念、能记住,还给强度分档与穷举时间的量级;这一页生成的是给程序用的标识符与密钥:讲究格式、版本、批量。只要随机字符串、不要 UUID,去 随机字符串生成器;要一个数字、要掷骰子抛硬币,去 随机数生成器;要在一份名单里抽人、随机分组,去 在线抽签器;想让随机过程当众看得见,去 随机转盘。这几页的随机源同源,都是 crypto.getRandomValues 加拒绝取样。

手机上好用吗?

好用。页面在 400 像素宽的屏幕上完整可见,表单会自动折行,结果行的长字符串会自动换行显示。手机上复制之后尽快贴进目标位置,别让内容在剪贴板里久留——很多应用能读剪贴板。

原理与冷知识

  • 「唯一」靠的不是登记,是数字大。 UUID 最反直觉的一点:没有任何中央机构给它发号,每台机器自己随机取,却几乎不会撞。这件事之所以成立,全靠取值空间大到荒谬——v4 的 122 位随机相当于 5.3×10³⁶ 种可能,按生日问题算,要生成约 103 万亿条才有十亿分之一的概率出现一次重复。换个体感:全世界每秒生成十亿条,连着生成一百年,撞上的概率仍然低得可以忽略。

  • v7 为什么适合当数据库主键。 主流数据库的主键索引是 B+ 树,按键值有序排列。v4 完全随机,每插一条都可能落在树的任意位置,页面被反复劈开、缓存命中率也差,表越大越明显;v7 前 48 位是毫秒时间戳,新记录永远排在最右端,写入模式和自增整数几乎一样,同时又保留了「各机器独立生成、不用问数据库要号」的好处。RFC 9562(2024 年)把 v6、v7、v8 正式写进标准,v7 是其中最被推荐的那一个。

  • 取模偏差是随机取字符时最常见的隐蔽 bug。 「拿一个随机整数对候选字符个数取余」是教科书写法,也最容易出事:取值空间不能被整除时,前面几个余数会多分到一份机会,于是某几个字符出现得更频繁。本页用的是拒绝取样——把 2³² 个取样按候选字符数切成整份,落在末尾零头里的取样丢掉重取,每个字符被取到的机会完全一样。单元测试里专门跑了一万次取样核各字符的频数。

  • Base58 为什么去掉那四个字符。 0(零)与 O(大写欧)、1(一)与 l(小写 L)、I(大写 i),在大多数字体里几乎分不出来。Base58 在 Base62 的基础上剔掉 0、O、I、l,代价是每个字符的熵从 5.95 位降到 5.86 位,换来的是「念得清、抄得对、双击能整串选中」。比特币地址最早用它,后来被大量短链、邀请码沿用。

  • GUID 与 UUID 从来就是一回事。 上世纪八十年代,Apollo Computer 在自家网络计算系统里设计了 UID;后来被开放软件基金会的 DCE 规范吸收,成了 UUID;微软在 COM 组件里大量使用同一格式,管它叫 GUID。2005 年的 RFC 4122 把 UUID 正式标准化,2024 年的 RFC 9562 取代了它并补上 v6、v7、v8。所以今天看到的 GUID、UUID、uniqueidentifier,指的都是同一串 128 位。

  • v1 会把网卡地址写进去,这曾经是个真实的隐私事故。 1999 年的梅丽莎病毒,调查人员正是从被感染文档里的 GUID 反推出了作者机器的网卡地址,成为定位嫌疑人的关键线索之一。此后 v1 的用法逐渐收敛,许多实现改用随机数冒充「节点」字段。这也是本页只做 v4 与 v7 的原因之一:浏览器读不到网卡地址,而且本来也不该读。

  • 空 UUID 与 Max UUID 是标准留的两个特殊值。 全零的空 UUID 表示「这里还没有值」,比在字段里塞 NULL 更方便传递;全 f 的 Max UUID 是 RFC 9562 新加的,表示「最大值」,做范围查询的上界很顺手。两者都不属于任何版本,本页的解析结果会单独把它们认出来。

  • 「唯一」不等于「不可猜」。 这是 UUID 被误用得最多的一处。把 v4 UUID 当成访问令牌(比如「知道这个链接的人就能看」)时,安全性完全依赖那 122 位随机——只要随机源不对,或者用的是 v1、v7 这类带时间戳的版本,攻击者就有了缩小搜索范围的抓手。要当密钥,就用这一页的「按字节(密钥)」模式生成 32 字节,别拿 UUID 凑合。

  • 为什么是 8-4-4-4-12。 这个分段不是随便切的,它对应着最早版本里的字段划分:前 8 位十六进制是时间低位,接着 4 位是时间中位,再 4 位是「版本+时间高位」,再 4 位是「变体+时钟序列」,最后 12 位是节点标识。v4 把这些字段全换成了随机数,但分段写法保留了下来——今天它唯一的作用就是让人一眼认出「这是个 UUID」。

本页更新于 2026-09-25 · 分类:在线工具、休闲小游戏