Kamis, 01 Oktober 2009

PHP Captcha - Cara Membuat Captcha

perhatikan script berikut :

<?php
session_start();
$width = 140;
$height = 70;
$im = imagecreate($width, $height);
$bg = imagecolorallocate($im, 0, 0, 0);

$len = 5;
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$string = '';
for (
$i = 0; $i < $len; $i++) {
$pos = rand(0, strlen($chars)-1);
$string .= $chars{$pos};
}

$_SESSION['captcha_code'] = md5($string);
$grid_color = imagecolorallocate($im, 175, 0, 0);
$number_to_loop = ceil($width / 20);
for(
$i = 0; $i < $number_to_loop; $i++) {
$x = ($i + 1) * 20;
imageline($im, $x, 0, $x, $height, $grid_color);
}

$number_to_loop = ceil($height / 10);
for(
$i = 0; $i < $number_to_loop; $i++) {
$y = ($i + 1) * 10;
imageline($im, 0, $y, $width, $y, $grid_color);
}


$line_color = imagecolorallocate($im, 130, 0, 0);
for(
$i = 0; $i < 30; $i++) {
$rand_x_1 = rand(0, $width - 1);
$rand_x_2 = rand(0, $width - 1);
$rand_y_1 = rand(0, $height - 1);
$rand_y_2 = rand(0, $height - 1);
imageline($im, $rand_x_1, $rand_y_1, $rand_x_2, $rand_y_2, $line_color);
}

$text_color = imagecolorallocate($im, 255, 0, 0);
$rand_x = rand(0, $width - 50);
$rand_y = rand(0, $height - 15);
imagestring($im, 10, $rand_x, $rand_y, $string, $text_color);

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


mari kita bahas syntax di atas yukk...

session_start(); - kita akan memasukan nilai captcha di $_SESSION.. jadi kita nyalakan dulu session_startnya, NB : kalo di anda sudah ada session_start() tidak perlu dipakai 2 kali.. eeheheheh.
$width = 140; - Nah yang ini untuk menentukan panjang dari gambar captcha nanti...
$height = 70; - Kalo yang ini untuk menentukan lebar dari gambar captcha nanti....
$im= imagecreate($width , $height ); - Nah fungsi ini untuk fungsi membuat gambarnya... nilai nya di masukan ke $im dengan panjang dan lebar dari $width dan $height
$bg = imagecolorallocate($im, 0, 0, 0); - selanjutnya ini untuk menseting gambar background yang ada di captcha.. sebagai contoh captcha ini menggunakan value 0, 0, 0, yang akan menghasikan warna hitam.. ( jika berminat gambar yg lain agar lebih gampang bisa ko cari value rgb di photoshop :D :D).
$len = 5; - ini berfungsi untuk mengatur berapa panjang karakter yang nanti akan muncul di captcha kita... so kalo merasa kurang bisa ditambah ko.. :D
$_SESSION['captcha_code'] = md5($string); - nah kalo yang ini perlu diperhatikan.. $string yg telah bernilai value yang di acak dari value $char.. dimasukan ke sini.. lalu fungsi md5 ini untuk mengencriptsy nilai $string, lalu setelah itu dimasukan value itu ke $_SESSION yang sebelumnya kita aktivkan (ini berfungsi untuk nilai acuan di form nanti pada pengkondisian kebenaran di form...
$grid_color = imagecolorallocate($im, 175, 0, 0); - Ini berfungsi untuk membuat garis garis pada background. fungsi grid disini untuk memusingkan gambar.
$number_to_loop = ceil($width / 20); - nah ini berfungsi untuk menciptakan berapa kali harus looping dan menghasilkan grid tsb.
imageline($im, $x, 0, $x, $height, $grid_color); - ini akan menciptakan grid mengikuti sumbu X...
$number_to_loop = ceil($height / 10); - ini sama dengan yang sebelumnya, yang beda hanya pada nilai pembaginya (berfungsi untuk menentukan jarak ).
imageline($im, 0, $y, $width, $y, $grid_color); - dan ini juga berfungsi untuk menciptakan garis, tetapi mengikuti sumbu Y.
$line_color = imagecolorallocate($im, 130, 0, 0); - ini akan menciptakan grid secara acak berwarna merah pada gambar.
for($i = 0; $i <> - fungsi ini akan mengulang selama 30 kali, yang akan menciptakan garis secara acak sebanyak 30, anda bisa edit sesuai keperluan anda.
$text_color = imagecolorallocate($im, 255, 0, 0); - nah kalo fungsi yang ini untuk memberikan warna pada nilai string acak yang akan di hasilkan nanti, bisa diganti ko.
imagestring($im, 10, $rand_x, $rand_y, $string, $text_color); - dan akhirnya fungsi untuk membuat gambar berdasarkan nilai2 yang telah dimasukan kati....
imagepng($im); - menset semua, dan sekarang kita bisa lihat hasil gambar captcha. :D

hufh capek juga ngetik, semoga bermanfaat ya....

Fungsi Captcha di php ini untuk mengetahui apakah yang menginput itu manusia atau komputer, karena komputer tidak mampu menyelesaikan gambar/ mengidentifikasi nilai yang ada pada gambar tersebut, keamanan juga tergantung seberapa kuat captcha yang dipakai di php anda.

so mindset captcha adalah, serumit mungkin buat komputer( perpaduan warna, gambar dan letak acak nilai pada gambar), tetapi mudah dilihat oleh user.

2 komentar:

Anonim mengatakan...

mantaf gann!!!
thx banget infonya.. kebetulan saya lagi butuh kaya ginian buat proyek web
makasih skali lagi

Fana Barkah A on 28 Desember 2009 pukul 17.41 mengatakan...

sama2 gan..

silahkan di sedot..
dari kaskus ea??

ehhe

Posting Komentar

 

Blogroll

This Web Copyright © 2009 WoodMag is Designed by Ipietoon for Free Blogger Template