精灵名字生成器

这个精灵名字生成器把三组原创词素拼成名字:首音节 24 个、中音节 12 个、尾音节 24 个,双音节与三音节合计 7488 种组合,配一套音译规则给出中文名。填一个随机种子,同一批名字可以原样复现,同一次生成内也不会出现重名。

组合空间7,488 种
本次生成12 个名字
双音节 / 三音节1 / 11
种子20261004
1. elaanorn 艾拉安奥恩
2. halurdil 哈尔尔迪尔
3. vaeiothas 维尤萨斯
4. wynenneth 温恩奈斯
5. rhaanras 拉安拉斯
6. yraenys 伊拉恩伊斯
7. oriualas 奥瑞瓦拉斯
8. doreeth 多尔厄丝
9. rhailnis 拉伊尼斯
10. oriwyn 奥瑞温
11. celovyn 赛尔奥文
12. fenays 芬恩阿伊斯
上面这 12 个是种子 20261004、中性风格、混合结构下的演示值。种子相同、参数相同,生成的 12 个名字也完全相同;改一个数字,整批就换掉。任一输入框里按 Enter 即可重新生成。
一次生成的数量出现重名的概率本页保证是否建议加大范围
2 个0.013%0 重名无需
4 个0.080%0 重名无需
6 个0.200%0 重名无需
8 个0.373%0 重名无需
10 个0.599%0 重名无需
12 个(默认)0.878%0 重名无需
16 个1.590%0 重名无需
20 个2.505%0 重名无需
25 个3.927%0 重名无需
30 个5.644%0 重名可考虑分两批
40 个9.892%0 重名建议分两批
50 个15.091%0 重名建议换风格或换种子

第二列是「如果纯随机抽取,一次抽这么多出现重名的概率」,用生日悖论近似算的;第三列是这个精灵名字生成器的实际表现——洗牌后按顺序取,同一次生成内天然不重复。点「加载更多行」补上 60、70、80、100 个的概率。

使用方法

  1. 填「生成数量」,默认 12 个,范围 1~50。一次生成太多意义不大——超过 30 个之后,用生日悖论算出来的「本该重名」的概率会超过 5%。
  2. 填「随机种子」,默认 20261004。同一个种子加同一套参数,永远得到同一批名字;把种子发给同事,对方就能复现你看到的那 12 个。
  3. 选「词素风格」,默认中性(尾音节库 24 个)。切成月语或林语时,尾音节库缩到 12 个,整批名字的收尾音会明显统一。
  4. 选「音节结构」,默认混合,双音节和三音节都出。想要名字短促就选「只用双音节」,想要更长更绕就选「只用三音节」。
  5. 选「附中文译名」,默认附上。译名是按音节逐段查表拼的直译,不是真名,用来读顺口或做角色设定都够用。
  6. 点「生成名字」或在任一输入框里按 Enter。结果区一次列出全部名字,超过 15 个时结果框内部滚动。
  7. 「复制结果」拿到纯文本名单,「导出 CSV」把重名概率对照表存成带 BOM 的文件,Excel 打开中文不乱码。

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

一是给奇幻设定的角色批量取名字。写小说、跑团、做游戏时,一个精灵村落要十几个名字,纯靠手编很快就重复。这个精灵名字生成器的三个词素池每次洗牌后取前若干条,一批 12 个名字互不重复,可以直接贴进设定文档。

二是让结果可复现、可分享。名字生成器最常见的问题是「刷出一批好看的,再也刷不回来」。本页把随机数换成带种子的确定性算法,种子 20261004 永远对应同一批 12 个名字,团队协作时可以直接说「用种子 20261004 那批」。

三是按语音风格挑词素库。月语风格的尾音节集中在 mir / riel / neth / vyn 这类带鼻音和流音的收尾上,听感偏柔和;林语风格集中在 wen / las / dor / ath 这类爆破与齿音上,听感偏硬朗。这是用「库」而不是用「滤镜」做出的风格差异,拼出来的名字是词素层面的真差异。

四是顺手得到中文译名。给中文团跑团或写中文小说时,光有拉丁字母名没法念。本页按音节逐段查表,把 elaanorn 译成「艾拉安奥恩」,保留了音节数,不会出现一个三音节名被译成两个字的情况。

本页不做的事:它只拼名字,不做姓氏、不做称谓、不做背景故事,也不判断名字是否符合某种版权作品的既有角色名。想要中文姓名的组合请用虚拟姓名生成器,想要某个具体题材的名字请用对应题材的名字生成器。

原理:词素库、可复现随机与洗牌去重

名字由三段词素拼成,双音节省掉中段。首音节池 24 个、中音节池 12 个、尾音节池 24 个。双音节名的结构是「首 + 尾」,共 24 × 24 = 576 种;三音节名是「首 + 中 + 尾」,共 24 × 12 × 24 = 6,912 种。两者合计 576 + 6,912 = 7,488 种,这就是本页右上角「组合空间」那一格的来源。

