1. 程式人生 > >詳解圖形圖像技術如何生成驗證碼?

詳解圖形圖像技術如何生成驗證碼?

mage 隨機數 har 地址 idt session floor oct type

先說一下思路:

(1)先做出基本樣式

(2)用圖像處理技術生成驗證碼,並存session

(3)註意img的路徑,後面要跟一個隨機數,便於每次刷新時,傳的地址都是不一樣的

(4)用form表單把用戶輸入的驗證碼提交給form.php頁面,進行判斷,如果正確返回“輸入正確”,否則,返回“輸入錯誤”,空未做處理。

重點是:

(1)生成驗證碼時,要存一下session;

(2)判斷時,要用session存的驗證碼和用戶輸入的驗證碼進行判斷是否輸入正確;

(3)判斷後,註意返回123.html用的是方法

(4)驗證碼圖片路徑

首先,先寫html頁面:123.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<form method="post" action="form.php">
		<div class="con3">
			<div style="margin:0 8px;font-size: 24px;">
				圖片驗證碼
			</div>
			<div> <input class="con3_1" style="width: 150px;"  type="text" name="authcode" value=""/> </div>
			<div> <img id="captcha_img" border=‘1‘ src="./captcha.php?r=‘+Math.random();?>" style="width: 80px;height: 46px;margin-left: 10px;"/> </div>
			<a href="javascript:void(0)" onclick="document.getElementById(‘captcha_img‘).src=‘./captcha.php?r=‘+Math.random()">換一個?</a>
		    <input type="submit" value="驗證"  />
		</div>	
		</form>
	</body>
</html>
<script src="jquery-1.11.2.min.js"></script>
<!--實現點擊圖片刷新驗證碼-->
<script>
	$("img").click(function(){
		var sjs = Math.floor(Math.random()*100);
		$(this).attr("src","./captcha.php?r="+sjs);
		})
</script>

  其次:輸出驗證碼頁面:captcha.php

<?php
   //設置session,必須處於腳本最頂部
  session_start();
  $image = imagecreatetruecolor(100, 30);    //1>設置驗證碼圖片大小的函數
  //設置驗證碼顏色 imagecolorallocate(int im, int red, int green, int blue);
  $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff
  //區域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的區域著色,col 表示欲塗上的顏色
  imagefill($image, 0, 0, $bgcolor);
  //設置變量
  $captcha_code = "";
  //生成隨機數字
  for($i=0;$i<4;$i++){
    //設置字體大小
    $fontsize = 6;    
    //設置字體顏色,隨機顏色
    $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));      //0-120深顏色
    //設置數字
    $fontcontent = rand(0,9);
    //連續定義變量
    $captcha_code .= $fontcontent;  
    //設置坐標
    $x = ($i*100/4)+rand(5,10);
    $y = rand(5,10);
 
    imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
  }
  //存到session
  $_SESSION[‘authcode‘] = $captcha_code;
  //增加幹擾元素,設置雪花點
  for($i=0;$i<200;$i++){
    //設置點的顏色,50-200顏色比數字淺,不幹擾閱讀
    $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200));    
    //imagesetpixel — 畫一個單一像素
    imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);
  }
  //增加幹擾元素,設置橫線
  for($i=0;$i<4;$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);
  }
 
  //設置頭部,image/png
  header(‘Content-Type: image/png‘);
  //imagepng() 建立png圖形函數
  imagepng($image);
  //imagedestroy() 結束圖形函數 銷毀$image
  imagedestroy($image);

  最後,實現判斷 form.php頁面

<?php
  header("Content-Type:text/html;charset=utf-8");      //設置頭部信息
  //isset()檢測變量是否設置
  if(isset($_REQUEST[‘authcode‘])){
    session_start();
    //strtolower()小寫函數
    if(strtolower($_REQUEST[‘authcode‘])== $_SESSION[‘authcode‘]){
      //跳轉頁面
      echo "<script language=\"javascript\">";
      echo "alert(‘輸入正確!‘);";
      echo "document.location=\"./123.html\"";
      echo "</script>";
    }else{
      //提示以及跳轉頁面
      echo "<script language=\"javascript\">";
      echo "alert(‘輸入錯誤!‘);";
      echo "document.location=\"./123.html\"";
      echo "</script>";
    }
    exit();
  }

  實現效果:

技術分享

詳看地址:http://www.cnblogs.com/kangshuai/p/5558208.html

詳解圖形圖像技術如何生成驗證碼?