1 Haziran 2013 Cumartesi

PHP`de Resim Doğrulama


Hemen hemen her sitede bulunan resim doğrulama yani güvenlik kodlarına rastlarız.Bunlar üyelik formalarında,sipariş formalarında whois sorgulama gibi yerlerde karşımıza çıkar.Bu doğrulamayı aşağıdaki gibi yapabilirsiniz.

Form Sayfası :index.php

<!-- Tarayıcı ön belleğinde tutulmaması için no-cache -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//TR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="TR" lang="tr">
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<title>wmturk.net - Resim doğrulama uygulamasına ait demo</title>

<form method="post" action="sonuc.php"> Dogrulama Kodu: <img src="img.php" height="25" width="75" />Doğrulama Kodunu Giriniz: <input size="6" maxlength="6" name="kod" type="text" />

<input value="Test et" type="submit" />
</form>
</body>
</html>

Resim oluşturma sayfası :img.php
<?
session_start();
/* Olusturulan kodu diger sayfalara tasiyabilmemiz icin oturum baslatiyoruz.
0-999 araliginda bir sayi olusturup bunu md5 ile sifreliyoruz.
*/
$md5yap=md5(rand(0,9999));

//md5 ile sifrelenen sayimizin uzunlugu 32 karakter olacaktir. Biz 6 karakterli alacagiz.
$dogrulamakodu = strtoupper(substr($md5yap, 8, 6));

//Dogrulama icin kullanicak kodumuzu acilan oturuma kaydediyoruz.
$_SESSION["dogrulamakodu"] = $dogrulamakodu;

//Resim boyutlari belirleniyor
$en = 75;
$boy = 25;

//Uzerinde calisacagimiz resim olusturuluyor.
$image = ImageCreate($en, $boy);

//Beyaz,Siyah ve Kirmizi renkler olusturuyoruz. Rakamlar renkleri ifade etmektedir.
$beyaz = ImageColorAllocate($image, 255, 255, 255);
$siyah = ImageColorAllocate($image, 0, 0, 0);
$kirmizi = ImageColorAllocate($image, 242, 0, 0);

//Arka plani beyaz yapiyoruz
ImageFill($image, 0, 0, $beyaz);

//Olusturulan dogrulama kodunu resime yaziyoruz.
ImageString($image, 6, 9, 5, $_SESSION["dogrulamakodu"], $siyah);

//Gorunumu biraz karistirmak icin cizgilerle gorunumu zorlastiriyoruz.
//Dilerseniz imageline() satirlarini kaldirarak cizgileri yok edebilirsiniz.
imageline($image, 0, 2, $en, 2, $kirmizi);
imageline($image, 0, 25, $boy, 0, $kirmizi);
imageline($image, $en, $boy, 40, 0, $kirmizi);
imageline($image, 0, 23, $en, 23, $kirmizi);

// Tarayiciya dosyamizin tipini yolluyoruz.
header("Content-Type: image/jpeg");

//Resmimizi Jpg formatinda basiyoruz.
ImageJpeg($image);

//Bir kereye mahsus kullanacagimiz icin siliyoruz.
ImageDestroy($image);
exit();

?>

Sonuç Sayfası : sonuc.php
<?
session_start();
// Eger form doldurulmussa
if( isset($_POST['kod']) ){
if( strtoupper($_POST['kod']) == $_SESSION['dogrulamakodu'] ){
echo '
<h4>Tebrikler, Doğru kodu girdiniz: <code>'.$_POST['kod'].'</code></h4>';
}else{
echo '<h4><code>'.$_POST['kod'].'</code>Hatali giris, tekrar deneyiniz. '.$_SESSION['dogrulamakodu'].'</h4>';
}
echo '<a href="index.php">Tekrar _fcksavedurl=""index.php">Tekrar" _fcksavedurl=""index.php">Tekrar" dene?</a>';
} else {
?>
<a href="index.php">Sadece post verileri ile calisan bir sayfadir. Giris sayfasina donebilirsiniz.?</a>
<?}?>


Hiç yorum yok:

Yorum Gönder