系统架构设计
本系统基于ThinkPHP 6框架开发,采用MVC分层架构与模块化设计。核心模块包括:用户中心、八字计算引擎、名字生成算法、订单及后台数据看板。数据库采用MySQL 8.0,通过ORM实现高效查询,并集成Redis缓存优化高频访问数据。路由配置采用PATHINFO模式,支持/home/user/index形式的友好URL,同时兼容RESTful API设计。
演示及源码:m.appwin.top
核心算法实现
1.八字排盘与五行计算
通过出生年月日时转换为四柱干支,依据《渊海子平》五行映射规则计算五行分布。年柱以立春为界,时柱对应十二时辰地支,天干通过"五鼠遁"算法推导。
// 模型层:八字计算逻辑(app/common/model/BaziCalculator.php)
class BaziCalculator extends \think\Model {
protected $tiangan = ['甲','乙','丙','丁','戊','己','庚','辛','壬','癸'];
protected $dizhi = ['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥'];
// 计算年柱干支
public function getYearGanzhi($year) {
$baseYear = 1900; // 甲子年起点
$offset = $year - $baseYear;
$ganIndex = ($offset * 5 + $offset) % 10;
$zhiIndex = ($offset * 5 + $offset) % 12;
return [
'gan' => $this->tiangan[$ganIndex],
'zhi' => $this->dizhi[$zhiIndex]
];
}
// 五行属性映射
public function getElement($gan, $zhi) {
$map = [
'木' => ['甲','乙','寅','卯'],
'火' => ['丙','丁','巳','午'],
'土' => ['戊','己','辰','戌','丑','未'],
'金' => ['庚','辛','申','酉'],
'水' => ['壬','癸','子','亥']
];
foreach ($map as $element => $chars) {
if (in_array($gan, $chars) || in_array($zhi, $chars)) {
return $element;
}
}
return null;
}
}
2.名字生成算法
结合五行平衡原则与音韵学规则,从字库筛选符合条件的汉字组合。采用遗传算法优化生成策略,通过平仄检测确保声调和谐。
// 服务层:名字生成逻辑(app/service/NameGenerator.php)
class NameGenerator {
const PINGZE_RULE = ['平平','平仄','仄平','仄仄']; // 允许的声调组合
public function generate($bazi, $options) {
$elements = $this->getElements($bazi);
$wordPool = $this->getWordPool($elements);
// 遗传算法筛选最优组合
$population = $this->initPopulation($wordPool, 100);
for ($i=0; $i<10; $i++) {
$population = $this->evolve($population, $options);
}
return $this->selectTop($population, 10);
}
// 平仄检测
private function checkPingze($name) {
$tones = array_map(function($char) {
$pinyin = Pinyin::convert($char);
return $pinyin['tone']; // 1=阴平,2=阳平,3=上声,4=去声
}, str_split($name));
$pattern = '';
foreach ($tones as $tone) {
$pattern .= ($tone <= 2) ? '平' : '仄';
}
return in_array($pattern, self::PINGZE_RULE);
}
}
功能模块解析及部分代码实现
1.用户管理模块
功能描述:实现用户注册、登录、个人信息维护及起名记录查询。采用ThinkPHP内置的验证器进行数据校验,结合JWT实现无状态认证。
// 用户注册逻辑(app/api/controller/User.php)
public function register(Request $request)
{
$data = $request->param();
$validate = Validate::make([
'username' => 'require|unique:users',
'password' => 'require|min:6',
'email' => 'require|email|unique:users'
]);
if (!$validate->check($data)) {
throw new ValidateException($validate->getError());
}
$user = UserModel::create([
'username' => $data['username'],
'password' => password_hash($data['password'], PASSWORD_DEFAULT),
'email' => $data['email'],
'created_at' => time()
]);
return json(['code' => 200, 'msg' => '注册成功', 'data' => $user]);
}
2.八字计算引擎
核心逻辑:基于《子平真诠》算法实现四柱八字排盘,通过五鼠遁、五虎遁算法推导天干地支,结合五行映射规则计算命局五行分布。
// 八字排盘实现(app/common/model/Bazi.php)
class Bazi extends Model
{
// 根据公历日期计算八字
public static function calculateBazi($year, $month, $day, $hour)
{
$lunar = Lunar::convertSolarToLunar($year, $month, $day);
$yearGz = self::getYearGanzhi($lunar['year']);
$monthGz = self::getMonthGanzhi($year, $month);
$dayGz = self::getDayGanzhi($year, $month, $day);
$hourGz = self::getHourGanzhi($hour);
return [
'year' => $yearGz,
'month' => $monthGz,
'day' => $dayGz,
'hour' => $hourGz
];
}
// 五鼠遁算法计算时柱
private static function getHourGanzhi($hour)
{
$zhiIndex = floor($hour / 2);
$ganIndex = ($zhiIndex + 1) % 10; // 天干从甲开始
return [
'gan' => self::$tiangan[$ganIndex],
'zhi' => self::$dizhi[$zhiIndex]
];
}
}
3.名字生成算法
创新点:采用遗传算法优化生成策略,结合五行平衡系数与音韵学规则进行多目标优化。
// 遗传算法实现(app/service/GeneticNameGenerator.php)
class GeneticNameGenerator
{
const POPULATION_SIZE = 200;
const MAX_GENERATIONS = 50;
public function generate($bazi, $constraints)
{
$population = $this->initPopulation();
for ($gen = 0; $gen < self::MAX_GENERATIONS; $gen++) {
$population = $this->evolve($population, $bazi, $constraints);
}
return $this->selectElite($population);
}
// 交叉操作实现
private function crossover($parent1, $parent2)
{
$crossPoint = rand(1, strlen($parent1) - 1);
$child1 = substr($parent1, 0, $crossPoint) . substr($parent2, $crossPoint);
$child2 = substr($parent2, 0, $crossPoint) . substr($parent1, $crossPoint);
return [$child1, $child2];
}
// 适应度函数(五行平衡+音韵得分)
private function fitness($name, $bazi)
{
$elementScore = $this->calculateElementBalance($name, $bazi);
$phonologyScore = $this->calculatePhonologyScore($name);
return $elementScore * 0.7 + $phonologyScore * 0.3;
}
}
4.音韵学检测模块
实现细节:集成中科院Pinyin库实现汉字转拼音,通过正则表达式检测平仄组合,避免"三平调"等不良音韵模式。
// 音韵检测工具类(app/util/Phonology.php)
class Phonology
{
public static function checkPingze($name)
{
$chars = preg_split('/(?<!^)(?!$)/u', $name);
$tones = [];
foreach ($chars as $char) {
$pinyin = Pinyin::convert($char);
$tones[] = self::mapTone($pinyin['tone']);
}
$pattern = implode('', $tones);
// 禁止三平调/三仄调
if (preg_match('/1{3}|2{3}|3{3}|4{3}/', $pattern)) {
throw new \Exception('音韵违规:检测到三平调/三仄调');
}
// 允许的组合:平仄相间
return preg_match('/(1|2)(3|4)(1|2)|(3|4)(1|2)(3|4)/', $pattern);
}
private static function mapTone($tone)
{
// 将数字声调映射为平仄
$map = [
1 => '平', // 阴平
2 => '平', // 阳平
3 => '仄', // 上声
4 => '仄', // 去声
0 => '平' // 轻声
];
return $map[$tone] ?? '平';
}
}
5.支付与订单模块
实现方案:集成支付宝当面付API实现支付功能,通过异步通知更新订单状态。
// 支付回调处理(app/api/controller/Pay.php)
public function alipayNotify(Request $request)
{
$data = $request->param();
$alipayPublicKey = config('alipay.public_key');
$signVerified = $this->verifySign($data, $alipayPublicKey);
if (!$signVerified) {
return 'failure';
}
$order = OrderModel::where('order_sn', $data['out_trade_no'])->find();
if ($order && $order->status == 0) {
$order->status = 1; // 支付成功
$order->save();
// 触发名字生成服务
$this->triggerNameGeneration($order->id);
}
return 'success';
}
6.后台数据可视化
实现技术:使用ECharts实现订单转化率漏斗图,结合Redis实时统计在线用户数,通过GeeTest实现后台登录二次验证。
// 数据可视化控制器(app/admin/controller/Dashboard.php)
public function conversionRate()
{
$orders = OrderModel::field('status, count(*) as count')
->group('status')
->select();
$statusMap = [
0 => '待支付',
1 => '已支付',
2 => '已完成'
];
$data = [];
foreach ($orders as $order) {
$data[] = [
'name' => $statusMap[$order['status']],
'value' => $order['count']
];
}
return json([
'code' => 200,
'data' => $data
]);
}

部署与性能优化
1.服务器配置
Nginx 1.24+PHP-FPM 8.1
MySQL 8.0主从架构
Redis 7.0缓存热点字库
Docker容器化部署
2.性能优化策略
八字计算结果缓存(TTL 24小时)
字库分词索引加速查询
支付回调异步处理
错误日志分级记录
总结
本系统通过ThinkPHP框架实现企业级周易起名服务,结合传统八字理论与现代算法工程,提供从八字排盘、五行分析到名字生成的全流程解决方案。核心算法采用五行平衡策略与音韵学规则,确保生成的名字既符合命理要求又具备良好声韵。系统支持高并发访问,通过模块化设计与分布式架构保障稳定运行,适用于命名服务机构与个人用户。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70011971/viewspace-3096243/ ,如需转载,请注明出处,否则将追究法律责任。