使用方法
- 在「生成数量」填要几个候选,示例 12 个;这一栏接受 1 到 100 的整数,留空、小数、负数都会被拦下并说明原因。
- 在「音节数」选长度:1 音节如 Ven(利落)、2 音节如 Kasel(推荐)、3 音节如 Quelash(史诗感)、4 音节适合头衔型角色。
- 在「后缀」选收尾词缀,示例默认「无后缀」;想统一风格就选 -el、-or、-is、-yn 中的一档,让整批名字共享同一个尾音。
- 点「生成名字」,结果框与右上四格(本次生成、名称空间、撞名概率、音节库)同步刷新;想整批重掷就再点一次。
- 「复制全部名字」把结果按行放进剪贴板,「导出音节表 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 条音节的内部构成与风格标签,示例名都从这张表里取音拼成。
| 音节 | 首辅音 | 核心元音 | 收尾音 | 风格 |
|---|---|---|---|---|
| ka | k | a | 无 | 刚硬 |
| lor | l | o | r | 柔和 |
| mir | m | i | r | 神秘 |
| ven | v | e | n | 优雅 |
| thar | th | a | r | 威严 |
| sel | s | e | l | 清澈 |
| dor | d | o | r | 稳重 |
| wyn | w | y | n | 轻盈 |
| nax | n | a | x | 异域 |
| ryn | r | y | n | 迅捷 |
| ash | 无 | a | sh | 灼热 |
| quel | qu | e | l | 史诗 |
| zel | z | e | l | 幽暗 |
| lir | l | i | r | 纤巧 |
| mor | m | o | r | 厚重 |
| gath | g | a | th | 雄壮 |
| nir | n | i | r | 空灵 |
| tal | t | a | l | 锋利 |
| fern | f | e | rn | 自然 |
| ith | 无 | i | th | 古雅 |
| or | 无 | o | r | 朴素 |
| bren | b | e | n | 坚韧 |
| cyr | c | y | r | 冷冽 |
| hal | h | a | l | 光明 |
名称空间速查: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 是有意设的:再多的话结果框滚动成本高,而你通常只挑少数几个用,多生成的边际价值很低。真要大样本,点几次「生成名字」把结果分别复制出去合并即可,随机源每次都会重新取值,不会因为分批而降低随机性。