首頁 > 後端開發 > PHP問題 > php如何實作登入驗證碼

php如何實作登入驗證碼

藏色散人
發布: 2023-03-06 06:30:01
原創
4328 人瀏覽過

php實作登入驗證碼的方法:先產生4到6位數的隨機驗證碼;然後把產生的每個字元儲存到session或資料庫;接著將驗證碼傳送到使用者的手機;最後將和輸入的驗證碼進行比較驗證即可。

php如何實作登入驗證碼

推薦:《PHP影片教學》 

PHP實作簡單的驗證碼功能機制

        網站的安全性是開發者不可忽視的問題,目前使用最多的一種可以提高網站安全性的方法就是使用驗證碼功能機制,有的僅使用一個幾位數字字母混亂的驗證碼,有的進行手機發送簡訊進行驗證,有的使用郵箱發送郵件進行驗證,但是這個驗證碼功能機制是如何實現的呢?以下就為大家詳細解釋驗證碼功能機制的實作想法以及簡單的實作方法。

1、驗證碼功能機制實現想法

① 常規的驗證碼實作:

a、產生一張png的圖片

b、為圖片設定背景色

c、設定字體顏色和樣式

d、產生4位數的隨機的驗證碼

e、把產生的每個字元調整旋轉角度和位置畫到png圖片上

f、加入雜訊和乾擾線防止註冊機器分析原始圖片來惡意註冊

g、輸出圖片

#h、釋放圖片所佔記憶體

i、將驗證碼儲存到session或是資料庫

j、將和輸入的驗證碼進行比較

② 簡訊(郵箱)驗證碼機制:

a、產生4-6位數的隨機的驗證碼

b、把產生的每個字元儲存到session或是資料庫

c、將驗證碼發送到用戶的手機(郵箱)

d、用戶在規定時間內進行輸入

e、將驗證碼從session或是資料庫中取出

f、將和輸入的驗證碼進行比較驗證

2、簡單的實作驗證碼功能機制

① 新建captcha.php,寫入以下程式碼

<?php
/**
 * =======================================
 * Created by WeiBang Technology.
 * User: Wei ZhiHua
 * Date: 2016/10/12 0020
 * Time: 下午 4:14
 * Power: 实现验证码功能
 * =======================================
 */
 
//开启session
session_start();
//创建一个大小为 100*30 的验证码
$image = imagecreatetruecolor(100, 30);
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgcolor);
 
$captch_code = &#39;&#39;;
for ($i = 0; $i < 4; $i++) {
    $fontsize = 6;
    $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));
    $data = &#39;abcdefghijkmnpqrstuvwxy3456789&#39;;
    $fontcontent = substr($data, rand(0, strlen($data) - 1), 1);
    $captch_code .= $fontcontent;
    $x = ($i * 100 / 4) + rand(5, 10);
    $y = rand(5, 10);
    imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
//就生成的验证码保存到session
$_SESSION[&#39;authcode&#39;] = $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(&#39;content-type:image/png&#39;);
imagepng($image);
imagedestroy($image);
 
?>
登入後複製

② 新建form .php,寫入以下程式碼

<?php
/**
 * =======================================
 * Created by WeiBang Technology.
 * User: Wei ZhiHua
 * Date: 2016/10/12 0021
 * Time: 下午 4:14
 * Power: 实现验证码功能
 * =======================================
 */
 
if (isset($_REQUEST[&#39;authcode&#39;])) {
    session_start();
    if (strtolower($_REQUEST[&#39;authcode&#39;]) == $_SESSION[&#39;authcode&#39;]) {
        echo "输入正确!";
    } else {
        echo "输入错误!";
    }
    exit();
}
?>
 
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <title>确认验证码</title>
</head>
<body>
<form method="post" action="./form.php">
    <p>验证码图片:
        <img id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand(); ?>" width=100 height=30>
        <a href="javascript:void(0)"
           onClick="document.getElementById(&#39;captcha_img&#39;).src=&#39;./captcha.php?r=&#39;+Math.random()">换一个?</a>
    </p>
    <p>请输入图片中的内容:<input type="text" name="authcode" value=""/></p>
    <p><input type="submit" value="提交" style="padding:6px 20px;"></p>
</form>
</body>
</html>
登入後複製

      以上就是php驗證碼的製作想法和實作方法,從簡單到複雜,可以根據這些寫出非常完美的驗證碼功能機制。

以上是php如何實作登入驗證碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板