Follow me on Twitter

الجمعة، 2 مارس، 2012

سكربت php : توليد captcha بسيطة

السلام عليكم

هذا سكربت php قمت بكتابته منذ فترة لـتوليد captcha بسيط ..أرجو أن تستفيدوا منه.

فى البداية قمت بانشاء ملف سمّيته captcha.php ،هذا الملف سيقوم بتوليد captcha ،ثم كتبت به الآتى:
$image = imagecreatetruecolor(70, 35);
$background_color = imagecolorallocate($image, 88, 158, 239);
$text_color = imagecolorallocate($image, 255, 255, 255);


imagecreatetruecolor(70, 35) // سيقوم بانشاء صورة بأبعاد عرض 70 بيكسل ،وطول 35 بيكسل

imagecolorallocate($image, $red, $green, $blue)
دالة تقوم بتعيين الألوان التى ستسخدم فى الخلفية وخط الكتابة حيث image$ هى متغير الصورة ،أما اللون فيتم تحديده عن طريق النوع RGB حيث R : أحمر،و G : أخضر ، و B : أزرق ،وقيمة كل منهم تكون بين 0 و 255 . يمكنك اختيار لونك المفضل أو توليد اللون عشوائيا.

إذا أردت أن تظهر خطوط عشوائية فى خلفية الصورة ،يمكنك كتابة الكود الآتى:
$line_color = imagecolorallocate($image,233,239,239); // لتوليد لون للخطوط
imageline($image,0,0,35,25, $line_color);
imageline($image,12,29,70,5, $line_color);


imageline($image, $x1, $y1, $x2, $y2, $color) // تلك الدالة تمثل خط واحد
حيث x1 $ و y1 $ هى الاحداثى y , x لبداية الخط ، وx2 $ و y2 $ هى الاحداثى y , x لنهاية الخط.

الآن نقوم بتلوين الخلفية باللون الذين قمنا بتعيينه سابقا للخلفية ،وذلك بالسطر الآتى :
imagefill($image, 5, 6, $background_color);

إن أردت كتابة كلمة ثابتة فى captcha لكى تظهر كل مرة فيمكنك كتابة الكود الآتى:
$string = 'asdfbhy';
imagestring($image, 5, 10, 10, $string, $text_color);


imagestring($image, $font, $x, $y, $string, $color) // وهذه دالة تعيين لون وخط ومكان الكلمة
حيث x$ هى احداثى x من النقطة العلوية فى اليسار ، و y$ هى احداثى y من النقطة العلوية فى اليسار

أما إذا أردت أن تولّد كلمة عشوائية كل مرة ،فيمكنك استخدام الكود الآتى ،حيث كتبته لتوليد مجموعة من الحروف والأرقام مجموعها 6 دون ترتيب.
$string = '';
for ($i=1; $i<=6; $i++){
$array = array(chr(rand(48, 57)),chr(rand(97, 122)));
$string .= $array[rand(0,1)];
}
imagestring($image, 5, 10, 10, $string, $text_color);

rand($min, $max ) // تقوم بتوليد رقم عشوائى بين القيمتين الصغرى والكبرى
دالة chr() تقوم بإعادة الحرف المقابل للرقم الموجود بداخل الأقواس من جدول ASCI

هناك أنواع كثيرة لتوليد صورة captcha منها png و jpg ،ولكننا سنستخدم png :
header("Content-Type: image/png");
imagepng($image);

ثم نقوم بازالتها بعد توليدها وتصديرها :
imagedestroy($image);

فى النهاية، نقوم بأخذ حروف captcha عن طريق session ،ونقارنها بما أدخله المستخدم.

عذرا للاطالة ،وأرجو أن أكون قد أفدتكم :)