كود PHP:
<?php
session_start();
class SecurityImage
{
//المتغيرات المستخدمة
public $bg, $image, $font, //fonts الخطوط موجودة بفولدر
$fontsize, $colour, // لون وحجم الخط
$strLength,
$text = "", $num_dots, // النص وعدد النقاط العشوائية
$chars = array("a", "A", "b", "B", "c", "C", "d", "D", "e", "E", "f", "F", "g",
"G", "h", "H", "i", "I", "j", "J", "k", "K", "l", "L", "m", "M", "n", "N", "o",
"O", "p", "P", "q", "Q", "r", "R", "s", "S", "t", "T", "u", "U", "v", "V", "w",
"W", "x", "X", "y", "Y", "z", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9");
// مؤسس الكلاس : ينشيء القيم الاولية
function SecurityImage()
{
$this->num_dots = 300; // عدد النقاط المضافة
$this->strLength = 5;// طول النص
$this->fontsize = 18;// حجم الخط
$this->selectFont(); // اختيار الخط
$bg = "images/" . mt_rand(1, 7) . ".png"; // الصورة المستخدمة كخلفية
$this->image = imagecreatefrompng($bg);// انشاء صورة على خلفية صورة اخرى
$this->colour = ImageColorAllocate($this->image, 0, 0, 0); // لون النقاط , هنا استخدمنا الاسود
// عرض الصورة تلقائيا عند استدعاء الكلاس
$this->show();
// اضافة الكود الى سيشن لمقارنته مع الكود المدخل من الفورم
$_SESSION['SECURITY_CODE'] = $this->text;
}
// عرض الصورة
function show()
{
Header("Content-type: image/png");
$this->text = $this->genString();
// كتابة حرف او مز تلو الاخر على الصورة
for ($i = 0; $i < $this->strLength; $i++) {
$this->writeLetter($this->text[$i], (20 + $i * 25));
}
$this->addNoise();
imagepng($this->image);
imagedestroy($this->image);
}
// توليد نص بحروف وارقام عشوائية من المصفوفة اعلاه
function genString()
{
for ($i = 0; $i < $this->strLength; $i++) {
$this->text .= $this->chars[mt_rand(0, count($this->chars) - 1)];
}
return $this->text;
}
// كتابة نص على الصورة بتغيير الخط واللون
function writeLetter($letter, $xvalue)
{
$yvalue = 30 - mt_rand(0, 10); // Randomly adjust y position.
$angle = mt_rand(-30, 30); // Give text a slight random angle.
// دالة لكتابة نص على الصورة باستخدام نوع الخط والزاوية والاحداثيات واللون والنص
imagettftext($this->image, $this->fontsize, $angle, $xvalue, $yvalue, $this->
colour, $this->font, $letter);
}
// للمقارنة بين النص المدخل والنص الذي على الصورة
function isMatch($t)
{
if ($t == $this->text) {
return true;
} else
return false;
}
// دالة لاضافة نقاط عشوائية على الصورة
function addNoise()
{
$width = imagesx($this->image); // الحصول على عرض الصورة ووضعه بمتغير
$height = imagesy($this->image); //الحصول على ارتفاع الصورة ووضعه بمتغير
//نقاط عشوائية
for ($i = 0; $i < $this->num_dots; $i++) {
//هذه الدالة لرسم القطع الناقص وتعتمد على 4 معطيات
imagefilledellipse($this->image, mt_rand(0, $width), mt_rand(0, $height), 1, 1,
$this->colour);
}
}
// (تغيير الخط)دالة لاختيار خط عشوائي لاستخدامه في الكتابة على الصورة
function selectFont()
{
//دالة للحصول على قيمة عشوائية mt_rand
switch (mt_rand(1, 3)) {
case 1:
$this->font = "fonts/Acidic.TTF";
break;
case 2:
$this->font = "fonts/arial.ttf";
break;
case 3:
$this->font = "fonts/frizzed.ttf";
break;
//case 4 : $this->font = "fonts/STACKZ.TTF"; break;
}
}
}
// انشاء الكائن الخاص بالصورة
$secim = new SecurityImage();
?>