PHP驗證碼的製作教程

來源:互聯網
上載者:User

標籤:strlen   click   mysq   create   簡單   步驟   fonts   eth   登入   

自己過去自學了PHP繪畫驗證碼的教程,現在就把這一部分筆記跟大家分享,希望可以幫到大家。

順帶,我會在後面把我整理的一整套CSS3,PHP,MYSQL的開發的筆記打包放到百度雲,有需要可以直接去百度雲下載,這樣以後你們開發就可以直接翻筆記不用百度搜那麼麻煩了。

 筆記連結:http://pan.baidu.com/s/1qYdQdKK 密碼:pvj2

 

下面主要從理論+實踐代碼進行講解,後面有代碼執行個體。

 

一、驗證碼的介紹
驗證碼是為全自動區分電腦和人類的圖靈測試的縮寫。是一種區分使用者是電腦和人的公用全Bot。

二、驗證碼應用情境?
(都是為了區分人還是機器,屏蔽機器請求)
a)登入、註冊確定提交前,做人/機器校正;
b)發布、回複資訊前,做人/機器校正;
c)疑似機器請求時,做人/機器校正;
………………

 

三、驗證碼服務的核心技術分析
實現步驟:
  1.產生底圖;
  2.產生驗證內容;
  3.產生驗證碼圖片;
  4.校正驗證內容;

技術點:
  a)底圖的實現,並且添加幹擾元素;
    依賴PHP圖片處理庫GD
    http://php.net/gd
  b)產生驗證內容
    簡單的隨機數產生,使用PHP函數mt_rand();
    隨機數字+字母產生,需要ASCII碼理論基礎;
    隨機中文產生,需要UTF-8編碼理論基礎;
  c)驗證內容儲存在服務端;
    需要PHP操作SESSION基礎
  d)驗證內容的校正
    需要前端Ajax基礎;

注意事項:
  a)依賴GD擴充
  b)輸出圖片前,必須提前輸出圖片header資訊;
  c)該方法預設輸出為黑色背景

 

從理論部分,然後按步驟進行一步一步的寫下面的代碼:

驗證碼的執行個體:(基本的驗證碼

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 <?php    session_start();    // 先製作底圖    $image = imagecreatetruecolor(100, 30);    $bgcolor = imagecolorallocate($image, 255, 255, 255);//產生底片顏色,預設為黑色    imagefill($image, 0, 0, $bgcolor);//x,y軸上的位置/*// 在地圖上顯示隨機數字    for($i=0;$i<4;$i++){        $fontsize=6;        $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));        $fontcontent=rand(0,9);//數字0~9        // 關鍵的部分 (注意事項:控制好字型大小與分布,避免字型重疊或顯示不全)        $x=($i*100/4)+rand(5,10); //寫在的座標上        $y=rand(5,10);        imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);    }*//*  //數字和字母驗證碼    for($i=0;$i<4;$i++){        $fontsize=6;        $fontcolor=imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));        $data =‘abcdefghigkmnpqrstuvwxy3456789‘;        $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="";    //字母驗證碼    for($i=0;$i<4;$i++){        $fontsize=6;        $fontcolor=imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));        $data =‘abcdefghigkmnpqrstuvwxy‘;        $fontcontent=substr($data, rand(0,strlen($data)),1);        $captch_code.=$fontcontent;        $x=($i*100/4+rand(5,10));        $y=rand(5,10);        imagestring($image$fontsize$x$y$fontcontent$fontcolor);    }    $_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‘);//輸出png的圖片    imagepng($image);//產生圖片    // 銷毀圖片    imagedestroy($image);?>

  

關於PHP的驗證代碼部分後,就是配上前端的顯示頁面代碼:

12345678910111213141516 <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>登入</title></head><body>    <form action="reg.php" method="post">    <img id="captcha_img" src="verify.php?r=<?php echo rand();?>">    <a href="javascript:void(0);" onclick="document.getElementById(‘captcha_img‘).src=‘verify.php?+Math.random()‘;" title="換一個?">看不清?</a><br>        驗證碼:<input type="text" name="authcode">        <input type="submit" >    </form></body></html>

 上面是數位驗證碼,下面的這部分PHP是圖片驗證碼的頁面圖片驗證碼的顯示

123456789101112131415161718 <?php    session_start();     // 圖片的驗證碼    $table=array(        "pic0"=>‘狗‘,        "pic1"=>‘貓‘,        "pic2"=>‘魚‘,        "pic3"=>‘鳥‘        );    $index=rand(0,3);    $value=$table[‘pic‘.$index];    $_SESSION[‘authcode‘]=$value;    $filename=dirname(__FILE__).‘\\pic‘.$index.‘.jpg‘;//需要自己準備好圖片!!
1 $contents=file_get_contents($filename); header(‘content-type:image/jpg‘); echo $contents; ?>

 

下面這個是漢字的顯示代碼:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 漢字的驗證碼:<?php    session_start();    // 先製作底圖    $image = imagecreatetruecolor(200, 60);    $bgcolor = imagecolorallocate($image, 255, 255, 255);//產生底片顏色,預設為黑色    imagefill($image, 0, 0, $bgcolor);//x,y軸上的位置    $fontface=‘msyh.ttf‘;    $str="劉恒春美女帥哥看這裡來好樣的我知道了是";    $strdb=str_split($str,3);//每三個長算一個漢字    header("content-type:text/html;charset=‘utf8‘");    $captch_code="";    //中文驗證碼    for($i=0;$i<4;$i++){        $fontcolor=imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));        $index=rand(0,count($strdb));        $cn=$strdb[$index];        $captch_code.=$cn;        imagettftext($image, mt_rand(20,24), mt_rand(-60,60), (40*$i+20), mt_rand(30,35),$fontcolor,$fontface,$cn);    }    $_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,199), rand(1,59), $pointcolor);    }  // 添加線幹擾    for($i=0;$i<3;$i++){        $linecolor=imagecolorallocate($image, rand(80,220), rand(80,220),rand(80,220));        imageline($image, rand(1,199),rand(1,59), rand(1,199),rand(1,59),$linecolor);    }    header(‘content-type:image/png‘);//輸出png的圖片    imagepng($image);//產生圖片    // 銷毀圖片    imagedestroy($image);     ?>

  

綜上的全部就是驗證碼代碼的總結了,如果有需要可以到我下面的百度雲裡面下載對應的筆記。

筆記連結:http://pan.baidu.com/s/1qYdQdKK 密碼:pvj2

 

PHP驗證碼的製作教程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.