Heim >Backend-Entwicklung >PHP-Tutorial >PHP generiert grafischen Verifizierungscode (erweiterter Interferenztyp)

PHP generiert grafischen Verifizierungscode (erweiterter Interferenztyp)

安安杰尼
安安杰尼Original
2020-04-30 16:05:58195800Durchsuche

Verifizierungscode-Nutzungsszenarien

Im Prozess der Systementwicklung werden grundsätzlich alle Systeme das Anmeldemodul einbeziehen, dessen Bestätigungscode-Funktion ein unverzichtbarer Bestandteil ist, um eine effektive Explosion des Systems zu verhindern . Wie das Sprichwort sagt: Der Teufel ist so hoch wie die Straße Heutzutage werden Verifizierungscodes immer komplexer und fortschrittlicher. In diesem Artikel werden einfache alphanumerische Bestätigungscodes beschrieben.

Code

<?php

/*********************************************************************************
 * InitPHP 3.8.2 国产PHP开发框架   扩展类库-验证码
 *-------------------------------------------------------------------------------
 * 版权所有: CopyRight By initphp.com
 * 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己
 *-------------------------------------------------------------------------------
 * Author:zhuli Dtime:2014-11-25
 ***********************************************************************************/
class Code
{

    private $charset = "abcdefghjklmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789";   //随机因子
    private $code;     //验证码文字
    private $codelen = 4;    //验证码显示几个文字
    private $width = 100;   //验证码宽度
    private $height = 40;   //验证码高度
    private $img;       //验证码资源句柄
    private $font;     //指定的字体
    private $fontsize = 20;  //指定的字体大小
    private $fontcolor;     //字体颜色  随机

    //构造类  编写字体
    public function __construct()
    {
        $this->font = &#39;/outputs/font/font.ttf&#39;;
    }

    //创建4个随机码
    private function createCode()
    {
        $_leng = strlen($this->charset) - 1;
        for ($i = 1; $i <= $this->codelen; $i++) {
            $this->code .= $this->charset[mt_rand(0, $_leng)];
        }
//        session_start();
//        $_SESSION[&#39;VerifyCode&#39;] = strtolower($this->code);
        Session::set(&#39;VerifyCode&#39;, strtolower($this->code));
        return $this->code;
    }

    //创建背景
    private function createBg()
    {
        //创建画布 给一个资源jubing
        $this->img = imagecreatetruecolor($this->width, $this->height);
        //背景颜色
        $color = imagecolorallocate($this->img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
        //画出一个矩形
        imagefilledrectangle($this->img, 0, $this->height, $this->width, 0, $color);
    }

    //创建字体
    private function createFont()
    {
        $_x = ($this->width / $this->codelen);   //字体长度
        for ($i = 0; $i < $this->codelen; $i++) {
            //文字颜色
            $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
            //资源句柄 字体大小 倾斜度 字体长度  字体高度  字体颜色  字体  具体文本
            imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $this->height / 1.4, $color, $this->font, $this->code[$i]);
        }
    }

    //随机线条
    private function createLine()
    {
        //随机线条
        for ($i = 0; $i < 6; $i++) {
            $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
            imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
        }
        //随机雪花
        for ($i = 0; $i < 45; $i++) {
            $color = imagecolorallocate($this->img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
            imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), &#39;*&#39;, $color);
        }
    }

    //输出背景
    private function outPut()
    {
        //生成标头
        header(&#39;Content-type:image/png&#39;);
        //输出图片
        imagepng($this->img);
        //销毁结果集
        imagedestroy($this->img);
    }

    //对外输出
    public function doimg()
    {
        //加载背景
        $this->createBg();
        //加载文件
        $this->createCode();
        //加载线条
        $this->createLine();
        //加载字体
        $this->createFont();
        //加载背景
        $this->outPut();
    }

    //获取验证码
    public function getCode()
    {
        return strtolower($this->code);
    }

    //验证验证码
    public function checkCode($code, $clear = false)
    {
//        session_start();
        if (Session::get(&#39;VerifyCode&#39;) == strtolower($code)) {
            if($clear) $this->clearCode();
            return true;
        }
        if($clear) $this->clearCode();
        return false;
    }

    //清除验证码
    public function clearCode()
    {
        Session::del(&#39;VerifyCode&#39;);
//        session_start();
//        unset ($_SESSION[&#39;VerifyCode&#39;]);
    }
}

Verifizierung

ob_clean();
$verify = new Code();
$verify->doimg();

Auf diese Weise können Sie den folgenden Verifizierungscode ausgeben

PHP generiert grafischen Verifizierungscode (erweiterter Interferenztyp)

Parameter können angepasst werden, um die Größe des Bestätigungscodes, Interferenzelemente usw. zu steuern.

Erweiterung

Als Nächstes stellen wir die Erweiterungsfunktion vor, wie wir die Interferenzelemente des Verifizierungscodes verstärken und wie wir ihn zur Anmeldeüberprüfung in das Projekt integrieren.

1. Interferenz verstärken

Zunächst können wir im obigen Screenshot einige Zeilen sehen, die zum Entschlüsseln verwendet werden Um unseren Bestätigungscode zu generieren, müssen Sie zu diesem Zeitpunkt den folgenden Code im Code hinzufügen und die Nummer 6 oben ändern. Sie können ihn langsam anpassen und dann überprüfen die Wirkung, bis Sie zufrieden sind. Gleichzeitig können Sie sehen, dass der Bestätigungscode viele Schneeflockeneffekte enthält. Dies ist auch ein Interferenzelement. Sie können die Nummer 45 oben ändern, um ein zufriedenstellendes Ergebnis zu erzielen.

Hinweis:

Die $charset-Variable im Code, der Bestätigungscode wählt zufällig Zeichen von hier aus, um die Überprüfung zu überleben, da der Anzeigeeffekt von Kleinbuchstaben i und L schwer zu unterscheiden ist. Deshalb haben wir das i-Zeichen entfernt.

2. Greifen Sie auf die Projektüberprüfung zu

Erstellen Sie eine neue Datei mit dem folgenden Code

//随机线条
private function createLine()
{
    //随机线条 
    for ($i = 0; $i < 6; $i++) {
        $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
        imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
    }
    //随机雪花
    for ($i = 0; $i < 45; $i++) {
        $color = imagecolorallocate($this->img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
        imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), &#39;*&#39;, $color);
    }
}

Fügen Sie diese dann auf der vorhandenen System-Anmeldeseite ein Die Schnittstelle kann den Bestätigungscode anzeigen, nachdem der Benutzer ihn ausgefüllt und übermittelt hat.

Das obige ist der detaillierte Inhalt vonPHP generiert grafischen Verifizierungscode (erweiterter Interferenztyp). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn