<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          svg-captcha-isszz用 PHP 生成 SVG 格式驗(yàn)證碼

          聯(lián)合創(chuàng)作 · 2023-09-24 04:25

          在 PHP 中生成 SVG 格式的驗(yàn)證碼。

          部分代碼依賴(lài) thinkphp6。

          安裝

          composer require isszz/svg-captcha -vvv

          接下來(lái)將字體放入tp根目錄下的config/font目錄

          配置

          <?php
          
          // SVG 驗(yàn)證碼配置
          
          return [
              'width' => 150, // 寬度
              'height' => 50, // 高度
              'noise' => 5, // 干擾線條的數(shù)量
              'inverse' => false, // 反轉(zhuǎn)顏色
              'color' => true, // 文字是否隨機(jī)色
              'background' => '', // 驗(yàn)證碼背景色
              'size' => 4, // 驗(yàn)證碼字?jǐn)?shù)
              'ignoreChars' => '', // 驗(yàn)證碼字符中排除
              'fontSize' => 52, // 字體大小
              'charPreset' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', // 預(yù)設(shè)隨機(jī)字符
              'math' => '', // 計(jì)算類(lèi)型, 如果設(shè)置不是+或-則隨機(jī)兩種
              'mathMin' => 1, // 用于計(jì)算的最小值
              'mathMax' => 9, // 用于計(jì)算的最大值
              'fontName' => 'Comismsh.ttf', // 用于驗(yàn)證碼的字體, 建議字體文件不超過(guò)3MB
          ];

          使用方法

          控制器內(nèi)使用??

          <?php
          declare (strict_types = 1);
          
          namespace app\index\controller;
          
          use think\Response;
          use think\Request;
          
          class Captcha
          {
              /**
               * 獲取驗(yàn)證碼, 用于api
              */
              public function index(Request $request)
              {
                  $config = $this->BuildParam($request->param());
                  
                  return json([
                      'code' => 0,
                      'data' => svg_captcha($config),
                      'msg' => 'success',
                  ]);
              }
          
              /**
               * 直接顯示svg驗(yàn)證碼
              */
              public function svg(Request $request)
              {   
                  $config = $this->BuildParam($request->param());
          
                  $content = svg_captcha($config);
                  
                  return response($content, 200, ['Content-Length' => strlen($content)])->contentType('image/svg+xml');
              }
          
              /**
               * 驗(yàn)證輸入驗(yàn)證碼是否正確
              */
              public function check($code)
              {
                  if(svg_captcha_check($code) === true) {
                      return json([
                          'code' => 0,
                          'data' => null,
                          'msg' => 'success',
                      ]);
                  }
                  return json([
                      'code' => 1,
                      'data' => null,
                      'msg' => 'error',
                  ]);
              }
          
              /**
               * 根據(jù)傳入?yún)?shù)組裝配置
               * 
               * /captcha/svg//w/200/h/60/s/72/l/5
              */
              public function BuildParam($params = [])
              {
                  $config = [];
          
                  if(empty($params)) {
                      return [];
                  }
          
                  // 模式,1=加法 2=減法, 或者隨機(jī)兩種
                  if(!empty($params['m'])) {
                      if($params['m'] == 1) {
                          $config['math'] = '+';
                      } elseif($params['m'] == 2) {
                          $config['math'] =  '-';
                      } else {
                          $config['math'] = 'rand';
                      }
                  }
          
                  if(!empty($params['w'])) {
                      $config['width'] = $params['w'];
                  }
          
                  if(!empty($params['h'])) {
                      $config['height'] = $params['h'];
                  }
          
                  // 文字大小
                  if(!empty($params['s'])) {
                      $config['fontSize'] = $params['s'];
                  }
          
                  // 顯示文字?jǐn)?shù)量, 非算數(shù)模式有效
                  if(!empty($params['l'])) {
                      $config['size'] = $params['l'];
                  }
          
                  // 干擾線條數(shù)量
                  if(!empty($params['n'])) {
                      $config['noise'] = $params['n'];
                  }
          
                  // 背景色, #fefefe
                  if(!empty($params['b'])) {
                      $config['background'] = $params['b'];
                  }
          
                  return $config;
              }
          }
          

          注冊(cè)進(jìn)tp驗(yàn)證工具

          Validate::maker(function ($validate) {
              $validate->extend('svgcaptcha', function ($value) {
                  return svg_captcha_check($value);
              }, ':attribute錯(cuò)誤!');
          });

          本組件基于如下開(kāi)源庫(kù)

          瀏覽 20
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩另类色图 | 成人综合娱乐网 | 影音先锋熟女av 永久免费看黄网址 | 免费一区二区三区四区五区 | 大香蕉在线大香蕉国产 |