程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP實現驗證碼制作原理

PHP實現驗證碼制作原理

編輯:PHP綜合

在做項目時會經常用到驗證碼,最多的就是圖形驗證碼,使用驗證碼也是為了網站登錄的安全,會出現各種奇形怪狀的驗證碼,當然現在采取了某些更加高級的技術,這些我們不談。 驗證碼存在的意義就是用來區分到底是人在登錄還是機器在登錄。服務器的資源是有限的,我們需要通過一種機制將這些機器請求給屏蔽掉,從而使資源為人服務。我們來看看怎麼用PHP來實現這個功能~

先看看具體步驟

1.生成驗證碼底圖
2.驗證碼內容生成
3.產生後增加某些干擾元素
4.生成驗證碼,以及對比校驗。

我們再來看看所要掌握的核心技術~

1、PHP圖片處理庫GD
2、隨機數,隨機字母,RGB顏色基本理解
3、SESSION基礎
4、AJAX基礎

接下來吾愛編程就為大家分享一下:

<?php

    session_start();

    $image = imagecreatetruecolor(100, 30);
    $bgcolor = imagecolorallocate($image, 255, 255, 255);
    imagefill($image,0,0,$bgcolor);//GD庫需要了解一下~~~

    $captch_code='';
    for($i=0;$i<4;$i++){
        $fontsize=6;
        $fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120),rand(0,120));
        $data='abcdefghigklmnopqrstuvwxyz1234567890';
        $fontcontent=substr($data, rand(0,strlen($data)),1);//選取子字符
        $x=($i*100/4)+rand(5,10);
        $y=rand(5,10);
        imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
        $captch_code.=$fontcontent;
    }
       $_SESSION['authcode']=$captch_code;

    for($i=0;$i<200;$i++){
        $pointcolor=imagecolorallocate($image, rand(50,200),rand(50,200), rand(50,200));
        imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);//畫點
    }
    for ($i=0; $i<3 ; $i++) { 
        $linecolor= imagecolorallocate($image, rand(80,220), rand(80,220),rand(80,220));//淺顏色
        imageline($image, rand(1,99), rand(1,29), rand(1,99), rand(1,29), $linecolor);//避免干擾元素過多,顏色過深
    }

    header( "Content-type:image/png" );
    imagepng($image);
    imagedestroy($image);//別忘了釋放資源
?>


其實總體來說代碼很簡單
最後我們可以再寫一個表單提交,判斷用戶驗證是否正確

<?php
  header("Content-Type: text/html; charset=utf-8");
    if (isset($_REQUEST['authcode'])) {
        session_start();

        if(strtolower($_REQUEST['authcode'])==$_SESSION['authcode']){
            echo "輸入正確";
        }else{
            echo "輸入錯誤";
        }
        exit();
    }
?>

這個驗證碼的制作總體來說還算簡單,比較容易上手的一個案例。希望對初學者有所幫助。。。

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved