用户名生成器

按 GitHub、Twitter/X、微信、抖音四套真实平台的字符集与长度区间批量生成候选用户名,避开保留字,并标出与已有用户名之间“看起来像但不是同一个”的冲突。

拼接方式
已有用户名自检(服务端计算结果):共 4 条,检出 1 组大小写冲突(octocat ↔ OctoCat,Intl.Collator 在 sensitivity: 'base' 下判为同一个)和 1 组同形字冲突(nova_river ↔ nоva_river,第 4 条的第二个字符是西里尔字母 о U+043E,不是拉丁字母 o U+006F)。
#候选用户名长度平台校验与已有用户名的冲突
1amber-nova43113通过无
2cedar-grove90714通过无
3delta-ember21814通过无
4falcon-prism64015通过无
5harbor-ivory35215通过无
6jade-lotus78413通过无
7kelp-maple12913通过无
8nova-onyx50612通过无
9quartz-river87315通过无
10solar-tower26414通过无
11umber-vertex39515通过无
12willow-zenith61816通过无

上表是写在 HTML 里的固定演示数据(长度 12~16 字符,平均 14.08),点「生成候选用户名」后才会换成随机结果。提示:在「生成数量」输入框里按 Enter 可直接生成。

使用方法

  1. 先在「平台规则」里选目标站点。示例默认选 GitHub:只允许字母、数字和短横线,长度 1~39 位,首尾不能是短横线,也不能出现连续两个短横线。
  2. 在「生成数量」填 12(示例值,与上面演示表一致),允许 1~30 的整数。
  3. 「已有用户名」默认是 octocat, OctoCat, nova_river, nоva_river 四条,用逗号分隔。这一格不是必填,但填上之后,生成结果里与它冲突的条目会被标红;第 4 条里的 о 是西里尔字母 U+043E,不是拉丁字母 o,用来演示同形字冲突。
  4. 拼接方式两项默认都勾:两个词之间加分隔符(GitHub 档用短横线,Twitter / 微信 / 抖音档用下划线,通用档不输出分隔符),并在末尾追加 100~999 的三位数字。
  5. 点「生成候选用户名」(或在数量输入框里按 Enter),表格逐条给出长度、平台校验结论和冲突情况;点「复制全部(TSV)」可直接贴进表格,点「下载 CSV」存成带 BOM 的文件。

这个用户名生成器能解决什么问题

一是注册前的备选清单:注册新账号时想一次拿到十几条符合目标平台规则的候选名,不用自己想、也不用反复被表单退回。生成结果已经按所选平台的字符集和长度区间过滤过一遍。

二是跨平台同名:四个平台的规则并不一样——GitHub 收短横线但不收下划线,Twitter 收下划线但不收短横线,微信两者都收却要求首字符不是数字,抖音不收短横线。选「通用」档时,工具直接把四套字符集求交集,只留下 62 个字母数字,并把长度区间收窄到 6~15 位,这样生成的名字在四个平台都能提交。

三是改名前的重名排查:平台判重名的口径是“大小写不敏感”,但你眼睛看到的是一串图形。octocat 与 OctoCat 在 GitHub 上会指向同一个账号,而 nova_river 与 nоva_river(第二个字母是西里尔 о)在平台层面是两个完全不同的账号,肉眼却几乎分不出来。这个用户名生成器用 Intl.Collator 抓前者,用 NFKC 折叠抓后者,两类冲突分开标注。

四是批量建测试账号:给自动化测试、压测或内部演示准备一批身份标识时,一次生成 30 条,导出 CSV 直接喂给脚本。

本页不做这些事:不联网查询某个用户名是否已被占用(生成结果只保证“符合规则”,不代表“可以注册”);不做商标、敏感词或实名合规审查;不生成中文昵称、不生成虚构人名或公司名。想编测试用的中文姓名,请用「虚拟姓名生成器」。

生成原理:字符集、长度区间与保留字

这个用户名生成器的核心不是随机拼词,而是规则过滤。每一档平台对应一份规则快照,包含四个字段:字符集、长度下限、长度上限、首字符模式。生成时先按词库拼出候选串,再逐条对照规则判定。

四套字符集的位数。GitHub 是 26 个大写 + 26 个小写 + 10 个数字 + 1 个短横线 = 63 位;Twitter 与抖音结构相同,把小写字母、大写字母、数字、下划线合起来也是 63 位;微信把小写字母、大写字母、数字、下划线、减号都收了,是 64 位。四者求交集后只剩 26 + 26 + 10 = 62 位,短横线和下划线都被淘汰——这就是「通用」档字符集的来源。

长度区间怎么定。四档的下限分别是 1、4、6、4,取其中最大的 6;上限分别是 39、15、20、20,取其中最小的 15。所以通用档是 6~15 位。真正卡住你的是 Twitter 的 15 位上限和微信的 6 位下限:想跨平台同名,就得按最紧的那一档来设计。

保留字清单 36 个。平台会预留一批名字,注册时会直接拒绝。工具内置 admin administrator api root login logout signin signup www mail ftp help about pricing support security contact blog shop store docs status settings account new app dev test official system mod moderator staff team null undefined 共 36 个,生成后逐条比对(按不区分大小写比对),命中就标红。

数字后缀的作用。词库只有 24 个词,两两组合是 576 种形态;追加 100~999 的三位数字后,单条生成空间扩大到 24 × 24 × 900 = 518,400 种。一次生成 12 条时,按生日悖论估算出现重复的概率约为 66 / 518,400 ≈ 0.01273%(约七千八百五十五分之一),所以结果区里几乎不会看到两条一样的名字;万一撞上,工具会自动重抽。

