Tạo một cuộc gọi tập tin Captcha.class.php
và đặt này:
class Captcha {
private $font = '/path/to/font/yourfont.ttf'; // get any font you like and dont forget to update this.
private function generateCode($characters) {
$possible = '23456789bcdfghjkmnpqrstvwxyz'; // why not 1 and i, because they look similar and its hard to read sometimes
$code = '';
$i = 0;
while ($i < $characters) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}
function getImage($width, $height, $characters) {
$code = $this->generateCode($characters);
$fontSize = $height * 0.75;
$image = imagecreate($width, $height);
if(!$image) {
return FALSE;
}
$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 66, 42, 32);
$noiseColor = imagecolorallocate($image, 150, 150, 150);
for($i=0; $i<($width*$height)/3; $i++) {
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noiseColor);
}
for($i=0; $i<($width*$height)/150; $i++) {
imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noiseColor);
}
$textbox = imagettfbbox($fontSize, 0, $this->font, $code);
if(!$textbox) {
return FALSE;
}
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
imagettftext($image, $fontSize, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
$_SESSION['captcha'] = $code;
}
}
Sau đó, trong trang của bạn, bạn có thể làm:
<img src="/captcha.php" />
Sau đó, trong /captcha.php
bạn sẽ đặt:
session_start();
require('Captcha.class.php');
$Captcha = new Captcha();
$Captcha->getImage(120,40,6);
Bạn có thể thay đổi các thông số như bạn cũng muốn hiển thị hình ảnh xác thực khác.
Bằng cách này, bạn sẽ tạo ra khi đang di chuyển. Bạn luôn có thể lưu hình ảnh trên đĩa nếu bạn muốn.
tại sao bạn không sử dụng gd? –
Nếu bạn có tổng cộng hơn 5000 liên lạc hoặc bản tin, bạn khá phổ biến :) Điều này có vẻ khá kém hiệu quả và lãng phí tài nguyên. Chỉ tạo hình ảnh khi cần. – Bakudan
tôi cũng tạo ra 5000 để đảm bảo khi tôi ngẫu nhiên tôi không nhận được cùng một hai lần. – Owan