This commit is contained in:
make
2025-04-08 20:07:23 +08:00
parent ddf72091f7
commit 5baebea9d5
10 changed files with 186 additions and 82 deletions

View File

@@ -22,7 +22,21 @@ class GanRaoMaModel extends MongoModel
*/
protected $strCollection = 'gan_rao_ma';
/**
* 可选属性
*/
const POSSIBLE_ATTRIBUTES = [
'draggable', 'date-time', 'lang', 'id', 'dir', 'class'
];
/**
* 配置常量
*/
const TAG_MAX_LENGTH = 8;
const ATTR_VALUE_MAX_LENGTH = 10;
const ATTR_MIN_COUNT = 1;
const ATTR_MAX_COUNT = 3;
/**
* Undocumented variable
@@ -74,6 +88,80 @@ class GanRaoMaModel extends MongoModel
return $result;
}
/**
* Undocumented function
* 随机生成自定义标签-干扰码
*
* @param integer $intMinTags
* @param integer $intMaxTags
* @return string
*/
static public function generateRandomCustomizeHtml(int $intMinTags = 5, int $intMaxTags = 20): string
{
// 随机标签数量
$intNumTags = rand($intMinTags, $intMaxTags);
$strHtmlResult = '';
for ($i = 0; $i < $intNumTags; $i++) {
// 生成随机标签名
$strTagName = self::generateRandomString(rand(3, self::TAG_MAX_LENGTH), self::LETTERS);
// 随机属性数量
$intNumAttributes = rand(self::ATTR_MIN_COUNT, self::ATTR_MAX_COUNT);
$strAttributes = self::generateAttributes($intNumAttributes);
// 拼接标签
$strHtmlResult .= "<{$strTagName}{$strAttributes}></{$strTagName}>\n";
}
return $strHtmlResult;
}
/**
* Undocumented function
* 生成自定义属性
*
* @param integer $intTotal
* @return string
*/
static public function generateAttributes(int $intTotal): string
{
$strAttributes = '';
$arrUsedAttributes = array_rand(array_flip(self::POSSIBLE_ATTRIBUTES), $intTotal);
foreach ((array) $arrUsedAttributes as $strAttrName) {
$strAttrValue = self::generateRandomString(
rand(3, self::ATTR_VALUE_MAX_LENGTH),
self::CHARS
);
$strAttributes .= " {$strAttrName}=\"{$strAttrValue}\"";
}
return $strAttributes;
}
/**
* Undocumented function
* 生成随机字符串
*
* @param integer $length
* @param string $strCharset
* @return string
*/
static public function generateRandomString(int $length, string $strCharset): string
{
$intCharsetLength = strlen($strCharset);
$strRandomString = '';
for ($i = 0; $i < $length; $i++) {
$strRandomString .= $strCharset[rand(0, $intCharsetLength - 1)];
}
return $strRandomString;
}
/**
@@ -85,10 +173,13 @@ class GanRaoMaModel extends MongoModel
* @param string $strDifference 差异
* @param int $intStartNumber 生成标签,随机起始位置 随机生成(10-20)个标签 10
* @param int $intEndNumber 生成标签,随机结束位置 随机生成(10-20)个标签 20
* @param int $intIndex 把标签转成数组,这个是索引,根据索引取哪一行标签
* @param int $intType 生成标签类型: 1.标准html标签2.自定义标签
* @return string
*/
static public function getGrmCode($strDomain, $strPageCode, $intLine, $strDifference, $intStartNumber, $intEndNumber): string
static public function getGrmCode($strDomain, $strPageCode, $intLine, $strDifference, $intStartNumber, $intEndNumber,$intIndex,$intType): string
{
$arrFilter = [
'grm_domain' => (string) $strDomain,
'grm_page_code' => (string) $strPageCode,
@@ -96,24 +187,43 @@ class GanRaoMaModel extends MongoModel
'grm_page_diff' => (string) $strDifference,
];
$arrGrm = self::getInstance()->getOne($arrFilter);
if (empty($arrGrm)) {
$intNum = mt_rand($intStartNumber, $intEndNumber);
$arrGrmCode = self::$arrSelfClosing;
shuffle($arrGrmCode);
$arrGrmCode = array_slice($arrGrmCode, 0, $intNum);
$strGrmCode = implode('', $arrGrmCode);
$intRandNum = substr_count($strGrmCode, '%s');
$arrRandStr = self::generateRandomStrings($intRandNum);
$strGrmCode = sprintf($strGrmCode, ...$arrRandStr);
if($intType == 1){
$intNum = mt_rand($intStartNumber, $intEndNumber);
$arrGrmCode = self::$arrSelfClosing;
shuffle($arrGrmCode);
$arrGrmCode = array_slice($arrGrmCode, 0, $intNum);
$strGrmCode = implode('', $arrGrmCode);
$intRandNum = substr_count($strGrmCode, '%s');
$arrRandStr = self::generateRandomStrings($intRandNum);
$strGrmCode = sprintf($strGrmCode, ...$arrRandStr);
}else{
$strGrmCode = self::generateRandomCustomizeHtml($intStartNumber, $intEndNumber);
}
$arrData = $arrFilter;
$arrData['grm_code'] = $strGrmCode;
$arrData['grm_code'] = $strGrmCode;
self::getInstance()->insert($arrData);
} else {
$strGrmCode = $arrGrm['grm_code'];
}
// $arrGrmCode = self::splitTagsToArray($strGrmCode);
// $strGrmCode = $arrGrmCode[$intIndex];
// echo $intIndex;
return $strGrmCode;
}
static public function splitTagsToArray(string $htmlTags): array
{
// 按换行符分割,兼容不同系统
$tagsArray = preg_split('/\r\n|\n|\r/', $htmlTags);
// 去除空白行并清理首尾空格
$tagsArray = array_filter(array_map('trim', $tagsArray), function($tag) {
return !empty($tag);
});
// 重置索引
return array_values($tagsArray);
}
}