国产精品爱啪在线线免费观看_97视频精品_欧美精品一区二区在线播放_国产欧美久久一区二区三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3582|回復: 0

[內置擴展] Discuz x3.5 核心文件 class_card.php

[復制鏈接]
1#
發表于 2024-5-12 22:45:54 | 只看該作者 |倒序瀏覽 |閱讀模式

馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區

您需要 登錄 才可以下載或查看,沒有賬號?立即注冊

×
[PHP] 純文本查看 復制代碼
<?php

/**
 *      [Discuz!] (C)2001-2099 Comsenz Inc.
 *      This is NOT a freeware, use is subject to license terms
 *
 *      $Id: class_card.php 27449 2012-02-01 05:32:35Z zhangguosheng $
 */

if(!defined('IN_DISCUZ')) {
	exit('Access Denied');
}
class card{

	var $set = array();
	var $rulekey = array("str"=>"\@", "num"=>"\#", "full"=>"\*");
	var $sysrule = '';
	var $rule = '';
	var $rulemap_str = "ABCDEFGHIJKLMNPQRSTUVWXYZ";
	var $rulemap_num = "123456789";

	var $rulereturn = array();
	var $cardlist = array();

	var $succeed = 0;
	var $fail = 0;
	var $failmin = 1;
	var $failrate = '0.1';


	function __construct() {
		$this->init();
	}
	/**
	 * 初始化函數
	 * 設置系統變量和規則
	 */
	function init() {
	    global $_G;
	    $this->set = &$_G['setting']['card']; // 引用全局設置中的卡片設置
	    $this->sysrule = "^[A-Z0-9".implode('|', $this->rulekey)."]+$"; // 定義系統認可的規則字符集
	}

	/**
	 * 生成卡片規則
	 * @param string $rule 用戶自定義規則,為空則使用默認規則
	 * @param int $num 生成卡片的數量
	 * @param array $cardval 卡片值的數組,包含額外的信息如生成者UID和時間戳
	 * @return int 返回生成結果,成功為true,失敗為-1或其他錯誤代碼
	 */
	function make($rule = '', $num = 1, $cardval = array()) {
	    global $_G;
	    $this->rule = empty($rule) ? $this->set['rule'] : trim($rule); // 確定使用的規則
	    if(empty($this->rule)) {
	        return -1; // 如果沒有有效的規則,直接返回-1
	    }
	    $this->fail($num); // 初始化失敗嘗試次數
	    $cardval['makeruid'] = $_G['uid']; // 設置制作卡片的用戶UID
	    $cardval['dateline'] = $_G['timestamp']; // 設置卡片創建時間戳
	    for($i = 0; $i < $num ; $i++) { // 開始生成指定數量的卡片
	        if($this->checkrule($this->rule)) { // 檢查規則是否符合要求
	            $card = $this->rule; // 使用規則創建卡片
	            foreach($this->rulereturn AS $key => $val) { // 替換規則中的占位符
	                $search = array();
	                foreach($val AS $skey => $sval) {
	                    $search[] = '/'.$this->rulekey[$key].'/';
	                }
	                $card =  preg_replace($search, $val, $card, 1);
	            }
	        } else {
	            return 0; // 如果規則檢查失敗,則返回0
	        }
	        $cardval['id'] = $card; // 設置卡片ID
	        C::t('common_card')->insert($cardval, false, false, 'SILENT'); // 試圖插入卡片信息到數據庫
	        if(($sqlerror = DB::error())) { // 檢查數據庫操作是否出錯
	            if($sqlerror == 1062) { // 處理唯一性沖突
	                $this->fail++;
	                if($this->failmin > $this->fail) {
	                    $num++;
	                } else {
	                    $num = $i - 1;
	                }
	            }
	        } else {
	            $this->succeed += intval(DB::affected_rows()); // 記錄成功插入的卡片數量
	            $this->cardlist[] = $card; // 收集生成的卡片ID
	        }
	    }
	    return true; // 如果生成過程沒有遇到錯誤,則返回true
	}

	/**
	 * 檢查規則是否有效
	 * @param string $rule 待檢查的規則
	 * @param string $type 檢查類型,默認為'0'
	 * @return int 返回檢查結果,true表示規則有效,-2表示規則格式不正確
	 */
	function checkrule($rule, $type = '0') {
	    if(!preg_match("/($this->sysrule)/i", $rule)){ // 檢查規則是否符合系統定義的格式
	        return -2;
	    }
	    if($type == 0) { // 如果是類型0的規則,進一步處理
	        foreach($this->rulekey AS $key => $val) { // 遍歷規則關鍵字
	            $match = array();
	            preg_match_all("/($val){1}/i", $rule, $match); // 匹配規則中出現的關鍵字
	            $number[$key] = count($match[0]); // 統計每個關鍵字出現的次數
	            if($number[$key] > 0) { // 如果有關鍵字出現,則隨機替換為具體值
	                for($i = 0; $i < $number[$key]; $i++) {
	                    switch($key) {
	                    case 'str':
	                        $rand = mt_rand(0, (strlen($this->rulemap_str) - 1));
	                        $this->rulereturn[$key][$i] = $this->rulemap_str[$rand];
	                        break;
	                    case 'num':
	                        $rand = mt_rand(0, (strlen($this->rulemap_num) - 1));
	                        $this->rulereturn[$key][$i] = $this->rulemap_num[$rand];
	                        break;
	                    case 'full':
	                        $fullstr = $this->rulemap_str.$this->rulemap_num;
	                        $rand = mt_rand(0,(strlen($fullstr) - 1));
	                        $this->rulereturn[$key][$i] = $fullstr[$rand];
	                        break;
	                    }
	                }
	            }
	        }
	    }
	    return true; // 如果規則檢查通過,則返回true
	}

	/**
	 * 根據生成卡片的數量,計算允許的失敗次數
	 * @param int $num 企圖生成的卡片數量
	 */
	function fail($num = 1) {
	    $failrate = $this->failrate ? (float)$this->failrate : '0.1'; // 獲取失敗率,若未設置則默認為0.1
	    $this->failmin = ceil($num * $failrate); // 計算最少的失敗次數
	    $this->failmin = $this->failmin > 100 ? 100 : $this->failmin; // 限制失敗次數的最大值為100
	}
};
?>

帖子永久地址: 

新秀網絡驗證系統 - 論壇版權1、本主題所有言論和圖片純屬會員個人意見,與本論壇立場無關
2、本站所有主題由該帖子作者發表,該帖子作者與新秀網絡驗證系統享有帖子相關版權
3、其他單位或個人使用、轉載或引用本文時必須同時征得該帖子作者和新秀網絡驗證系統的同意
4、帖子作者須承擔一切因本文發表而直接或間接導致的民事或刑事法律責任
5、本帖部分內容轉載自其它媒體,但并不代表本站贊同其觀點和對其真實性負責
6、如本帖侵犯到任何版權問題,請立即告知本站,本站將及時予與刪除并致以最深的歉意
7、新秀網絡驗證系統管理員和版主有權不事先通知發貼者而刪除本文

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

QQ|Archiver|手機版|新秀網絡驗證系統API[軟著登字第13061951號] ( 豫ICP備2021033257號-1 )

GMT+8, 2025-7-1 13:13 , Processed in 0.221626 second(s), 40 queries , Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表