Cara Membuat Captcha dengan PHP

Ditulis Oleh:

Cara membuat captcha dengan php – Captcha merupakan suatu bentuk uji respon/tanggapan kepada pengguna untuk memastikan bahwa pengguna tersebut adalah manusia dan bukan robot. Biasanya tes yang dilakukan adalah meminta pengguna untuk menginput sejumlah karakter yang sesuai dengan karakter yang ditampilkan, atau bisa juga pengguna diminta untuk memilih beberapa gambar dari pertanyaan yang diberikan. Pengguna harus memberikan tanggapan yang tepat agar lulus uji tes tersebut.

Captcha basanya digunakan saat kita mengisi formulir di sebuah website. Dengan menggunakan captcha maka akan mencegah/membatasi bot atau spam yang sengaja dilakukan pada website kita.

Saat ini captcha telah mengalami perkembangan, Google sendisi sudah membuat invisible captcha yang disebut reCaptcha dengan menganalisa aktifitas/kegiatan pengguna yang telah disimpan oleh Google untuk menentukan apakah manusia atau bukan.

Untuk kali ini kita akan belajar membuat captcha sederhana menggunakan PHP. Untuk membuat captcha dari google (reCaptcha) akan saya bahas pada artikel lain. Ikuti langkah-langkah berikut ini untuk cara membuat captcha dengan php.

Buat file captcha.php

Tahap pertama kita buat sebuah file dengan nama captcha.php isi dari file tersebut adalah sintak berikut:

<?php
session_start(); //Memulai session
$width = 85; //Ukuran lebar
$height = 35; //Tinggi
$im = imagecreate($width, $height);
$bg = imagecolorallocate($im, 0, 0, 0);
$len = 6; //Panjang karakter
$chars = '12345abcdefg'; //Kombinasi huruf dan angka yang diacak
$string = '';
for ($i = 0; $i < $len; $i++) {
    $pos = rand(0, strlen($chars)-1);
    $string .= $chars{$pos};
}
$_SESSION['kode_captcha'] = $string; //hasil acak disimpan dalam variabel session
//menambahkan titik2 gambar / noise
$bgR = mt_rand(100, 200); $bgG = mt_rand(100, 200); $bgB = mt_rand(100, 200);
$noise_color = imagecolorallocate($im, abs(255 - $bgR), abs(255 - $bgG), abs(255 - $bgB));
for($i = 0; $i < ($width*$height) / 3; $i++) {
    imagefilledellipse($im, mt_rand(0,$width), mt_rand(0,$height), 3, rand(2,5), $noise_color);
}
// proses membuat tulisan
$text_color = imagecolorallocate($im, 240, 240, 240);
$rand_x = rand(0, $width - 50);
$rand_y = rand(0, $height - 15);
imagestring($im, 12, $rand_x, $rand_y, $string, $text_color);
header ("Content-type: image/png"); //Output format gambar
imagepng($im);
?>

Pada file captcha.php kita membuat captcha yang akan disimpan di variabel session untuk nantinya akan dilakukan pembanding antara kode captcha yang ditampilkan dan kode yang dimasukan oleh pengguna.

Kode captcha akan ditampilkan dalam bentuk gambar dengan extensi [dot]png. Ukuran gambar dapat kita atur melalui variabel $width dan $height. Untuk mengatur berapa panjang karakter kode captcha, bisa diatur pada variabel $len. dan untuk kombinasi karakter kode bisa kita atur di variabel $chars. Karakter tersebut bersifat case sensitive (huruf kecil dan besar dibedakan).

Selain itu gambar juga sengaja dibuat dengan ditambahkan beberapa titik noise, untuk sedikit memberikan efek noise agar gambar kode captcha tersebut tidak mudah dikenali oleh robot.

Buat file index.php

Selanjutnya kita buat file index.php pada file ini kita akan buat sebuah form input dengan menggunakan kode captcha yang telah kita buat pada file captcha.php

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
    <title>Membuat Captcha dengan PHP</title>
    <!-- Load file CSS Bootstrap offline -->
    <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">

</head>
<body>
<?php
$pesan='';
if ($_SERVER["REQUEST_METHOD"] == "POST") {

    if (isset($_POST['input_kode'])) {
            if ($_SESSION['kode_captcha']!=$_POST['input_kode']){
                $pesan="<div class='alert alert-danger'><strong>Error!</strong> Kode yang dimasukan salah.</div>";
                session_destroy();
            }else {
                $pesan="<div class='alert alert-success'><strong>Sukses!</strong> Kode yang dimasukan benar.</div>";
            }
        }
}
?>
<div class="container">
    <br>
<h4>Membuat Captcha dengan PHP</h4>
    <hr>

<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
    <div class="form-group">
        <img src="captcha.php" width="85" height="35" alt="Kode Acak" />
    </div>
    <div class="form-group">
        <label>Username:</label>
        <input type="text" name="input_kode" id="kodeval" size="6" maxlength="6" class="form-control" placeholder="Masukan kode disini" required />
    </div>
    <?php echo $pesan; ?>
    <button type="submit" name="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</body>
</html>

Yang pertama kita aktifkan dulu sessionnya dengan menggunakan fungsi session_start() lihat pada baris kedua.

  <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">

Saya menggunakan bootstrap untuk tampilan formulirnya. Dengan menggunakan bootstrap secara offline yang sudah di download dan saya panggil di bagian <head>.

Pelajari cara menggunakan bootstrap

<?php
$pesan='';
if ($_SERVER["REQUEST_METHOD"] == "POST") {

    if (isset($_POST['input_kode'])) {
            if ($_SESSION['kode_captcha']!=$_POST['input_kode']){
                $pesan="<div class='alert alert-danger'><strong>Error!</strong> Kode yang dimasukan salah.</div>";
                session_destroy();
            }else {
                $pesan="<div class='alert alert-success'><strong>Sukses!</strong> Kode yang dimasukan benar.</div>";
            }
        }
}
?>

Selanjutnya saya membuat kondisi untuk menerima nilai dari kiriman form. disini saya membuat form dengan action ke file index.php sendiri (tidak berpindah pada halaman lain) dengan menggunakan variabel global $_SERVER[“PHP_SELF”].

Selanjutnya ada kondisi untuk mengecek apakah ada nilai kiriman form dengan nama ‘input_kode’ ? Jika Iya maka di cek lagi antara kode yang dimasukan dengan kode_captcha yang tampil apakah identik (sama) ?

 if ($_SESSION['kode_captcha']!=$_POST['input_kode'])

Jika kode yang diinput dengan kode captcha yang tampil tidak sama maka akan menampilkan pesan error yang menyatakan bahwa kode yang dimasukan tidak sesuai. Sementara bila kode tersebut sama, maka akan menampilkan pemberitahuan sukses. Pesan pemberitahuan disimpan pada variabel $pesan yang nantinya akan di tampilkan diatas button submit.

Uji coba

Setelah membuat kedua file diatas, sekarang kita lakukan uji coba. uji coba pertama saya akan masukan dengan kode yang salah (lihat pada gambar berikut)

membuat captcha dengan php

Ketika saya menekan tombol submit, maka akan muncul pemberitahuan error.

Percobaan yang kedua saya masukan dengan kode yang sesuai.

membuat captcha dengan php 2

Ketika tombol submit di klik maka hasilnya seperti pada gambar berikut:

Selesai sudah seri belajar php untuk cara membuat captcha dengan PHP. Kalian bisa membuat dan mengembangkannya sesuai kebutuhan aplikasi kalian. Bila ada pertanyaan bisa kalian sampaikan melalui kolom komentar dibawah,Terimakasih.