字符名字生成器

给小说、跑团、游戏里的虚构角色起名:用 24 条人工筛过的音节按「起首 + 中段」拼出名字,可选 1~4 音节与 5 档后缀,一次给 1~100 个候选,随机源走 crypto.getRandomValues 并做拒绝采样,拼法数量与撞名概率都算给你看。

本次生成12
名称空间(当前档)576
撞名概率10.89%
音节库24 条
Kasel
Lorzel
Mirith
Venmir
Tharryn
Selnir
Dorhal
Wyndor
Naxlir
Rynor
Ashven
Quelash

本次生成 12 个名字;当前设置名称空间 576 种(音节数 2),12 个里至少撞名一次的概率约 10.8949%。

音节元件表(24 条,默认显示 12 行)
音节首辅音核心元音收尾音风格
kaka无刚硬
lorlor柔和
mirmir神秘
venven优雅
tharthar威严
selsel清澈
dordor稳重
wynwyn轻盈
naxnax异域
rynryn迅捷
ash无ash灼热
quelquel史诗

表内 24 条音节每条都能直接拼进名字,示例名 Kasel 就是「ka + sel」、Quelash 是「quel + ash」;风格列只是拼读手感标签,不参与随机。

使用方法

  1. 在「生成数量」填要几个候选,示例 12 个;这一栏接受 1 到 100 的整数,留空、小数、负数都会被拦下并说明原因。
  2. 在「音节数」选长度:1 音节如 Ven(利落)、2 音节如 Kasel(推荐)、3 音节如 Quelash(史诗感)、4 音节适合头衔型角色。
  3. 在「后缀」选收尾词缀,示例默认「无后缀」;想统一风格就选 -el、-or、-is、-yn 中的一档,让整批名字共享同一个尾音。
  4. 点「生成名字」,结果框与右上四格(本次生成、名称空间、撞名概率、音节库)同步刷新;想整批重掷就再点一次。
  5. 「复制全部名字」把结果按行放进剪贴板,「导出音节表 CSV」导出带 BOM 的 24 行元件表,拿去和队友对齐用词风格。

字符名字生成器能解决什么问题

第一个场景是写小说或跑团时批量铺群众角色。一页纸上要出现十几个不同村子的路人,逐个想名字很容易卡住,也容易起成同一类音。把音节数固定成 2、后缀固定成 -el,点一次就得到一批风格整齐的名字,比翻名字列表快得多。

第二个场景是给游戏 NPC 定调。同一批里混进「nax」「quel」「thar」这些异域或威压感强的音节,能让不同阵营的名字在读音上就分开;本页把音节表公开在页面上,就是为了让你先挑音,再决定要不要后缀,而不是点一堆按钮后得到一串看不出规律的名字。

第三个场景是核对重名。默认 2 音节的名称空间只有 576 种,一次要 12 个名字时,至少撞名一次的概率约 10.9%——这个数字不低。本页把它直接算出来放在结果旁边,撞名概率高的时候你就知道该把音节数调到 3(空间 13824 种,概率降到 0.48%)。

第四个场景是控制随机是否可复现。同一批名字要发给两位作者,用本页生成后复制过去即可;要的是每次都不一样,就重掷。随机源用 crypto.getRandomValues,不是 Math.random,取模前还做了拒绝采样,所以每个音节被抽中的概率是一致的。

本页只做虚构角色的音节造名。要给真人起中文名请用中文名字生成器,要社交平台昵称请用昵称生成器,要账号名请用用户名生成器,要品牌或店铺名请用品牌名生成器——它们用的是词库与语义规则,与这里的音节拼装不是一回事。

音节构词的原理和变量

先说拼装函数。一条音节在本页里是三元组:起首辅音(onset)、核心元音(nucleus)、收尾音(coda)。生成一个名字的过程就是取 n 个音节依次拼接再加大写首字母,源码里表现为 LIB[rnd(24)][0] 取若干次后 charAt(0).toUpperCase()。这里没有词典,也没有语言模型,只有一张 24 行的音节表和一条拼接规则。

再说随机源为什么必须是 crypto.getRandomValues 而不是 Math.random。Math.random 的取值是宿主实现定义的伪随机,既没有对外的均匀性保证,也可能被同一个种子复现;Web Crypto 由 W3C Web Crypto API 规定,直接读系统熵源。更关键的一步是拒绝采样:Uint8Array 取值 0~255,而音节表长度是 24,256 除以 24 余 16,直接 % 24 会让前 16 个音节多分摊 16 个取值;本页把 240 及以上的取值整批丢掉重取,接受率 93.8%,换来每个音节严格等概率。

第三点是音节表为什么只有 24 条,而不是按首辅音乘元音乘收尾音全展开。库内去重后首辅音 19 种、核心元音 5 种、收尾音 8 种,全展开是 19 乘 5 乘 8 等于 760 种,但里面混着「wth」「cyx」这类母语者读不出来的组合。本页把这 760 种人工筛到 24 条可读音节,字符名字生成器付出的代价是名称空间从 760 的幂次缩到 24 的幂次,换来的收益是每个输出都能直接念出来。

第四点是输入到输出的中间量:音节数 n 决定拼法总数 24 的 n 次方(1 音节 24、2 音节 576、3 音节 13824、4 音节 331776);后缀是 5 档,选定其中一档不改变空间大小,但把 5 档都算上总数要再乘 5,得到 1731000。撞名概率按生日问题算:1 减去 576 分之 576、575、574…连乘到第 12 项,结果 10.8949%。

第五点是边界与常见误用。数量上限 100 个,超过一行一行看也失去意义;音节数 1 时最短名字只有 4 个字符(如 ka 加 or 拼成 Kaor),3 音节加 -yn 最长 14 个字符,可直接用于有长度限制的字段。最常见的误用是以为「随机生成就一定不重复」——生日问题说明恰恰相反,空间越小、要得越多,撞名越容易;第二个误用是拿它当真人姓名生成器,音节表是西幻风格的造词元件,不做姓氏与辈分的搭配。

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

字符名字生成器按默认设置(生成数量 12、音节数 2、后缀 无)操作:名称空间等于 24 的 2 次方,即 576 种拼法;生成 12 个名字,至少撞名一次的概率是 10.8949%,显示为 10.89%。页面上那 12 个演示名 Kasel、Lorzel、Mirith、Venmir、Tharryn、Selnir、Dorhal、Wyndor、Naxlir、Rynor、Ashven、Quelash 就是 2 音节无后缀的输出形态,长度分别是 5、6、6、6、7、6、6、6、6、5、6、7 个字符。

把「音节数」改成 3,名称空间变成 24 的 3 次方等于 13824,同样要 12 个,撞名概率从 10.89% 降到 0.4764%;改成 4 音节,空间 331776,概率 0.0199%。反过来把后缀固定成 -el,空间大小不变仍是 576,只是每个名字都带上同一个尾音,读音一致性更好。

再看名字的构成:Kasel 拆成 ka + sel,Lorzel 拆成 lor + zel,Quelash 拆成 quel + ash。这三组都能在下方音节表里逐行对上,「风格」列显示 ka 属刚硬、sel 属清澈,所以 Kasel 的听感是「硬起音 + 清收尾」。这就是本页把对照表做成元件表而不是结果表的原因——你要改的是音,不是词。

输入范围与音节元件对照表

生成数量 1 到 100 的整数;音节数 1 到 4;后缀 5 档(无、-el、-or、-is、-yn)。下表列出全部 24 条音节的内部构成与风格标签,示例名都从这张表里取音拼成。

音节元件表(演示值,24 条)
音节首辅音核心元音收尾音风格
kaka无刚硬
lorlor柔和
mirmir神秘
venven优雅
tharthar威严
selsel清澈
dordor稳重
wynwyn轻盈
naxnax异域
rynryn迅捷
ash无ash灼热
quelquel史诗
zelzel幽暗
lirlir纤巧
mormor厚重
gathgath雄壮
nirnir空灵
taltal锋利
fernfern自然
ith无ith古雅
or无or朴素
brenben坚韧
cyrcyr冷冽
halhal光明

名称空间速查:1 音节 24 种、2 音节 576 种、3 音节 13824 种、4 音节 331776 种;后缀把整表再乘 5,1 到 4 音节全算上共 1731000 种。音节数越大,可读性与可记性越低,一般角色名停在 2 到 3 音节。

边界与精度说明

关于均匀性:拒绝采样的门槛是 240,即 Uint8Array 里 240 到 255 这 16 个取值被丢弃后重取。这样做的好处是每个音节的出现概率精确相等;代价是平均每次抽音节要多取 1.07 次随机字节(接受率 93.8%),对 100 个名字的规模没有可感影响。

关于重名:本页不做去重,同一批里可能出现相同名字,这是正确行为——它如实反映 576 种空间下的碰撞概率。如果你要一批互不重复的名字,把结果复制出去用删除重复行过一遍,或直接把音节数提到 3。

关于字符集:音节表只用拉丁字母,输出是纯 ASCII;后缀与音节拼接后首字母转大写,其余保持小写,不存在「Á」「é」这类需要两个 UTF-8 字节的字符——如果你后续要换成带重音的字形,注意「Á」在 UTF-8 里占 2 个字节,而 Unicode 拉丁扩展区 U+00C0 到 U+024F 一共只有 400 个码位,能用的变体有限。

关于长度:2 音节无后缀最短 4 个字符、最长 6 个字符;3 音节加 -yn 最长 14 个字符。字段有长度限制时先按这个范围估一下,不要等到导出时才发现超长。数量上限 100 是刻意的——再多的话结果框要滚动很久,而你通常只会挑其中几个用。

关于可复现性:结果不写入任何存储,刷新即清空,所以同一批名字要留下来就当场复制。CSV 导出只导出音节表(带 UTF-8 BOM,Excel 打开不乱码),不导出随机结果,避免把演示值误当成固定词库。

常见问题

字符名字生成器产出的名字能直接用在正式作品里吗?

可以,音节表是通用的西幻拼读元件,不复制任何已有作品的角色名,生成结果也不带版权归属。要留意的是重名概率:2 音节只有 576 种,如果作品里角色很多,撞名或与已有知名角色重音的可能性会上升,建议用 3 音节。

为什么同一个名字点两次「生成名字」就没了?

因为它本来就不保存。本页每次点击都重新抽随机数,不记录上一批;要留住就把结果复制出去。这也是「载入示例」按钮的作用——它把控件恢复成数量 12、音节数 2、后缀无,方便你从头再来一遍。

撞名概率 10.89% 是不是算错了,看着太高了?

没有算错,这是生日问题的正常结果。名称空间 576 种、要 12 个名字,两两组合有 66 对,每对相撞的概率都不高,但累积起来就有约 10.9% 的概率至少出现一对重名。想验证可以连着生成几次,偶尔会看到重复的。

后缀选了 -el 之后,是不是所有名字都以 el 结尾?

是,后缀会原样拼在最后一个音节之后,所以整批名字共享同一个尾音,读起来更像同一个家族或同一个阵营。空间大小不受影响,仍是 24 的音节数分之一种拼法,因为后缀是固定的一档而不是参与随机的变量。

音节表里的「收尾音」写成 rn、th、sh 是什么意思?

那是音节的收尾辅音簇,代表发音时舌头与气流的位置。它在表里只作说明用途——真正参与随机的是整条音节字符串,程序不会把音节再拆开重组,所以你看到的名字一定是表里某两条音节的直接拼接。

为什么不用 Math.random 省点代码?

Math.random 没有均匀性保证,也没有跨环境一致的实现,某些引擎的取模偏差会让靠前的音节更常出现。Web Crypto 的 crypto.getRandomValues 直接读系统熵源,再由拒绝采样抹平取模余数,代价只是多写几行循环,对这点规模的生成没有性能负担。

想要中文风格或日式罗马音的角色名怎么办?

本页音节表是西幻风格(ka、thar、quel 这类),不含拼音声母或日语假名转写。要中文名请用中文名字生成器,要其它语系的造词可以先把音节表替换成对应语言的高频音素,再套用本页的拼接与拒绝采样逻辑。

一次要 500 个候选做筛选,为什么不支持?

数量上限 100 是有意设的:再多的话结果框滚动成本高,而你通常只挑少数几个用,多生成的边际价值很低。真要大样本,点几次「生成名字」把结果分别复制出去合并即可,随机源每次都会重新取值,不会因为分批而降低随机性。

相关工具