<?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 เช็คว่าค่าที่กรอก กับค่าที่สุ่มมานั้น ตรงกันหรือเปล่า หรือจะตรวจสอบก่อนส่งค่าจากฟอร์มไปเลย ว่าถูกต้องหรือไม่ถูกต้องก็ได้ แต่ในบทความนี้จะส่งค่าไปก่อนแล้วค่อยตรวจสอบ
เพียงแค่นี้เว็บเราก็จะมีระบบป้องกันสแปมแล้ว ถือว่าดูดีมีระดับขึ้นมาอีกขั้นนึง
บางเว็บอาจจะส่งค่าตัวแปรไปเช็ครหัสลับตอนก่อนบันทึกผลก็เห็นเยอะครับ แต่ผมไม่ชอบแบบนั้น อยากให้ผู้ใช้ได้รู้เลยว่า มันผิด มันถูกไหม อย่างไร จะได้แก้ให้จบกันไปเลยทีเดียว............