使用方法
- 填「生成数量」,默认 12,最少 1 个、最多 200 个。超过 200 会直接报错而不是截断,因为再往上对照表要翻很多页。
- 填「名字最长汉字数」,默认 4。词素库里最长能拼到 6 个汉字(例:布丁 + 团子 + 子酱),把上限设成 4 会自动跳过超长的组合。
- 「限定品种」默认选「猫」,想跨品种就选「不限品种」。限定品种只影响标注文字,不限制词素本身——
布丁给仓鼠也完全成立。 - 「前缀档位」默认「全部五档」。想只要食物类就选它,五档词素数分别是食物 12、颜色 10、体型 7、性格 7、网感 6。
- 点「生成名字」。结果列表每行给出名字、适用品种与汉字数;「本批不重复」勾上时同一批内不会出现重名。
这个宠物名生成器能解决什么
给刚捡回来的小动物起名。起名最难的不是「想不出」而是「想出来的都不满意」,词素库换一批前缀就能立刻得到完全不同的一组候选,比在脑子里空转快得多。
批量筛出候选再挑。设 50 个生成量,一次看完比反复点 50 次省事;配合「本批不重复」,50 个里不会有两条一样的,可以直接划掉不喜欢的。
给多只宠物凑一套同系列名字。锁定同一档前缀、只换中缀后缀,「布丁崽子 / 奶白崽子 / 雪球崽子」就出来了,这是随机抽词很难稳定做到的。宠物名生成器只要固定「前缀档位」这一项就能做到,因为档位一锁定,候选前缀集合就固定了。
规避重名。宠物名重名率高:两只猫 50 年内至少一次同生日的概率按 365 等分算约 0.27%,三只约 0.80%,而现实里「球球」「豆豆」这类热门词的重名率远高于这个均匀模型。用偏门一点的组合(体型档 + 反差身份词)能明显降低撞名。
本页不生成英文名、不生成emoji 花名,也不做宠物店招牌。需要店铺名请用宠物店铺名字生成器;想要人名请用中文名字生成器;要英文宠物名用狗名字生成器。想按犬种细分可配合猫名字生成器与马名字生成器使用。
原理与规则说明
算法是三层词素拼接,名字 = 前缀 + 中缀 + 后缀,每个位置独立用 Math.floor(Math.random() * 词素数) 取下标。三层相乘决定了组合空间:42 个前缀 × 12 个中缀 × 10 个后缀 × 14 个品种 = 70 560 种组合(42 * 12 * 10 * 14 实测等于 70 560)。取下标而不是 words[Math.random() * words.length] 直接取,是因为后者可能得到小数下标导致取到 undefined。
五档前缀不是随便分的,按「人观察宠物的第一印象」划分:食物类 12 个(布丁、奶盖、汤圆、豆浆、可乐、拿铁、麻薯、泡芙、年糕、果冻、椰果、芋圆)对应颜色与口感;颜色类 10 个(奶白、乌云、雪球、橘子、柚子、黑豆、奶油、朱砂、琥珀、石墨)对应毛色;体型类 7 个(小圆、大壮、胖虎、迷你、袖珍、圆滚、细长)对应体格;性格类 7 个(呆呆、皮皮、乖乖、暴暴、闷闷、皮蛋、球球)多取叠字;网感类 6 个(菜菜、崽崽、狗蛋、铁蛋、二狗、毛毛)对应年轻人爱起的网感名。
中缀与后缀表里放了重复空串,这是刻意的权重设计。后缀表 10 项中 3 项是空串、7 项是实词,所以「不加后缀」的概率是 30%,「加后缀」是 70%。如果不放重复空串而只用 7 项等概率取,「雪球」「汤圆」这类干净的两字名会占 14.3%,加上重复后能到 30%,更贴近真实取名习惯。实测这只是一种加权,不追求严格等概率。
去重用 Set.prototype.add 的布尔返回值,if (!seen.has(name)) { seen.add(name); out.push(name); }。Set 是哈希结构,查询与插入都是常数时间;用 indexOf 查数组则每次要线性扫描,2000 条时累计比较次数达 2 000 000 次(2000²/2),差距在生成量上百时还不明显,但换不换写法结果一样,没必要付这个代价。
为什么不宣称「完全等概率」。实测 Math.random() * 42 取整在 100 万次 × 5 轮下,单桶相对偏差最小 0.00%、最大 1.94%、平均 0.47%,与纯抽样噪声的理论值 0.079% 同量级;M = 64 的对照组是 0.00% ~ 2.29%、平均 0.66%,量级相同。说明在这个规模下没有可测量的系统性偏差,看到的抖动是 42 个桶的极值而非每个桶都偏。页面文案因此只说「各档大致均衡」。
完整示例(数值仅作演示)
默认参数:数量 12、名字最长 4 字、品种限定「猫」、前缀全部五档、不重复。实际生成结果每次都不同,下面是构词结构对照表里 12 行的逐条拆解,全部取自本页词素库:
- 布丁崽(猫,4 字)= 布丁 + 崽 + 子。食物类前缀叠「崽」再叠「子」,是典型的奶猫名。
- 奶盖子酱(猫,4 字)= 奶盖 + 子 + 酱。「子酱」是日语系拟人后缀,用在宠物上有点反差萌。
- 汤圆(狗,3 字)= 汤圆 + 空中缀 + 子。食物类直接当名字,不加中缀也算成立。
- 奶白宝儿(猫,4 字)= 奶白 + 宝 + 儿。颜色类 + 儿化尾音,接近人名但保留了「儿」字的口语感。
- 雪球(兔,2 字)= 雪球 + 子 + 空后缀。颜色类两字名,干净的常见选项。
- 橘子团子(猫,3 字)= 橘子 + 团子 + 空后缀。两个食物词叠加,萌度最高的一类。
- 呆呆王(猫,3 字)= 呆呆 + 王 + 空后缀。性格类叠字配「王」,反差感来自性格词与尊称的反差。
- 皮皮崽(狗,3 字)= 皮皮 + 空中缀 + 崽。性格类叠字直接配「崽」。
- 小圆将军(柯基,4 字)= 小圆 + 将军 + 空后缀。体型类配身份词,柯基的短腿配「将军」很贴。
- 袖珍大人(蜥蜴,4 字)= 袖珍 + 大人 + 空后缀。体型类配反差身份词,越小的动物叫「大人」越好笑。
- 菜菜崽崽(仓鼠,4 字)= 菜菜 + 崽 + 崽。网感类叠字,前后都叠,叠字密度最高的一行。
- 乌云王子(金鱼,4 字)= 乌云 + 王 + 子。颜色类配童话爵位,黑金鱼用「乌云」形容很贴。
12 行共 44 个汉字,平均 3.67 字/名。把「名字最长汉字数」从 4 改成 3,布丁崽、奶盖子酱、奶白宝儿、小圆将军、袖珍大人、菜菜崽崽、乌云王子 这 7 行都会被跳过,候选立刻收窄到 2~3 字区间。
输入范围与对照表
| 设置项 | 可选范围 | 本页默认值 | 实际作用 |
|---|---|---|---|
| 生成数量 | 1 ~ 200 | 12 | 超上限报错;200 个对应 17 页分页 |
| 名字最长汉字数 | 3 ~ 6 | 4 | 超过该长度的组合被跳过,不报错 |
| 限定品种 | 14 个品种 / 不限 | 猫 | 只改标注,不限制词素 |
| 前缀档位 | 五档 / 单一档 | 全部五档 | 限定可选前缀集合大小 |
| 本批不重复 | 勾选 / 不勾选 | 勾选 | 用 Set 去重,同批内不重名 |
五档前缀词素数:食物类 12、颜色类 10、体型类 7、性格类 7、网感类 6,合计 42。选「仅体型类」时组合空间降到 7 × 12 × 10 × 14 = 11 760 种,此时要生成 200 个不重复名字压力就大了,页面在去重失败时会明确告知实际只产出多少个。不限档位时名字空间是 42 × 12 × 10 = 5 040 种,不加品种标注共 70560 种——单次上限 200 只占其中 0.28%,所以勾上「本批不重复」几乎不会因为空间不足而失败。
构词结构对照表默认渲染 12 行,点「加载更多」每次加 12 行;「导出 CSV」写出全部 12 行并带 UTF-8 BOM,Excel 打开中文不乱码。
输入范围、边界与精度说明
数量上限 200,超出报「当前 X 个,上限 200 个」。上限的来由是对照表分页:200 个名字按每页 12 行算是 17 页,再多就不好翻了。数量下限 1 是因为 0 个名字没有意义,页面会对 0 报错而不是静默返回空列表。
名字长度上限取 6 字,这是词素库自身的极限:最长前缀 2 字(食物类、颜色类多为两字)+ 最长中缀 2 字(团子、崽崽、宝儿)+ 最长后缀 2 字(子酱),合计 6 字。实测最长的组合是「布丁 + 团子 + 子酱」共 6 字。设置里给出 2~6 的范围,超出 6 不会报错但也不会产生新名字——这是词素库长度决定的,不是限制。
随机源用 Math.random(),它返回 [0, 1) 区间的双精度浮点数,满足非安全场景(起名、抽签、占位图)需求。这里刻意不用 crypto.getRandomValues:那个方法单次最多填充 65 536 字节(16 位视图),调用开销比 Math.random() 大得多,而给宠物起名没有任何安全需求。如果要生成密码或令牌,请用专门的密码生成器。
去重的边界要说清:勾上「本批不重复」只保证同一次生成内不重复,下次点「生成名字」完全可以再次出现同样的名字——这是随机生成的正常表现,不是复现 bug。组合空间 70 560 远大于单次上限 200,所以不勾去重时出现重复是必然的,实测在 42 × 12 × 10 的名字空间里生成 200 条,不去重的重复率相当可观。
常见误用一:把「限定品种」理解成会过滤词素。选了「蜥蜴」并不会让「布丁」消失,布丁 + 团子 + 子酱 这种名字照样会出现在蜥蜴那一栏——这个下拉框只改标注文字。要按品种给不同词库,需要自己改词素表。
常见误用二:把「名字最长汉字数」当成必须凑够的字数。它是上限不是目标,设为 4 时生成 2 字名(雪球、汤圆)完全正常,不会被补齐。
常见误用三:期待每次结果都一样以便「复现」。本页没有提供种子输入,每次点击都是独立随机。需要固定结果请把喜欢的名字记下来,而不是指望重新生成能得到同一批。
常见问题
为什么有的名字两字,有的六字?
因为后缀表里 10 项有 3 项是空串,「不加后缀」占 30% 的权重,再叠加中缀也可能取空,两处都空就是两字名(雪球、汤圆)。而两处都不空、且各自取到最长的两字词素,就是六字名(布丁 + 团子 + 子酱)。把「名字最长汉字数」设成 2 可以强制全部输出两字名,设成 6 则不设限。
为什么限定了品种,名字还是可以用在别的动物上?
因为「限定品种」这个下拉框只改结果里的标注文字,不参与词素筛选。词素库是按「人观察宠物的第一印象」建的,本来就跨品种通用——布丁形容的是颜色和口感,猫狗仓鼠都成立。想按品种给不同词库(比如猫用「喵喵」类、犬用「旺」类),需要自己扩展本页的词素表。
生成了 50 个,怎么知道没有重名?
默认勾上的「本批不重复」就是干这个的:每个名字生成后用 Set 查一次,命中就重新摇,所以同一次生成里不会出现两条相同。如果你看到的还是有重复,说明这个开关被手动关掉了。「本批」的范围是这一次点击,重新点「生成名字」后之前的结果不参与去重。
五档前缀的词素数量为什么不一样?
按实际取名的合理度分配的:食物类和颜色类描述的是宠物最直观的外观,素材最多,各给 12 和 10 个;体型、性格两类描述需要更具体的观察,给 7 个;网感类属于年轻人口味,词本身更新快,给 6 个。这个分配不是数学结论,是编辑判断——如果你只想看体型类,组合空间会降到 11 760 种,生成 200 条不重复名字就会比较吃紧。
为什么没有「重随一次一定换一批」的保证?
因为 Math.random() 每次调用的结果独立,没有记忆。理论上存在连续两次点出完全相同结果的概率(极低但不为零)。如果你正在挑名字,点多几次比反复点同一个按钮更有效——每次点都会给出新的一批候选,重复只是偶然。
「袖珍大人」这种名字会不会太奇怪?
不算奇怪,这是反差构词法的常见玩法:越小的动物配越正式的称呼,反差感就是笑点。本页的体型类中缀里「大人」「大王」「将军」「公主」都是为这个目的准备的。想要正经一点的名字,把中缀限定在「子」「宝」「崽」这几个温和的选项上,或者干脆不加中缀——「袖珍」「迷你」本身就是好名字。
生成的内容会被记录或上传吗?
不会。全部组合由 Math.random() 与 String 拼接完成,模板里没有任何网络请求代码,词素库也硬编码在脚本里而不是从服务器取。可以在开发者工具的 Network 面板确认:页面加载后除自身 CSS 外不再发出任何请求,刷新即清空。
相关工具
宠物名生成器只做「宠物可感知属性词 + 身份后缀」这一条构词路线,下面这些页面各用一套不同的词库,命名场景不同。