Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

Belajar PHP: Membuat Captcha dengan Font dan Sudut Tulis Sendiri

Posted on March 21, 2011

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.

Kali ini kita akan belajar membuat captcha dengan class SimpleCaptcha yang dibuat oleh Ver Pangonilo. Source code dari simplecaptcha ini sbb:
[sourcecode language=”php”]
<?php

class SimpleCaptcha {

function SimpleCaptcha( $params = null )
{
$this->BackgroundImage = $params[‘BackgroundImage’]; //background image
$this->BackgroundColor = $params[‘BackgroundColor’];
$this->Height = $params[‘Height’]; //image height
$this->Width = $params[‘Width’]; //image width
$this->FontSize = $params[‘Font_Size’]; //text font size
$this->Font = $params[‘Font’]; //text font style
$this->TextMinimumAngle = $params[‘TextMinimumAngle’];
$this->TextMaximumAngle = $params[‘TextMaximumAngle’];
$this->TextColor = $params[‘TextColor’];
$this->TextLength = $params[‘TextLength’];
$this->Transparency = $params[‘Transparency’];

$this->generateCode();
//initially, png is used
header("Content-type: image/png");
$this->generateImage($this->Code);

}
//Background Images
function getBackgroundImage()
{
return $this->BackgroundImage;
}

function setBackgroundImage( $background_image = null )
{
$this->BackgroundImage = $background_image;
}

//Backgroung Color
function getBackgroundColor()
{
return $this->BackgroundColor;
}

function setBackgroundColor( $background_color )
{
$this->BackgroundColor = $background_color;

}

//Image Height
function getHeight()
{
return $this->Height;
}

function setHeight( $height = null )
{
$this->Height = $height;
}
//Image Width
function getWidth()
{
return $this->Width;
}

function setWidth( $width = null )
{
$this->Width = $width;
}
//Font size
function getFontSize()
{
return $this->FontSize;
}

function setFontSize( $size = null )
{
$this->FontSize = $size;
}

//Font
function getFont()
{
return $this->Font;
}

function setFont( $font = null )
{
$this->Font = $font;
}

//Text Minimum Angle
function getTextMinimumAngle()
{
return $this->TextMinimumAngle;
}

function setTextMinimumAngle( $minimum_angle = null )
{
$this->TextMinimumAngle = $minimum_angle;
}

//Text Maximum Angle
function getTextMaximumAngle()
{
return $this->TextMaximumAngle;
}

function setTextMaximumAngle( $maximum_angle = null )
{
$this->TextMaximumAngle = $maximum_angle;
}

//Text Color
function getTextColor()
{
return $this->TextColor;
}

function setTextColor( $text_color )
{
$this->TextColor = $text_color;
}

//Text Length
function getTextLength()
{
return $this->TextLength;
}

function setTextLength( $text_length = null )
{
$this->TextLength = $text_length;
}

//Transparency
function getTransparency()
{
return $this->Transparency;
}

function setTransparency( $transparency = null )
{
$this->Transparency = $transparency;
}

//get Captcha Code
function getCode()
{
return $this->Code;
}

//Generate Captcha
function generateCode()
{
$length = $this->getTextLength();
$this->Code = "";
while(strlen($this->Code)<$length){
mt_srand((double)microtime()*1000000);
$random=mt_rand(48,122);
$random=md5($random);
$this->Code .= substr($random, 17, 1);
}

return $this->Code;
}

function generateImage($text = null)
{
$im = imagecreatefrompng( $this->getBackgroundImage() );
$tColor = $this->getTextColor();
$txcolor = $this->colorDecode($tColor);
$bcolor = $this->getBackgroundColor();
$bgcolor = $this->colorDecode($bcolor);
$width = $this->getWidth();
$height = $this->getHeight();
$transprency = $this->getTransparency();
$this->im = imagecreate($width,$height);
$imgColor = imagecolorallocate($this->im, $bgcolor[red], $bgcolor[green], $bgcolor[blue]);
imagecopymerge($this->im,$im,0,0,0,0,$width,$height,$transprency);
$textcolor = imagecolorallocate($this->im, $txcolor[red], $txcolor[green], $txcolor[blue]);
$font = $this->getFont();
$fontsize=$this->getFontSize();
$minAngle = $this->getTextMinimumAngle();
$maxAngle = $this->getTextMaximumAngle();
$length = $this->getTextLength();

for($i=0;$i<$length;$i++){
imagettftext(
$this->im,
$fontsize,
rand(-$minAngle,$maxAngle),
$i*15+10,
$this->FontSize*1.2,
$textcolor,
$font,
substr($text, $i, 1));
}

imagepng($this->im);
imagedestroy($this->im);
}

function colorDecode( $hex ){

if(!isset($hex)) return FALSE;

$decoded[red] = hexdec(substr($hex, 0 ,2));
$decoded[green] = hexdec(substr($hex, 2 ,2));
$decoded[blue] = hexdec(substr($hex, 4 ,2));

return $decoded;

}
}
?>
[/sourcecode]

