کد ایجاد تصویر امنیتی ساده (کپچا) در PHP

در وب گردیهایتان حتما برایتان پیش آمده است که بخواهید فرمیرا پر کنید و یا در وب سایتی عضو شوید و در پایان پر کردن فرم از شما بخواهند که تصویر و یا کد امنیتی موجود را در فرم وارد کنید.یکی از دلایل انجام این کار جلوگیری از ارسال دیدگاه اسپم است. شاید به عنوان یک طراح این فکر به ذهن شما خظور کرده باشد که خودتان یک تصویر امنیتی بسازید!!

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

کد ایجاد تصویر امنیتی ساده (کپچا) در PHP

وارد کردن کد امنیتی (کپچا) در وبسایتها، گاها برای کاربران واقعی، کاری بسیار دشوار و آزار دهنده است است. jReply یک اسکریپت برای نمایش کد امنیتی در وبسایتمان برای کاربران نوشته است، که در عین راحتی در نوشتن برای کاربران واقعی، از ورود روباتها نیز جلوگیری میکند. کد نوشته شده نیز به منظور راحتی در تطبیق و تغییر آن ساده و قابل درک نوشته شده است.

کد زیر همان کد استفاده شده در اسکریپت تصویر امنیتی ساده (کپچا) است . توجه کنید که کد زیر به تنهایی کار نمیکند و نیازمند فونت و لیست لغات است که به صورت کامل ضمیمه شده. این کد جهت مطالعه قرار داده شده است.

<?php

 function warpedCaptcha($text)
 {
 /*
 this function takes the original captcha text and shuffles
 the vowels + y around in order to deliver more variable 
 captcha text
 */
 if (5 > 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" width="200" src="path_to_folder/simplecaptcha.php"/>

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

<form action="" method="post">
 <input type="text" name="captcha" />
 <input type="submit" name="submit" />
</form>

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

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

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

این هم از این آموزش از سری آموزش های بیگ تم.

موفق و پیروز باشید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *