Hướng dẫn viết ứng dụng tạo mã captcha trong PHP
09:16:06 - 04/11/2016 - admin
Các bạn đã được tìm hiểu về kiến thức lap trinh php kết hợp với MySQL đặc biệt là phần thêm, sửa, xóa, user ở bài tới đây chúng ta cùng tìm hiểu về phương pháp mới trong bài này với việc tạo ra các dãy số capcha ngẫu nhiên để giúp web site của bạn trống được các phần mềm tấn công vào giữ liệu hoặc người nào cố tình spam đăng kí,… vào web bạn.
Đầu tiên các bạn nên tạo ra 1 form mã HTML để có thể thực thi tạo ra thao tác nhập liệu sau.
<form action=“form.php” method=post>
<table>
<tr>
<td align=“left”>
<label for=“captcha”>Captcha</label>
</td>
<td>
<input type=“text” name=“txtCaptcha” maxlength=“10” size=“32” />
</td>
<td>
<img src=“random_image.php” />
</td>
</tr>
<tr>
<td> </td>
<td>
<input type=submit name=ok value=“Check” />
</td>
</tr>
</table>
</form>
Ở phần hình ảnh chúng ta truyền đường dẫn chính đó là liên kết tới trang random_imgae.php trang web này có tác dụng là thực thi tạo ra những bức hình với các dãy số, ký tự khác nhau ngẫu nhiên cho từng người sử dụng.
Để có được như vậy chúng ta cần khởi tạo session và lưu dãy số đó vào session của mình và xem chúng có khớp với form bên người dùng điền có đúng không
Chúng ta tạo một hàm md5 để mã hóa các ký tự gồm số, chữa cái khi sử dụng hàm md5 với ký tự phát sinh sẽ lên tới 32 ký tự và chúng ta chỉ cần lấy 5 ký tự chuỗi mã hóa bằng việc sử dụng hàm substr.Tiếp đến ta lưu các đoạn mã hóa này trong session.Để tải lại form ta so sanh với dãy số người dùng nhập liệu.
Xem thêm: Địa chỉ dạy học lâp trình android ở đâu là tốt nhất
Đoạn code của phần đó như sau:
<?php
$md5_hash = md5(rand(0,999));
$security_code = substr($md5_hash, 15, 5);
$_SESSION[“security_code”] = $security_code;
?>
Tiếp đến tọa tấm hình có chiều rộng và chiều cao mà thiết lập thông qua một hàm là ImageCreate() và chúng ta khai báo 2 màu chính đó là trắng và đen với việc sử dụng hàm ImageColorAllocate($image,red,green,blue).Hàm này giúp chúng ta tạo ra một màu sắc từ hệ màu RGB.
Tiếp theo đổ background vào tầm hình màu đen thì chữ sẽ xuất hiện trên tấm hình đó là màu trắng với việc sử dụng hàm ImageFill() và hàm ImageString().
+ $image là hình mà chúng ta khởi tạo.
+ 5: là font-size mà chúng ta quy ước cho ký tự xuất hiện trên hình.
+ 30: là khoảng cách bên trái của tấm hình.
+ 6 : là khoảng cách từ trên của tấm hình.
+ $security_code: là đoạn code sau khi chúng ta cắt ra ở trên.
+ $white: là màu sắc mà chúng ta đã sử dụng hàm ImageColorAllocate() ở trên để khởi tạo ra màu trắng.
<?php
$width = 100;
$height = 30;
$image = ImageCreate($width, $height);
$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
ImageFill($image, 0, 0, $black);
ImageString($image, 5, 30, 6, $security_code, $white);
?>
Tiếp theo sử dụng lệnh header để trả về nội dung dữ liệu dạng hình và tiến hành khởi tạo một định dạng cho file hình chúng ta vừa tạo với mã JPG và giải phóng hình tạm được sử dụng khởi tạo một tấm hình mới bằng đoạn code sau:
<?php
header(“Content-Type: image/jpeg”);
ImageJpeg($image);
ImageDestroy($image);
?>
Để quản lý dễ dàng hơn bạn có thể để đoạn code sau vào hàm cho dễ dàng trong việc sử dụng và quản lý.Toàn bộ đoạn code trong trang random_image.php sẽ là như sau
<?php
session_start();
function create_image()
{
$md5_hash = md5(rand(0,999));
$security_code = substr($md5_hash, 15, 5);
$_SESSION[“security_code”] = $security_code;
$width = 100;
$height = 30;
$image = ImageCreate($width, $height);
$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
ImageFill($image, 0, 0, $black);
ImageString($image, 5, 30, 6, $security_code, $white);
header(“Content-Type: image/jpeg”);
ImageJpeg($image);
ImageDestroy($image);
}
create_image() ;
exit();
?>
Trong trong form bạn tạo session để nhận những giá trị mà ta đã tạo và sử dụng ở phần trang random_image tiếp đến sẽ kiểm tra xem gnừoi dùng có nhấn submit hay không nếu chưa có ta sẽ tiếp tục kiểm tra xem người dùng có nhập lệnh vào textbox và đúng theo dãy số đã hiển thị trong ảnh không và đưa ra thông báo cho người dùng.
Gợi ý xem thêm: