首页 > 数据库 > 数据库开发技术 > 程序员怎么给娃起名?当然是写个脚本!
给孩子取名是一件很讲究的事情,有的直接花钱让人算,有的用族谱排字,有的用特别喜欢的诗歌或历史事件。暂时不管封建迷信是不是,这是父母美好愿望最直接的体现。毕竟人活着还是需要精神上的满足。本文的理论基础主要是五格剖象法与八字四柱五行相结合,试图用JS脚本实现半自动命名。
背景
我有个朋友对中国传统文化更感兴趣,周易、八字、中医、冥想等都研究过一点,五行八卦等原则也几乎了解了七七八八。最近需要给孩子起名,没有族谱,没有特别喜欢的诗,只能自己研究命名。他朋友问,为什么不自己花钱?码农,不花钱的地方肯定不花钱。怎么会错过这么好的研究数学的机会,最好用自己的轮子。
据说五格剖象法是由日本熊崎健翁于1918年初创造的。因此,严格地说,它只是基于中国传统文化理论创造的一种实践方式,可以简单地理解为用名字笔画幸运数字。这里就不赘述具体的规则和原则了,想了解细节的同学请自行查阅。
因为五格剖象法只是用数字看吉凶,维度太单一。汉字分为五行,普通人都知道一个道理:八字缺什么就补什么(其实比较复杂,有藏干之类的),比如苗、鑫、林、森这个词在名字里很常见。因此,笔者结合八字【四柱五行】补充了五格的实践。不幸的是,四柱五行的规律过于复杂,不适合零造轮,因此直接使用现成软件。
这几乎是市场上收钱命名的套路。最后,综合考虑寓意和平仄,那么名字肯定不会差。
效果展示
假设孩子姓【赵】,缺【金】【土】,女孩。
启动脚本并使用:

结果文件:

随便挑一个测一下,比如【宸巍】:

感兴趣的学生可以自己试试。除了外观(不重要),这个名字是吉祥的。此外,作者还添加了拼音,因为成千上万的结果,所以一旦你确定了你最喜欢的发音,你可以根据拼音搜索。
正文
使用说明
毕竟是半自动的,所以还是要有一些人工操作。另外需要注意的是,在使用这个脚本之前,你必须至少使用github和nodejs的一些基本操作。当然,如果你只想看热闹,也很受欢迎。
基础数据
首先,准备基本数据:文字库、五格吉凶数字库,如下:
文字库
数据格式用 ts 表示如下:
// 五行enum Ele {wood,fire,earth,metal,water,}// key 就是 字Record<string, {char: string; // 字ele: Ele; // 五行strokes: number; // 笔画sound: string; // 拼音}>
eg:
{"一":{"char":"一","ele":2,"strokes":1,"sound":"yi"},"乙":{"char":"乙","ele":2,"strokes":1,"sound":"yi"},"刁":{"char":"刁","ele":1,"strokes":2,"sound":"diao"},// ...}
五各吉凶数字库
数据格式用 ts 表示如下:
enum Sex {female,male,}Array<{desc: string;score: -2 | -1 | 0 | 1 | 2; // 吉正数;凶负数,处理的时候要剔除sex?: Sex; // 部分吉凶只针对男性或女性,使用时会根据性别进行过滤nums: number[];}>
eg:
[{"desc": "女德运暗示数(具有妇德,品性温良,助夫爱子)","score": 1,"sex": 0,"nums": [5, 6, 11, 13, 15, 16, 24, 32, 35]},{"desc": "女性孤寡运暗示数(难觅夫君,家庭不和,夫妻两虎相斗,离婚,严重者夫妻一方早亡)","score": -2,"sex": 0,"nums": [21, 23, 26, 28, 29, 33, 39]},]
核心逻辑
1.根据性别和五格吉凶数字库生成所有吉的数字,并去重;
2.暴力三层遍历
先选取一个吉数,即【总格】。减去【姓】的笔画,得到剩余笔画数,即【地格】,并保证【地格】是吉数;
暴力遍历所有笔画相加等于剩余笔画数的两个字,当然前提是经过了五行的筛选,另外还要保证【姓】+【第二个字】的笔画数,即【人格】是吉数;
跳回第一层,选取另一个吉数,执行下一个循环。
这样做的效果是:【总格】、【人格】、【地格】肯定是吉数;【天格】不受控(取决于姓);【外格】不保证效果,但由于外格没那么重要所以就随缘了;
3.将结果数据进行友好性处理,生成文件。
贴一点核心代码片段,大家意思意思
numData.nums.forEach((totalScore) => {const earthScore = totalScore - surStks;if (allGoodNums.includes(earthScore)) {chars.forEach((secd) => {const manScore = surStks + secd.strokes;const lastRest = earthScore - secd.strokes;if (lastRest > 0 &&secd.ele === eles[0] &&allGoodNums.includes(manScore)) {chars.forEach((last) => {if (lastRest === last.strokes &&last.ele === eles[1]) {const { cosmos, man, earth, outside, total } = getNameScore({surnameData,secondNameData: secd,lastnameData: last,});const fiveRes = `总${total}人${man}地${earth}天${cosmos}外${outside}`;result.push(`${secd.char}${last.char}(${secd.sound},${last.sound}):${fiveRes}`);}});}});}});
结语
可以看到,逻辑其实非常简单,实现成本也不大,一两天就能搞出来。
原文作者:IT枫斗者;如有侵权,请联系管理员删除。