Untuk menggunakannya, silakan buat satu file php baru (misalnya: img.php) dan isi dengan source sbb:
[sourcecode language=”php”]
<?php
session_start();
require_once(‘class.simplecaptcha.php’);
/*
*****CONFIGURATION STARTS*****
*/
//Background Image
$config[‘BackgroundImage’] = "white.png";

//Background Color- HEX
$config[‘BackgroundColor’] = "F5F5F5";

//image height – same as background image
$config[‘Height’]=30;

//image width – same as background image
$config[‘Width’]=100;

//text font size
$config[‘Font_Size’]=23;

//text font style
$config[‘Font’]="arial.ttf";

//text angle to the left
$config[‘TextMinimumAngle’]=5;

//text angle to the right
$config[‘TextMaximumAngle’]=15;

//Text Color – HEX
$config[‘TextColor’]=’000000′;

//Number of Captcha Code Character
$config[‘TextLength’]=6;

//Background Image Transparency
$config[‘Transparency’]=50;

/*
*******CONFIGURATION ENDS******
*/

//Create a new instance of the captcha
$captcha = new SimpleCaptcha($config);

//Save the code as a session dependent string
$_SESSION[‘string’] = $captcha->Code;

?>
[/sourcecode]

Untuk menggunakan captcha ini, silakan load sebagai image:
[sourcecode language=”html”]
<img src="http://localhost/latihan/img.php" />
[/sourcecode]

atau contoh lengkapnya dalam satu form:
[sourcecode language=”php”]
<?php
session start();
<html>
<head>
<title>Simple CAPTCHA Class Application</title>
</head>
<body>
<?php
if (!$_POST[‘code’])
{
?>
<form id="demo" action="<?php echo $_SERVER[‘PHP_SELF’]; ?>?goto=login" method="POST">

Message:
<br/>
<textarea name="message" cols="25" rows="5" id="message" ></textarea>
<br/>
Validation Code:
<br/>
<img src="./captcha.php" alt="CAPTCHA">
<br>
<input type="text" name="code" size="30">
<br>
<input type="submit" value="Go">
</form>
<?php
}else{

//Check if userinput and CAPTCHA Code are equal
if ($_SESSION[‘string’] == $_POST[‘code’])
{
echo ‘<script>alert("Correct Code.");history.go(-1);</script>’;
}
else
{
echo ‘<script>alert("Incorrect Code.");history.go(-1);</script>’;
}
}
?>
</body>

</html>
[/sourcecode]

Menggunakan Custom Font

Dengan class ini, secara default font yang digunakan untuk dirender pada image captcha adalah font Arial. Kita bisa mengganti jenis font tersebut dengan mengganti pada parameter $config[‘font’] dengan (misalnya) calibri.ttf. Untuk mendapatkan file font tersebut, silakan browse ke C:\windows\fonts\ atau download dari internet.

Mengubah sudut tulis (angle) dari Font Captcha

Untuk mengubah sudut tulis dari huruf/angka captcha, silakan ubah variabel $config[‘TextMinimumAngle’] atau $config[‘TextMaximumAngle’].

