แจกโค้ด captcha php เอาไปใช้งานได้เลย

แชร์ประสบการณ์เขียนโค้ด php + Mysql เล็ก ๆ น้อย ๆ เผื่อจะเป็นประโยชน์กับใครสักคน...
 
คิดว่าทุก ๆ คนคงจะเคยเห็นกันนะครับ เวลาที่เราจะสมัครสมาชิก หรือไปโพสคอมเมนท์บล๊อกของใครเขาก็จะมีรหัสให้กรอกยืนยันก่อนการส่งข้อมูล ทั้งนี้ก็เพื่อเป็นการป้องกันการสแปมนั่นเองครับ

บางคนยังไม่เข้าใจว่า สแปม มันคืออะไรกัน ก็คือ เดี๋ยวนี้เขามีโปรแกรมโพสคอมเม้นท์ หรือช่วยซับมิต หรือโปรแกรมหาแบล๊กลิงค์เป็นอัตโนมัติกันเยอะครับ เขาก็จะหารายชื่อเว็บ หรือ บล๊อกที่สามารถโพสบทได้เป็น พัน เป็นหมื่นเว็บ แล้วก็สั่งให้โปรแกรมที่ว่ามันทำงานไป โดยที่เจ้าตัวไม่ต้องมานั่งทำเอง การโพสก็จะโพสข้อความเดิม ๆ ซ้ำ ๆ หรือสุ่มเปลี่ยนไปเรื่อยแล้วแต่ ซึ่งบทความที่โพสอัตโนมัติเหล่านี้หล่ะครับ ที่เขาเรียกว่า "สแปม"

ซึ่งถ้าเราไม่ป้องกันไว้ จะเกิดอะไรขึ้น บทความของเรา เว็บของเราก็จะมีแต่ข้อความที่มาจากสแปมครับ ซึ่งเห็นบางเว็บไซต์ ยาวเยียดเลยทีเดียว ทำให้หนักเครื่อง กินทรัพยากร และทำให้โหลดหน้าเว็บได้ช้าด้วยนะ

ดังนั้นเราจึงต้องมาทำความรู้จักกับการทำ Captcha Security Code กันในวันนี้ครับ
เอาแต่เนื้อ ๆ นะครับ น้ำไม่ชอบ เดี๋ยวกันจะเยอะ ทำให้รกเสียเปล่า ๆ

ขั้นตอนและกระบวนการ
1. เราจะทำการสุ่มรหัสลับออกมา (จะเอาตัวอักษร ตัวเลข หรือผสมกันก็สุดแล้วแต่)
2.จากนั้นเราก็จะแปลงรหัสนั้นให้เป็นไฟล์ภาพ (เพื่อป้องกันอีกชั้นนึ่ง และทำให้ยากขึ้นไปอีก เพราะถ้าเราทำเพียงแค่ตัวอักษรแปะไว้ข้าง ๆ เขาก็ก๊อปวางได้ แต่ถ้าทำเป็นรูปภาพแล้วหล่ะก็ ยังไงก็ต้องพิมพ์เองใช่ไหมครับ 5555+)

มาดูโค้ดกันเลยดีกว่า (RandomCode.php) 

<?php

function createRandomPassword() { // ฟังก์ชั่นสำหรับสุ่มรหัสลับ
srand( date("s") );
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // ตัวแปรที่จะทำการสุ่ม จะเป็นตัวเลข ตัวเล็ก ตัวใหญ่ หรือผสมกันไปก็ใส่เพิ่มเอาเอง
    $ret_str = "";
    $num = strlen($chars);
    for($i=0; $i < 6; $i++) {
        $ret_str.= $chars[rand()%$num]." ";// สุ่มเอามาสัก 6 ตัว 0 ถึง 5 ก็ 6 นั่นหล่ะน่าาา
    }
    return $ret_str;
}

     $text = createRandomPassword(); // เรียกใช้หังก์ชั้นสุ่มรหัสลับ แล้วมาเก็บค่าไว้ในตัวแปร $text      
      echo '<input type="hidden" name="code_chk" id="code_chk" value="'.ereg_replace(" ","",$text).'">'; // ตรงนี้สำหรับเก็บค่าตัวแปรที่ได้เพื่อส่งไปทำการตรวจเช็คกับ รหัสลับ ที่ผู้ใช้กรอก ว่าถูกต้องตรงกันหรือไม่
     $font_size = 20;

     $height = 20;
     $width = 100;

   // ข้างล่างนี้เป็นการสร้างภาพและเอารหัสลับที่ได้ยัดใส่เข้าไปอยู่ในภาพที่สร้าง สามารถปรับเปลี่ยนได้นะครับ
     $im = ImageCreate($width, $height);
     $grey = ImageColorAllocate($im, 230, 230, 230);
     $black = ImageColorAllocate($im, 0, 0, 0);
   
     $text_bbox = ImageTTFBBox($font_size, 0, "ANGSAZ.TTF", $text); // อย่าลืมก๊อปไฟล์ฟอร์นมาไว้ในโฟลเดอร์ด้วยนะ ไม่งั้นจะไม่แสดงผล
     $image_centerx = $width / 2;
     $image_centery = $height / 2;
     $text_x = $image_centerx - round(($text_bbox[4]/2));
     $text_y = $image_centery + 5;
     //$text_y = $image_centery;
   
     ImageTTFText($im, $font_size, 0, $text_x, $text_y, $black, "ANGSAZ.TTF", $text);
     ImagePng($im,"image-code.png");
     ImageDestroy ($im);

     echo "<img src=image-code.png>";// และสุดท้ายก็แสดงผลรูปภาพออกมา
?> 

โค้ดตอนเรียกใช้งาน

<b style="color: #666666; font-style:italic;">CONFIRM CODE :</b> <?php include "RandomCode.php"; ?> <br>

<input name="confirm_comment" id="confirm_comment" type="text"  class="form-control" style="width:200px;">

ส่วนการตรวจเช็คก็ทำได้หลายวิธีครับ จะส่งค่าไปกับฟอร์มแบบ hidden (โค้ดสีน้ำเงิน) แล้วค่อยใช้คำสั่ง if เช็คว่าค่าที่กรอก กับค่าที่สุ่มมานั้น ตรงกันหรือเปล่า หรือจะตรวจสอบก่อนส่งค่าจากฟอร์มไปเลย ว่าถูกต้องหรือไม่ถูกต้องก็ได้ แต่ในบทความนี้จะส่งค่าไปก่อนแล้วค่อยตรวจสอบ

เพียงแค่นี้เว็บเราก็จะมีระบบป้องกันสแปมแล้ว ถือว่าดูดีมีระดับขึ้นมาอีกขั้นนึง
บางเว็บอาจจะส่งค่าตัวแปรไปเช็ครหัสลับตอนก่อนบันทึกผลก็เห็นเยอะครับ แต่ผมไม่ชอบแบบนั้น อยากให้ผู้ใช้ได้รู้เลยว่า มันผิด มันถูกไหม อย่างไร จะได้แก้ให้จบกันไปเลยทีเดียว............



My Article
แนะนำเว็บสูตรหวยออนไลน์ ดูฟรี