随机数用的是 mulberry32,不是 Math.random。Math.random() 无法指定种子,也就无法复现。mulberry32 是一个 32 位整数状态的伪随机数发生器,每次调用把状态自增一个常数 0x6D2B79F5,再经过三轮异或与乘法混合,最后用 >>> 14 取高位,除以 2^32 得到一个 [0,1) 的浮点数。它只需要一个整数种子就能完全决定后续序列,因此种子相同必然结果相同。

种子按 32 位取模,所以 0 和 4294967296 等价。函数第一句是 a |= 0,它把入参截断成 32 位有符号整数。2^32 − 1 = 4,294,967,295 是能保留原值的最大的种子;填 4,294,967,296 会被截成 0,填非整数 1.5 会被截成 1。本页的种子输入框把范围卡在 0~4,294,967,295,就是为了让「你看到的种子」和「实际生效的种子」永远一致。

去重靠 Fisher–Yates 洗牌,而不是「抽到重复就再抽」。先把 7,488 个候选取出来,用同一个 rnd() 做一次从后往前的 Fisher–Yates 洗牌:第 i 位与 [0, i] 中随机一位交换,交换完就把这一位固定下来。洗牌之后按顺序取前 n 个,天然互不相同——因为它们是排列的前 n 项,不是放回抽样的结果。这比「循环重抽直到不重复」既快又确定:重抽法在 n 接近池大小时可能长时间打转,而洗牌法一次遍历就结束。

中文译名是逐音节查表,不做音变。三个池各配一张「音节 → 汉字」表,例如 ael → 艾尔、orn → 奥恩、eth → 丝。翻译时把名字按音节切开,逐段取汉字再拼接,所以 doreeth 拆成 dor + e + eth,译成「多尔 + 厄 + 丝」=「多尔厄丝」。这样做的代价是译名读起来偏生硬(真实音译会做省音和连读),好处是完全可预测:同一个音节永远译成同一个汉字,不会两次生成出两种译法。

为什么要做 Unicode 归一化。如果把带分音符的写法(ë)加进词素库,就要注意它有两种等价的编码方式:预组合的 U+00EB 是 1 个码元,而 e 加组合分音符 U+0308 是 2 个码元,两者显示一样但字符串比较不相等。本页的词素全是 ASCII,不会踩这个坑;如果你自己往池里加了带变音符号的音节,记得先用 normalize('NFC') 统一,否则去重会失效。

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

页面打开时的默认参数是:数量 12、种子 20261004、词素风格中性、音节结构混合、附中文译名。下面是这套参数生成的完整名单。

  • 总计 12 个名字,其中三音节 11 个、双音节 1 个(oriwyn),同一次生成内重名 0 个;
  • 第一个名字是 elaanorn(艾拉安奥恩),由首音节 ela、中音节 an、尾音节 orn 拼成;
  • 拉丁名长度在 5 到 9 个字母之间,全库平均 7.62 个字母;双音节 576 种、三音节 6,912 种,合计 7,488 种;
  • 中文译名长度在 3 到 6 个汉字之间,最长的一个是「芬恩阿伊斯」;
  • 把种子改成 1,同一套参数得到的是「maeilath / uvaanys / silornis」开头的另一批,与上面 12 个完全不重叠;
  • 把风格从「中性」改成「月语」后,尾音节池从 24 个缩到 12 个,组合空间从 7,488 种降到 3,744 种,生成的名字收尾音会集中在 mir / riel / neth / vyn 这一组上。

再看一个概率上的边界例子:如果按纯随机放回抽样,一次抽 12 个时出现重名的概率约 0.878%,抽到 50 个时升到 15.091%。这个值用生日悖论近似算:p ≈ 1 − exp(−n(n−1) ÷ 2N),其中 N = 7,488。本页因为做了整池洗牌,实际重名数恒为 0,所以第二列只用来提示「什么时候该换一批」。

输入范围与组合对照表

下表是不同生成数量下「纯随机抽样会重名」的概率,用生日悖论公式算出,N 取中性风格的 7,488。第三列是本页的真实表现。

一次生成的数量组合空间 N生日悖论重名概率本页实际重名说明
2 个7,4880.013%0几乎不可能重名
4 个7,4880.080%0无需担心
6 个7,4880.200%0无需担心
8 个7,4880.373%0无需担心
10 个7,4880.599%0无需担心
12 个(默认)7,4880.878%0本页默认档位
16 个7,4881.590%0仍很安全
20 个7,4882.505%0仍很安全
25 个7,4883.927%0接近 4%
30 个7,4885.644%0可考虑分两批
40 个7,4889.892%0建议分两批
50 个7,48815.091%0建议换风格或换种子

再看三套词素库的规模对照。风格不是给名字加装饰,而是直接换掉整个尾音节池,组合空间因此差一倍。