冲突判定用两层。第一层是 Intl.Collator('en', { sensitivity: 'base' }),它按 Unicode 排序算法(UCA)把大小写和变音符号折叠到同一权重,所以 octocat、OctoCat、OCTOCAT 两两比较都返回 0,判定为“注册层面同一个名字”。第二层是 String.prototype.normalize('NFKC') 加一张同形字映射表,用来抓那些 Collator 抓不到的字符。

完整示例(数值仅作演示)

示例条件与页面打开时的默认值完全一致:平台 GitHub、数量 12 条、两项拼接全勾、已有用户名四条。

下面这一组就是默认条件(GitHub 档)下真机生成的结果,仅作排版演示——你点一次按钮得到的会是完全不同的内容:

四个平台规则与跨平台通用档对照表

下表是工具内置的规则快照,各平台口径可能调整,以官方注册页为准。注意「大小写敏感」一列:四家都是不敏感,也就是说注册层面大小写不产生新的唯一名。

平台字符集位数长度区间首字符大小写典型限制
GitHub字母 + 数字 + -631~39字母或数字不敏感首尾不能是短横线,不能连续两个短横线,. 会被归一成 -
Twitter / X字母 + 数字 + _634~15字母不敏感不能以数字或下划线开头,不能全是数字,不含 twitter、admin
微信字母 + 数字 + _ + -646~20字母或下划线不敏感不能以数字开头,一年只能改一次,释放出的旧号别人不能用
抖音字母 + 数字 + _634~20字母或数字不敏感不收中文、空格、短横线、点号;两次修改需间隔 180 天
通用(交集)字母 + 数字626~15字母不敏感不含分隔符,四家都能提交

第二张表是混淆字符对照,也是本页唯一一处必须靠两层判定的地方:Collator 抓“排序权重相同”,NFKC 抓“归一化后字符串相同”。

看起来像实际码位Intl.Collator(base) 相等NFKC 后相等结论
octocat / OctoCat两侧都是 U+0041 系列相等相等注册层面同一个名字,抢占会失败
a / aU+0061 / U+FF41 全角相等相等全角字母会被 ICU 与 NFKC 双重折叠
I / ⅠU+0049 / U+2160 罗马数字相等相等罗马数字兼容字符会被折叠成 ASCII 的 I
Ⅿ / MU+216F 罗马数字 / U+004D相等相等同上,Ⅿ 折叠成 M
a / аU+0061 / U+0430 西里尔不相等不相等两层都抓不到,只能靠同形字映射表兜底
o / оU+006F / U+043E 西里尔不相等不相等同上,这正是默认示例里那一组
i / іU+0069 / U+0456 西里尔不相等不相等同上
0 / ΟU+0030 / U+039F 希腊不相等不相等同上,数字与希腊大写字母跨脚本

输入范围、边界与精度说明

下面这些是刻意设定的边界,知道它们能避免把这页当“查重工具”用:

常见问题

为什么默认选 GitHub 而不是「通用」档?

GitHub 的规则维度最全:既有长度区间,又有短横线的三条位置约束(不能开头、不能结尾、不能连续),还能用短横线做分隔符,演示效果最好。要做跨平台同名,把下拉框切到「通用」即可,那一档会把字符集收窄到 62 位、长度收窄到 6~15 位。

生成的名字会不会已经被别人注册了?

可能会。本页不做联网查询,只负责“按规则生成 + 本地校验”。规则合规和可用性是两件事:一个名字完全符合 GitHub 的字符与长度要求,仍可能十几年前就被占用了。请把结果当作候选清单,再到目标平台逐个试。

为什么 octocat 和 OctoCat 被判为冲突?

因为平台查重名时不区分大小写。工具用 Intl.Collator('en', { sensitivity: 'base' }) 做比较,这一档会把大小写和变音符号折叠到同一个排序权重上,compare('octocat','OctoCat') 返回 0,等价于“同一个名字”。默认 sensitivity 是 variant,那样比会返回非 0,抓不到这类冲突——这正是必须显式写 'base' 的原因。

那 nova_river 和 nоva_river 为什么也算冲突?

后者的第二个字符是西里尔字母 о(U+043E),不是拉丁字母 o(U+006F)。两者码位不同,所以平台层面是两个独立账号,Collator 在 base、accent、case、variant 四档下也都判为不相等;NFKC 同样不会把它折叠成拉丁字母。这类冲突只能靠一张同形字映射表兜底,本工具把它单独标成「同形字冲突」,与「大小写冲突」分开。

为什么通用档不允许下划线和短横线?

因为四家求交集时它们被淘汰了:GitHub 收短横线但不收下划线,Twitter 与抖音收下划线但不收短横线,微信两者都收。交集只剩下 26 + 26 + 10 = 62 个字母数字,所以通用档输出的是不带分隔符的连写形态,例如 willowzenith618。

数字后缀为什么固定三位?

三位(100~999)给出 900 种取值,配合 24 个词的 576 种组合,单条空间正好是 518,400 种,对 12~30 条的批量需求足够。两位只有 90 种、四位是 9000 种,位数越少越容易和别人的名字撞上,位数越多越难记,三位是这两者之间的折中。

生成的名字太长、超出平台上限怎么办?

不会超出。拼接时每加一段都会先测长度,第二个词、分隔符、数字后缀都是“加得上才加”,加不上就跳过;如果拼出来仍短于平台下限(只有微信档 6 位下限配单个 4 字母词时会遇到),工具会补足位数。所以表格里每一条的「平台校验」列都应当是「通过」。

结果能导出吗?

能。「复制全部(TSV)」把当前结果按列用制表符拼成文本放进剪贴板,粘进 Excel 或飞书表格会自动分列;「下载 CSV」输出的是带 UTF-8 BOM 的 .csv 文件,Excel 双击不会乱码。两者都只包含当前已生成的结果,不含页面上的说明文字。

相关工具