Terbaru

  • Ketemu Link Video Viral ‘Petualangan Ustadzah Rahma’? Hati-hati, Kamu Bisa Dihack
  • Ikon Mic Roblox Hilang? Gini Caranya Mengaktifkan Kembali Voice Chat Biar Bisa Mabar Lagi!
  • Ini Cara Hapus Rombel Ganda di EMIS 4.0 yang Nggak Muncul Tombol Hapus
  • Inilah Kenapa Data Info GTK Kalian Nggak Berubah Padahal Dapodik Udah Sinkron
  • Belum Tahu CoreTax? Ini Trik Supaya Affiliator Lancar Lapor SPT Tahunan 2025 Tanpa Ribet
  • Inilah Cara Pendaftaran Peserta TKA SD dan SMP yang Benar Biar Nggak Salah Langkah!
  • Gagal Sinkron Dapodik 2026 C? Ini Trik Lengkap Supaya Berhasil Tanpa Pusing!
  • Cara Download Bukti Potong BPA1 di CoreTax, Nggak Perlu Ribet Minta HRD Lagi!
  • Cara Lapor SPT Tahunan di CoreTax Buat Pekerjaan Bebas, Ternyata Nggak Ribet Kalau Tahu Triknya!
  • Cara Beresin Siswa Tidak Teridentifikasi dan Rombel Ganda di EMIS 4.0
  • Cara Usul PIP di Dapodik 2026.B Biar Peserta Didik Kalian Dapat Bantuan!
  • Inilah Cara Awal Mengelola Web TKA Biar Nggak Pusing Pas Pelaksanaan!
  • Inilah Cara Mengatasi Masalah Jam Mengajar di InfoGTK Biar Cepat Valid!
  • Cara Atasi Residu Verval PD yang Tetap Muncul Padahal Sudah Hijau, Operator Sekolah Wajib Tahu!
  • Mau Cuan dari Nonton Drama di Cash Reels? Jangan Buru-buru Install Sebelum Baca Ini!
  • Tertipu Saldo Palsu? Apakah Game Layer Drop Penipu?
  • Inilah Syarat Terbaru dan Cara Daftar Bansos PKH-BPNT 2026 Lewat HP!
  • Inilah Trik Hubungkan Telegram ke WaIDN Biar Saldo Ngalir Terus!
  • Caranya Mengatasi Kode Verifikasi PayPal yang Nggak Pernah Nyampe di HP
  • Inilah Cara Cek Pencairan KJP Plus Januari 2026 Biar Nggak Bingung Lagi
  • Inilah Cara Cek Dana PIP yang Cair Senin 19 Januari 2026 Lewat HP!
  • Ingin Kuliah Gratis di 2026? Ini Cara Daftar KIP Kuliah via HP dan Syarat Lengkapnya!
  • Inilah Cara Cek Status KIS Bansos Aktif Secara Instan Lewat Smartphone Kamu!
  • Inilah Cara Cek NIK KTP Penerima Bansos PKH dan BPNT Januari 2026 yang Paling Gampang!
  • Ini Trik Ampuh Mengatasi Kode Verifikasi PayPal yang Nggak Kunjung Masuk!
  • Sering Gagal Transaksi? Ini Cara Mengatasi Kode FP2769 di BRImo yang Bikin Pusing!
  • Layar Oppo Muncul Error Hubungan Baterai? Gini Cara Beresinnya Sampai Tuntas!
  • Cara Munculin Menu Hadiah Melolo di iPhone
  • Inilah Cara Main Melolo Drama Biar Gak Boros Kuota dan Saldo Cair Terus!
  • Ini Trik Rahasia Cara Memunculkan Potongan Harga TikTok Shop yang Nggak Muncul di Akun Kalian!
  • Siapa itu Kelompok Hacker Silver Fox?
  • Apa itu CVE-2025-52691 SmarterMail? Celah Keamanan Paling Berbahaya Tahun 2025
  • Apa Itu ErrTraffic? Mengenal Platform ClickFix yang Bikin Website Jadi ‘Error’ Palsu
  • What is Reflex Framework? A Full-stack Python Framework
  • CloudFlare Acquired AstroJS!
  • Tutorial Python Deepseek Math v2
  • Cara Menggunakan SAM3D untuk Segmentasi dan Pembuatan Model 3D dari Teks
  • Cara Membuat AI Agent Super Cerdas dengan DeepAgents dan LangGraph
  • Perbedaan GPU vs TPU, Mana yang Terbaik
  • Tutorial Langfuse: Pantau & Optimasi Aplikasi LLM
  • Siapa itu Kelompok Hacker Silver Fox?
  • Apa itu CVE-2025-52691 SmarterMail? Celah Keamanan Paling Berbahaya Tahun 2025
  • Apa Itu ErrTraffic? Mengenal Platform ClickFix yang Bikin Website Jadi ‘Error’ Palsu
  • Ini Kronologi Hacking ESA (European Space Agency) 2025
  • Apa itu Zoom Stealer? Ini Definisi dan Bahaya Tersembunyi di Balik Ekstensi Browser Kalian
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV

©2026 emka.web.id | Design: Newspaperly WordPress Theme