词素风格首音节中音节尾音节组合空间收尾听感
中性2412247,488全库混合,最杂
月语2412123,744鼻音与流音收尾,偏柔和
林语2412123,744爆破与齿音收尾,偏硬朗

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

  • 数量限 1~50 的整数。0 会被拦下(生成 0 个名字没有意义),小数会被拦下(不能生成半个名字),超过 50 会被拦下并提示改用两批。上限 50 不是技术限制——洗牌本身能支撑 7,488 个——而是超过之后清单已经不适合人眼通读。
  • 种子限 0~4,294,967,295 的整数。这正是 32 位无符号整数的范围。低于 0 或高于上限都会被拦下,因为那些值会被 | 0 悄悄改掉,导致「显示的种子」和「真实种子」不一致,破坏可复现性。
  • 同一种子下结果完全确定。整条链路只有两个随机来源:mulberry32 与 Fisher–Yates。两者都由种子唯一决定,所以同一组参数必得同一批名字。这也意味着「多刷几次碰运气」这个操作在本页不存在——想换结果就换种子。
  • 译名长度在 3~6 个汉字。双音节名译成 3~4 个字,三音节名译成 4~6 个字。译名总字数等于各音节汉字数之和,因为本页不做省音与连读,所以看起来会比常规音译略长。
  • 拉丁名长度在 5~9 个字母。最短的形态是「3 字母首音节 + 2 字母尾音节」的组合,最长是「3 + 2 + 4」。平均 7.62 个字母,落在常见西文名字的长度区间内。
  • 候选池在每次生成时当场重算。这个精灵名字生成器用三层循环即时拼出 7,488 个候选,再走一次 7,488 步的洗牌,整轮耗时在一毫秒量级,连点几十次也不会卡,所以不做常驻缓存——池子随风格与音节结构变化,缓存反而要额外维护失效逻辑。
  • 译名表只覆盖池内音节。如果你自己往池里加了新音节而没有同步补译名表,那个音节会译成空字符串,名字仍会生成但中文译名会缺一段。这是刻意的失败方式:宁可露出缺口,也不要静默编一个不存在的译法。
  • 本页刻意不做的近似。不做音节和谐(元音搭配筛选)、不做重复字母抑制(比如避免 laell 这类三连音)、不做姓氏与称谓。这些都是「再上一层的规则」,加了之后随机性会下降,可复现性也会变复杂。

常见问题

为什么刷新页面后名字变了,说好的可复现呢?

刷新后种子输入框会回到默认值 20261004,所以默认那一批永远一样。真正会变的是你改了种子之后——种子是唯一决定结果的东西。如果发现同一种子给出不同结果,请确认三件事:数量、风格、音节结构也都没变,因为它们是候选池的一部分,池变了洗牌结果自然不同。

名字看起来像随机字母,不像「精灵语」?

因为本页的词素库是原创的,不取自任何既有作品的语言。这样做的原因是避免版权争议:真实作品的精灵语词汇是受保护的作品元素,直接搬用会给使用者的作品带来风险。ael / riel / neth / vyn 这类音素组合只是模仿了「听感」,不是任何语言的真实词根。

为什么一次生成 50 个以上就不建议了?

因为可用性随数量下降。用生日悖论算,纯随机抽 50 个时重名概率已经 15.091%,虽然本页靠洗牌保证实际不重复,但 50 个名字放在一起时,mir / riel / neth 这些高频尾音会让它们读起来很像,反而不好挑。分批生成、每批换一个风格或种子,比一次性拉 100 个更好用。

中文译名能自己改吗?

当前页面没有开放译名表编辑,但译名规则是透明的:每个音节固定对应一个汉字,改名字等于改音节组合。如果你的角色名字有固定的中文叫法(比如设定里叫「艾拉诺恩」而不是「艾拉安奥恩」),直接把生成结果的中文那一列替换掉即可,拉丁名不受影响。

种子填 4294967296 会怎样?

会被拦下。4,294,967,295 是 32 位无符号整数的最大值,再往上一格会被 | 0 截断成 0,也就是和填 0 得到同一批名字。本页宁可报错也不接受一个「显示值和实际值不一样」的种子,因为那会破坏可复现这个核心承诺。

为什么双音节名字这么少?

因为候选池里双音节只有 576 种、三音节有 6,912 种,前者占 7.7%。洗牌是对整池做的,所以抽到双音节的概率也是 7.7% 左右。默认那 12 个里只出现 1 个双音节(oriwyn),比例上完全正常。想要更多短名字,把音节结构切成「只用双音节」即可。

名字里有重复字母怎么办?

会照原样保留。比如 elaanorn 里有两个相邻的 a,这是中音节 an 接在首音节 ela 后面的自然结果。本页刻意不做「抑制连续元音」的规则,因为加了之后每加一条规则就多一层筛选,池的实际可用规模会缩水,可复现性也难解释。如果你介意,换一个种子通常就能避开。

生成的名单能不能直接商用在游戏或小说里?

可以。词素库是原创的,名字由算法组合而来,不指向任何既有人物。唯一需要注意的是「组合空间只有 7,488」这个事实:如果和你用同一套参数的人很多,理论上可能撞名。想降低撞名概率,换一个不常见的种子,或者把风格的三套库混合使用,就等于把可用空间扩到 14,976 种。

相关工具