کد امنیتی یا کپچا کد یک راه حل ساده و آسان برای جلوگیری از اسپم و هرزه نویسی ها و همچنین جلوگیری از ورود و فعالیت رباتها میباشد که برای تمام وبسایتها لازم و واجب میباشد. ما در اینجا قصد داریم کدی ساده برای ایجاد این تصویر کد امنیتی به زبان PHP را آموزش دهیم.

کلیات کار به این صورت هست که شما یک متن تصادفی را ایجاد میکنید و یا از یک فایل متنهای آماده شده را میخوانید و این متن را در یک جلسه Session ذخیره میکنید و متن را کمی بهم ریخته کرده و برای کاربر نمایش میدهید. کاربر پس از مشاهده متن داخل تصویر ، متن را نوشته و برای شما ارسال میکند و شما متن ارسالی کاربر را با متنی که خودتان در تصویر ایجاد کرده اید که در جلسه موجود هست مطابقت میدهید. در صورت درست بودن اجازه فعالیتهای بعدی صادر خواهد شد.

 rand(0,6)) return $text;
   //only parttime warping
   $ltrs = array('b'=>'b','c'=>'c','d'=>'d','f'=>'f','g'=>'g','h'=>'h','j'=>'j',
               'k'=>'k','l'=>'l','m'=>'m','n'=>'n','p'=>'p','q'=>'q','r'=>'r',
			   's'=>'s','t'=>'t','v'=>'v','w'=>'w','x'=>'x','z'=>'z');

  $vkeys = $vltrs = explode(',','a,e,i,o,u,y');
  shuffle($vkeys);
  $vowels = array();
  foreach($vkeys as $ndx=>$vkey) $vowels[$vkey] = $vltrs[$ndx];
  //the vowels + y are now jumbled up

  $ltrs = array_merge($ltrs,$vowels);
  //full associative array of alphabet with randomized vowels + y
  $text = str_split($text);

  $captcha = '';
  foreach($text as $txt) $captcha .= $ltrs[$txt];
  return $captcha;
 }

 /*
  xsixlw.txt is a long string of 6 letter words concatenated together.
  We pick a word at random from this text
 */
 $fp = fopen('xsixlw.txt',"r");
 $count = filesize('xsixlw.txt')/6 - 1;
 $pos = 6*rand(0,$count);
 fseek($fp,$pos);
 $captcha = warpedCaptcha(trim(fread($fp,6)));
 fclose($fp);

 session_start();
 $_SESSION['captcha'] = $captcha;
 //store the captcha to check later once the user has solved it
 session_write_close();

 $im = imagecreatetruecolor(200,70);//200 x 70 pixel image
 $black = imagecolorallocate($im,0,0,0);
 imagecolortransparent($im,$black);//give it a black background

 switch(rand(0,4))
 {
  case 0:$color = imagecolorallocate($im,34,155,91);break;
  case 1:$color = imagecolorallocate($im,233,26,74);break;
  case 2:$color = imagecolorallocate($im,233,26,195);break;
  case 3:$color = imagecolorallocate($im,244,178,19);break;
  case 4:$color = imagecolorallocate($im,53,125,199);break;
 } 
 //pick a random color for the text

 $x = 20;$y = 47;//the starting position for drawing
 for ($i=0;$i<6;$i++)
 {
  $angle = rand(-8,8) + rand(0,9)/10;
  $fontsize = rand(22,32);//pick a random font size
  $letter = substr($captcha,$i,1);
  $coords = imagettftext($im,$fontsize,$angle,$x,$y,$color,'oldsans.ttf',$letter);
  //draw each letter
  $x += ($coords[2]-$x) + 1;
 }

header('Content-type:image/png');
imagepng($im);
imagedestroy($im);
?>

 

نحوه استفاده از اسکریپت تصویر امنیتی:

۱- استخراج فایلها (Extract Files) در یک فولدر مناسب در سرور:

simplephpcaptcha.php
xsixlw.txt 
ldsans.ttf

۲- در صفحه ای که میخواهید از تصویر امنیتی (کپچا) استفاده کنید، کد زیر را بنویسید:


<img height="70" src="path_to_folder/simplecaptcha.php" width="200" />

۳- ایجاد یک فیلد متنی برای دریافت کد امنیتی :

<form action="" method="post"><code><input name="captcha" type="text" /> <input name="submit" type="submit" />&nbsp;</code></form>

۴- بررسی صحت کد امنیتی وارد شده در سمت سرور:


session_start();
if(isset($_POST['submit'])){
	if($_SESSION['captcha'] == $_POST['captcha']){
		echo "Captcha Is Correct";
	}else{
		echo "Captcha Isn't Correct";
	}
}

.در صورت درست یا غلط بودن کد وارد شده پیامی ظاهر میشود که نتیجه کار را مشخص میکند. شما میتوانید به جای این پیغامها، هر عملی که باید در اسکریپتتان انجام شود را بنویسید.