Tips PHP - Membuat Gambar CAPTCHA (Verifikasi / Konfirmasi) Dengan PHP

    
Apakah anda pernah mengisi form di sebuah website, dimana anda harus menulis kombinasi angka atau huruf (biasanya 4 huruf/angka) dari yang ada di gambar sebagai konfirmasi atau verifikasi? Nah itu namanya gambar Captcha, singkatan dari Completely Automated Public Turing test to tell Computers and Humans Apart. Tujuan utamanya adalah agar orang lain tidak bisa menggunakan program (robot atau bot) untuk secara otomatis mengisi form dan mengirimnya ke website tujuan. Dengan adanya gambar captcha tersebut, maka orang harus mengisi/menulis ulang huruf atau angka yang tertera pada gambar captcha tersebut.

Dalam tutorial kali ini kita akan membuat gambar captcha sendiri (yang sederhana) yang kiranya bisa sobat sekalian manfaatkan di websitenya untuk menghindari spam. Di sini saya buatkan garis-garis silang sebagai latarnya, agar walaupun orang lain pakai program OCR (program pembaca teks di dalam gambar) tetap tidak bisa mendeteksi tulisannya. Ingin lihat contohnya, coba deh masuk ke situs gue gamegratis33.com  (sekalian promosi nih ...  he he he (:-) , lalu klik salah satu game-nya dan coba kirim review, pada form pengisian review tersebut terdapat gambar captchanya.

Mari kita mulai, di sini kita buat tiga buah file, satu adalah file php untuk gambar captcha, yang satu lagi adalah file html (form pengisian) sebagai contoh untuk penggunaan gambar captcha tersebut, dan yang satu lagi adalah file php untuk merespon form pengisian.

File 1. File php untuk gambar captcha. (Nama file: tes_captcha.php)

<?php

session_start();

//menentukan kode captcha. Disini saya pakai angka acak sebanyak 4 angka.
$angka_acak = rand(0, 9) . rand(0, 9) . rand(0, 9) . rand(0, 9);
$_SESSION['kode_captcha'] = $angka_acak;

//atur header
header("Pragma: no-cache");
header('Content-type: image/jpeg');

//tentukan ukuran gambar
$width = 80;
$height = 30;
//inisialisasi gambar
$my_image = imagecreatetruecolor($width, $height);

//fungsi warna
function warna_acak($jenis_warna = 0){
    global $my_image;
    if ($jenis_warna == 0){  //warna background
        return imagecolorallocate($my_image, rand(210, 255), rand(210, 255), rand(210, 255));
    }else if ($jenis_warna == 1){  //warna noise
        return imagecolorallocate($my_image, rand(10, 100), rand(10, 100), rand(10, 100));
    }else if ($jenis_warna == 2){  //warna teks
        return imagecolorallocate($my_image, rand(0, 80), rand(0, 80), rand(0, 80));
    }
}

//menentukan warna latar. Disini warna latarnya saya acak.
imagefill($my_image, 0, 0, warna_acak());

// tambahkan noise - bintik-bintik. Sobat bisa pakai ini bisa juga tidak.
for ($c = 0; $c < 50; $c++){
    $x = rand(0,$width-1);
    $y = rand(0,$height-1);
    imagesetpixel($my_image, $x, $y, warna_acak(1));
}

//tambah garis menyilang
for ($hor = (rand(1, round($height / 2)) -$height); $hor < $width; $hor+=12){
    $warna = warna_acak(1);
    for ($ver = 0; $ver < $height; $ver++){
        imagesetpixel($my_image, ($hor + $ver), $ver, $warna);
    }
}
for ($hor = (rand(1, round($height / 2)) -$height); $hor < $width; $hor+=12){
    $warna = warna_acak(1);
    for ($ver = 0; $ver < $height; $ver++){
        imagesetpixel($my_image, ($hor + $ver), ($height - $ver), $warna);
    }
}

//buat gambar - sekalian mengacak posisi teks
$x = rand(5,30);
$y = rand(0,15);
imagestring($my_image, 9, $x, $y, substr($angka_acak, 0, 1), warna_acak(2));
$x += 12;
$y = rand(0,15);
imagestring($my_image, 9, $x, $y, substr($angka_acak, 1, 1), warna_acak(2));
$x += 12;
$y = rand(0,15);
imagestring($my_image, 9, $x, $y, substr($angka_acak, 2, 1), warna_acak(2));
$x += 12;
$y = rand(0,15);
imagestring($my_image, 9, $x, $y, substr($angka_acak, 3, 1), warna_acak(2));

imagejpeg($my_image);
imagedestroy($my_image);

?>

Untuk teks berwarna merah di atas adalah untuk menambahkan noda-noda titik, jika sobat tidak senang menggunakannya (mungkin akan kelihatan agak semrawut), bisa di-non-aktifkan. caranya tambahkan tanda // di depannya. Jadinya akan seperti begini:
//imagesetpixel($my_image, $x, $y, warna_acak(1));

File di atas adalah untuk membuat gambar captcha. Berikut ini adalah contoh form (html) yang menggunakan captcha di atas.

File 2. Contoh Form Pengisian Yang Menggunakan Captcha. (Nama file: tes_form.html)

<html><head>
<title>Tes Penggunaan Captcha</title>
</head><body>
<p align="center"><strong>Tes Penggunaan
Captcha</strong></p>
<p><form name="frsmt" method="post" action="http://127.0.0.1/tes_respon.php">
<table border="0" >
    <tr><td>Nama: </td>
    <td><input size="30" name="nama" id="nama"></td>
    </tr>
    <tr><td>Alamat:</td>
    <td><input size="50" name="alamat" id="alamat"></td>
    </tr>
    <tr><td valign="top">Konfirmasi : </td>
    <td>Tulis kembali kode yang tertera pada gambar di bawah ini: <p>
    <img style="float:left; border:1px solid silver; margin:-10px 0 0 0; " src="http://127.0.0.1/tes_captcha.php">
    <input style="float:left; margin:-10px 0 0 10px; text-align:center; height:32px; font-size:1.3em; "
       type="text" maxlength="4" size="5"
       id="kodecaptcha" name="kodecaptcha" > </p>
    </td>
    </tr>
</table>
<input value="Kirim" name="submit" type="submit"> <input
value="Reset" name="reset" type="reset">
</body>
</html>

Perhatikan teks berwarna merah, di sana tertulis "http://127.0.0.1". Ini diganti dengan alamat website anda. Berikut ini adalah file php untuk merespon data yang dikirim melalui file form di atas.

File 3. Contoh script PHP untuk merespon form di atas. (Nama file: tes_respon.php)

<?php

session_start();

$nama = $_POST['nama'];
$alamat = $_POST['alamat'];
$kodecaptcha = trim($_POST['kodecaptcha']);
$kodecaptcha_sebenarnya = trim($_SESSION['kode_captcha']);

//tulis hasil
echo "Tes Pengecekan Captcha<BR>===============<BR>" .
    "Nama: $nama <BR>" .
    "Alamat: $alamat<BR>=============<BR>";
echo "Kode captcha yg diinput: $kodecaptcha <BR>" .
    "Kode captcha sebenarnya: $kodecaptcha_sebenarnya
<br>Kesimpulan: ";

if ($kodecaptcha === $kodecaptcha_sebenarnya) {
    echo "Kode captcha <B>BENAR</B>";
}else{
    echo "Kode captcha <B>SALAH</B>";
}
?>

Selesai. Untuk kode lengkapnya bisa didownload di sini.
Ini adalah screenshot jika menjalankan program di atas:


0 komentar:

Posting Komentar

Please write your comments here.Thanks.

Kategori

055CXPRO3 100Hz 1024x768 1080ip 1080p 10MP 10xOptical 121MP 121Megapixels 121megapixel 12Channel 12Ounce 141MP 165LBS 18Volt 19YearOlds 23Inch 240ml 25quot 2746 27Inch 2Pack 30Inch 3255 3265 3265Inch 32Inch 37Inch 37LV3500 3Inch 412Inch 46G310U 46Inch 46Inches 46LA45RQ 46PFL5706F7 46SL412U 46SL417U 46quot 47Inch 5460Inch 55Inch 58Inch 5Piece 60Watt 6by9Inch 732YB482K 800x600 812Inch 998864 ALAMPLB APTMM2B ATHM50 Accessory Add-ons Mozilla Adsense Advertising Advice Affect Affordable Alexa American Amplifier Android Annies Antenna Anti Virus Antivirus Antivirus Update Aperture Appetite Aquapac Articulating Attic AudioTechnica Automatic Available BC12062 BDPS570 BRAVIA BRPK3AN Backlink Backpack Backrest Bamboo Basics Bathroom Batteries Battery Battle Bedding Bedroom Bedrooms Beechwood Before Beginners Benefits Berita Berita Terbaru Better Between Bicycle Binoculars Birthday Bisnis Internet Black Blackberry Blanket Blog Blossom BluRay Blue BlueSilver BoltOn Bose Boyfriend Bracket Brackets Brand Breakfast Brightess Bringing Brother Bubble Building Bundle Burning Butter Buyers Buying CINNAMON CX3800 CX3810 CX4200 CX4300 CX4600 CX4800 CX5000C CX7400 CX7800 Cabinet Cabinets Camcorders Camera Cameras Capacity Cara Bisnis Online Cara Recovery Data Cara Self Test Printer Cara Service Elektronik Cara Service Harddisk Cara Service Jaringan Cara Service Komputer Cara Service Laptop Cara Service Monitor Cara Service Ponsel Cara Service Printer Cara Service TV Cara Service UPS Carbide Carbon Carved Castings Castle Ceiling Celebrate Celtic Chairs Changeable Changing Charger Charlie Chatbox Cheapest Cheetah Cherry Chocolate Choose Choosing Chopsticks Christmas Cinderblock Cleaning Closer Coaxial Coffee Collapsible Collection College Color Column Combination Comforter Compact Companies Company Compare Compared Comparing Compatible Computer Concept Concrete Consider Consumer Contemporary Control Convertible Cooker Cooler Coolpix Cordless Corner Cotton Crafting Creating Creative Crochet Crocheter Css Cubbies Cutting Cybershot DC91802 DEWALT DMCLX5 DMCS1 DMCS3 DMCTS2 DMCTS3 DMCZS5 DMCZS9 DSCH70 DSCT10 DSCT90 DSCW310BLDB Danica Dawson Decorate Decorating Definition Delight Deluxe Design Designer Development Device Dietary Difference Different Digital Digital Camera Canon Digital Camera Canon Powershot Digital Camera Fujifilm Digital Camera Lens Digital Camera Nikon Digital Camera Panasonic Digital SLR Camera Discover Display Displays Distressed Distribution Dofollow Dollars Domain Dreams Drilling Drills Driver Drivers Drives Dumbbell Dymatize E-book Gratis E370VA E470VLE EA8080 ECES80 ECST65 ELPLP49 EXFH20 EXZ75 Earthquake EasyShare Ebook Edition Effective Egyptian Emoticons Entertainment Ericsson Espresseria Espresso Essentials Ethernet Everyone Everything Excellent Exchange Exilim Experience Explained Extended Extremely Facebook Family Fantastic Fashionable Fashions Faucet Features Fermented Fibromyalgia Finding FinePix Finish Firmness Follow Format Formula Foundation Freaks Free Software Freeware Fujifilm Function Furniture Future Game Gratis Keren Gaming Generation Getting Girlfriend Glasses GoPro Camera Goggles Google Adsense Google Friend Connect Google Translate Google+ Grey Grinder HTML Hacking Halloween Handheld Handlebar Handset Headboard Headphones Headset HighPerformance Hitachi Hollywood Homemade Homework Housing Husks Ilmu Komputer Images Imageshack Importance Important Includes Infant Info Aksessoris Komputer Info Software Information Integrated Intelligent Interface Interlock International Internet Networking Internet Business Istilah-Istilah Komputer - TI Jacquard KDL46BX420 KDL46EX403U KDL46EX500 KDL46NX810 KDL46S5100 Kegerator Kidkraft Kikkerland Kitchen LBOAS LC46D78UN LC46LE830U LCDDLP LCDDVD LCDNotebook LEDLCD LHB976 LN32B360 LN32D450 LN46A650 LN46B550 LN46B650 LN46B650T LN46C530 LN46C630 LN46C750 LN46D503 LN46D550 LN46D630 LNS4695D Ladies Lain-lain Laptops Leather Lenovo Lensbaby Lenses Lightning Lights Limited Linux Lipper Literature Lithium LithiumIon Little Lumens M1924A MF607B MFC8670 MP248B MPEG124 MX1260 Magnesium Magnetic Maintenance Management Manfrotto Mansion Marketplace Matte Mattress Measurements MegaPixel Megapixels Menu Horizontal Menu Vertical Microwave MinoHD Minolta Mobile Model Models Modern Modulator Module Monitor Monitors Motion Mountable Mounting Mounts Movies Moving MultiPurpose MultiSpeaker Multiroom Muscle Muscles MustHave NSX46GT1 Natural Nautical Newborn Nintendo Nobodys NonFerrous Notebook Novice Nursery Nutrition Nutritional Olympus Opened Optical Optimum Optimus Options Optoma Organic Original Ottoman Ottomans Outing Outstanding Overhead Pagerank Painting Pair Panasonic Panduan Service Monitor I Panduan Service Monitor II Pastures Personally Philips Phones Photographers Photographs Photography Picking Pictures Pieces Pillows Pink Pinpoint Pixels Plasma Plastic Platinum PlaySport PlayStation Player Pleasure Pocket Polaroid Popular Possible Posters Pounds Powder PowerShot Powered Powerful PreCharged Preparations Presentations Pressure Preview Princess Principle Printer Printers Prints Processor Product Product Review Products Professional Profile Projector Projectors Protector Protein Psyllium Public Pumpkin Purchase Purple Quality Quattron Quickly Quilted RSS FEED RTB1100 Rayovac Reader Really Reasons Rectangle RedCyan Reduction Reference Refresh Release Remote Replace Replacement Reports Research Resetter Canon Resetter Epson Resetter HP Resolution Results Reticle Review Reviews Riding Riflescope Rimfire RoomWithAView RoundAndRound RuggedWaterproof SD780IS SDSDHCMMC SEO SPDIF SS1000 SSeries SX10IS SX130IS SX20IS SX210IS SX230HS Safety Sakura Samsung Satisfactory Screen Screens Scrutiny Seating Seatpost Secrets Section Seniors Sensational Sensor Series Serious Service Elektronik Service Komputer Laptop Service Printer Canon Service Printer Epson Service Printer HP Service Printer Laser Jet Sharpener Sheets Shelved Shelves Shelving Should Silicone Silver Sitemap Slender Software Gratis Pilihan Soldering Solutions Sooner Sourcing Spacesaver Speakers Speaking Sports Squeeze Stabilized Standard Standing Stands Staying Steady Stools Storage Streaming Strict Stripe Stripes Students Studio Stylish Subwoofer Suggestions Summer Suncast Supplements Suppress Surround Susan Swivel Swiveling System T90dvfdblack TBS421601 TCP46S30 TS8GSDHC6E TVProtectorTM Tables Tablet TechFuel Technology Teens Television Televisions Templates Terminology Theater Themed Therapy Think Thinkpad Timelines Tip Trik Internet Tip Trik Windows Tipped Tips Blogger-Blogspot Tips Blogging Tips Blogspot Tips HTML dan JavaScript Tips Keamanan Komputer Tips PHP Tips Visual Basic Tips Windows Vista Tips Windows XP Tips and Tricks Tips dan Trik Tips-Tutorial Photoshop Toddler Toilet TopSelling Toppers Torpedo Toshiba Touchscreen Transcend Transmitter Travel TraysTables Treatment Tripod Turtle Tutorial Blogspot Tutorial Wordpress TwinFull Twitter Twitter Stuff UM720S UN46B6000 UN46D6000 UN46D6400 UN55B8000 Ukur Komponen Elektronika UltraHD Understanding Underwater Universal V13H010L49 VariAngle Vaulted Vibration Video VideoSecu Viewing Vision Vitamin WAH1111BA0850 WPS18MP Wallet Walls Warta Terkini Waterproof Wave Website Weight WellOrganized Weller Western Whats White Wholesale WideAngle Widgets Windows Windows Tips Winsome Wireless Within Without Wooden Working X500BK ZoomNikkor accept awning cpu foursquare heello iPhone latex mattresses memory pc troubleshouting tx1000