Cara Membuat Verifikasi Form Menggunakan Captcha Dengan PHP

By | Januari 29, 2019

Verifikasi Form Menggunakan Captcha CAPTCHA atau Captcha adalah suatu bentuk uji tantangan-tanggapan (challange-response test) yang digunakan dalam perkomputeran untuk memastikan bahwa jawaban tidak dihasilkan oleh suatu komputer. Proses ini biasanya melibatkan suatu komputer (server) yang meminta seorang pengguna untuk menyelesaikan suatu uji sederhana yang dapat dihasilkan dan dinilai oleh komputer tersebut. Karena komputer lain tidak dapat memecahkan CAPTCHA, pengguna manapun yang dapat memberikan jawaban yang benar akan dianggap sebagai manusia. Oleh sebab itu, uji ini kadang disebut sebagai uji Turing balik, karena dikelola oleh mesin dan ditujukan untuk manusia, kebalikan dari uji Turing standar yang biasanya dikelola oleh manusia dan ditujukan untuk suatu mesin. CAPTCHA umumnya menggunakan huruf dan angka dari citra terdistorsi yang muncul di layar Sumber : wikipedia.org.

Sebelum ada CAPTCHA, spammer/hacker dapat membuat program untuk secara otomatis mengisi formulir seperti pendaftaran email gratis, sehingga ia akan memperoleh ribuan alamat email dengan mudah untuk kemudian disalah-gunakan Atau untuk mengubah hasil sebuah polling online, seseorang bisa saja membuat program sederhana untuk mengisi polling tersebut dengan jawaban yang sama sebanyak ribuan atau bahkan jutaan kali. Akibatnya polling itu tentu saja menjadi tidak valid

Baca Juga: Teknik Login, Register dan Logout pada Login Seasion di PHP MySQLi

Fungsi Pokok dari captcha :

  1. Mencegah Comment Spam
    pada umumnya Pemilik web/blog/dll tidak hanya ingin komment webnya terlihat bagus dalam penampilan, kuantitas tapi tentu kualitas , tp gak tau kalo adminnya sendiri yang spam
  2. Mencegah Spam Bot
    Tau sendiri Kan bot tak bisa membaca captcha, karena string string pemrogramannya sudah tetap . tak mungkin capthca yang setiap saat berubah dapat dibaca kecuali kalau bot itu berasal dari engine Blog itu sendiri
  3. Mencegah Flood
    Siapa Yang Ingin Dia di Flood ? kecuali flood like tp kalau flood kata kata yang tidak pantas banyak lagi siapa yang mau coba ?? (Flood adalah mangirimkan data secara berulang ulang)
  4. Melindungi Pendaftaran Email/User
    Dulu Pernah Kejadian Yahoo dan google diserang semacam robot yang mendaftar email ampe ribuan! kebayang gak? ribuan mail palsu , pasti om google dan mpok yahoo marah

Captcha biasanya terdiri dari 3 hal, yaitu bentuk, distorsi, dan teks. Ikuti langkah-langkah berikut ini untuk membuat sebuah captcha :

1. Tampilan Gambar kosong pada browser
Langkah pertama kita membuat sebuah folder dengan nama captcha yang berisi file index.php dan image.php
index.php

           <?php       session_start();        ?>       <!DOCTYPE html>       <html>        <head>         <title>Aplikasi Captcha</title>         <style>           body{             background-color: #ddd;             margin: 20px;           }           .wrapper{             display:block;             width: 400px;             margin: 0 auto;           }         </style>        </head>        <body>          <?php           include_once "image.php";           create_image();           ?>           <div class="wrapper">             <form action="proses.php" method="post">               <h2>Belajar Membuat Captcha</h2>               <p><img src="image.png"></p>               <input type="text" name="nilaiCaptcha" >               <input type="submit" name="submit" value="SUBMIT">             </form>             <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">               <input type="submit" value="RESET">             </form>            </div>         </body>       </html>

image.php

      <?php      function create_image(){         $image = imagecreatetruecolor(150, 50);        imagepng($image, "image.png");       }      ?>

Di dalam function create_image(), variabel yang digunakan untuk merujuk gambar dikembalikan oleh imagecreatetruecolor() fungsi yang mengambil lebar dan panjang gambar sebagai argumen. imagepng() menciptakan citra png dari nama tertentu dan path (dalam direktori yang sama). Perlu diperhatikan bahwa fungsi imagepng akan menjadi baris terakhir dari function create_image.
Sebuah gambar dengan warna hitam akan menjadi output setelah langkah pertama kita selesai buat.

gambar1

Baca Juga: Membuat Paging dengan PHP

2. Buat bentuk
Selanjutnya kita akan memilih persegi panjang dengan menggunakan fungsi imagefilledrectangle(). Kemudian fungsi imagecollorallocate() yang berfungsi mengalokasikan warna dengan kombinasi RGB.

      $color = imagecolorallocate($image, 255, 255, 255);      imagefilledrectangle($image, 0, 0, 400, 50, $color);

gambar2

3. Menghasilkan garis acak
Sekarang kita akan mulai membuat bagian distorsi captcha. Dalam PHP, garis yang dihasilkan dari titik awal (x1, y1) ke titik akhir (x2, y2). Kita akan membuat sebuah garis acak dengan menggunakan fungsi for.

     $color_line = imagecolorallocate($image, 0, 0, 0);        // membuat garis pada gambar       for($i=0; $i<5; $i++){         imageline($image, 0, rand()%50, 150, rand()%50, $color_line);       }

gambar3

4. menghasilkan titik acak
Titik acak akan dihasilkan dalam cara yang sama seperti garis acak. Fungsi yang digunakan adalah imagesetpixel(). Fungsi ini mengambil nilai koordinat dimana titikakan ditempatkan di dalam kotak.

     // membuat titik titik pada gambar       for($i=0; $i<1000; $i++){         imagesetpixel($image, rand()%150, rand()%50, $color_line);       }

gambar4

5. Menghasilkan teks acak
Sekarang kita akan membuat teks acak yang menunjukkan posisi didalam string

    // membuat abjad di dalam gambar    $abjad = "abcdefghijklmnopqrstuvwxyz";    $len = strlen($abjad);    $abjads = $abjad[rand(0, $len-1)];     $kata = "";    for($i=0; $i<5; $i++){      $abjads = $abjad[rand(0, $len-1)];      imagestring($image, 5, 5+($i*30), 20, $abjads, $color_line);      $kata .= $abjads;    }    $_SESSION['captcha'] = $kata;

hasil

Baca Juga: Cara Membuat Website

imagestring() berfungsi untuk menulis teks dalam gambar yang telah kita buat dan memilik 6 argumen :

  1. Gambar Referensi
  2. Font Ukuran teks (mulai dari angka 1 sampai 5)
  3. x-koordinat (berubah secara proporsional untuk setiap alfabet)
  4. y-koordinat (tetap sama, meskipun kita bisa merubah ini secara acak)
  5. String yang harus ditulis di dalam gambar
  6. Font warna teks

Untuk langkah pembuatan gambar captcha sudah selesai, jika kita gabungkan semua kode dari awal sampai akhir pada function create_image syntaks nya seperti dibawah ini
image.php

    <?php    function create_image(){       $image = imagecreatetruecolor(150, 50);      $color = imagecolorallocate($image, 255, 255, 255);      imagefilledrectangle($image, 0, 0, 400, 50, $color);        $color_line = imagecolorallocate($image, 0, 0, 0);       // membuat garis pada gambar      for($i=0; $i<5; $i++){        imageline($image, 0, rand()%50, 150, rand()%50, $color_line);      }       // membuat titik titik pada gambar      for($i=0; $i<1000; $i++){        imagesetpixel($image, rand()%150, rand()%50, $color_line);      }     // membuat abjad di dalam gambar    $abjad = "abcdefghijklmnopqrstuvwxyz";    $len = strlen($abjad);    $abjads = $abjad[rand(0, $len-1)];     $kata = "";    for($i=0; $i<5; $i++){      $abjads = $abjad[rand(0, $len-1)];      imagestring($image, 5, 5+($i*30), 20, $abjads, $color_line);      $kata .= $abjads;    }    $_SESSION['captcha'] = $kata;       imagepng($image, "image.png");     }     ?>

Sekarang kita buat untuk langkah untuk pemrosesannya. buatlah sebuah file dengan nama proses.php
proses.php

    <?php    session_start();    $submit = $_POST['submit'];    $nilaiCaptcha = $_POST['nilaiCaptcha'];     if (isset($submit)) {      if (empty($nilaiCaptcha)) {        echo "<script>window.alert('Form tidak boleh kosong'); window.location=('index.php');</script>";      }else{         if($_SESSION['captcha'] == $nilaiCaptcha){          header('location:halaman_utama.php');        }else{          echo "<script>window.alert('Captcha anda salah'); window.location=('index.php');</script>";        }      }    }      ?>

Langkah terakhir kita membuat sebuah halaman untuk menampilkan jika inputan captcha bernilai benar.
halaman_utama.php

    <!DOCTYPE html>    <html>     <head>       <title>Selamat Datang</title>     </head>     <body style="margin-top:20px;">       <div style="width:400px; margin:0 auto;">         <h2>Selamat Datang</h2>         <p>Anda telah berhasil memasukkan <b><i>Nilai Captcha</i></b></p>         <p><a href="index.php" style="text-decoration:none;">Kembali</a></p>       </div>     </body>    </html>

Demo

Tampilan awal kita akan melihat tampilan seperti dibawah ini

demo1

Jika kita menuliskan nilai captcha dengan benar, maka kita akan menuju ke halaman utama

demo2

demo3

Jika kita salah menulis nilai captcha, akan menampilkan alert bahwa captcha yang ditulis salah.

demo4

Kesimpulan

Membuat berbagai jenis CAPTCHA di PHP sangatlah mudah. Artikel ini mencakup tiga hal dasar yang digunakan untuk membuat captcha standart : Bentuk, Distorsi dan Teks. Kode yang disajikan disini tidak boleh digunakan dalam pembuatan CAPTCHA di sebuah website karena ada alternatif CAPTCHA yang sangat baik seperti reCAPTCHA, yang juga mendukung output suara. Saya harap anda bisa memahami alur yang telah dijelaskan diatas. Tinggalkan komentar dan umpan balik dibawah ini.

Download kode lengkapnya di bawah sini

DOWNLOAD || DROPBOX || DROPBOX 2 || MEDIAFIRE