2011年8月2日 星期二

[PHP]:驗證碼

本驗證碼是在深入淺出(Head First)那本書裡頭"參考"過來的驗證碼教學

這本書寫的真是好,真的是"第一次寫驗證碼就上手"

底下程式碼以及我打上的註解,喜歡的朋友可以參考看看給小第指點指點

 1).index.php

<?php
session_start();
if (!empty($_POST["Code"])) {
    if ($_POST["Code"] == $_SESSION['pass_phase']) {
        echo "驗證成功";
    } else {
        echo "驗證失敗";
    }
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <form method="post" action="index.php" name="f1">
            <img src="TFT.php" alt="">
            <input type="text" name="Code" value="">
            <input type="submit" name="subutton" name="送出">
        </form>
    </body>
</html>

2).TFT.php

<?php
session_start();
define('CAPTCHA_NUMCHARS',6);//自訂字數
define('CAPTCHA_WIDTH',100);//自訂寬度
define('CAPTCHA_HEIGHT',25);//自訂高度
$pass_phase="";
//英文字母A-Z取6位亂數
for($i=0;$i<CAPTCHA_NUMCHARS;$i++){
    $pass_phase.=chr(rand(97,122));
}
//A-Z取6位亂數存成session
$_SESSION['pass_phase']=$pass_phase;
//建立圖像物件
$img=  imagecreatetruecolor(CAPTCHA_WIDTH, CAPTCHA_HEIGHT);

//字定顏色
$bg_color=  imagecolorallocate($img, 255, 255, 255);
$text_color=imagecolorallocate($img, 64, 0, 64);
$graphic=imagecolorallocate($img, 255, 128, 0);
$graph_fu=imagecolorallocate($img, 0, 0, 0);
//建立一個矩形
imagefilledrectangle($img, 0, 0, CAPTCHA_WIDTH, CAPTCHA_HEIGHT, $bg_color);
//底色干擾線
for($i=0;$i<3;$i++){
    imageline($img, 0, rand() % CAPTCHA_HEIGHT, CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, $graphic);
}
//底色干擾點
for($i=0;$i<100;$i++){
    imagesetpixel($img, rand() % CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, $graph_fu);
}
//寫 TTF 文字到圖中。
imagettftext($img, 18, 0, 5, CAPTCHA_HEIGHT-5, $text_color, 'MSJHBD.TTF', $pass_phase);
header("Content-type:image/png");
//輸出PNG圖形
imagepng($img);
//結束圖形
ImageDestroy($img);
?>



DownLoad File

沒有留言: