A good PHP captcha class instance to share
- 2020-12-09 00:45:53
- OfStack
Share a handy php captcha class, including a sample call.
Description:
If the specified font does not apply, use the imagestring() function, or imagettftext() function if you need to encounter the specified font. The font position is Windows/Fonts under C disk.
This paper refers to the method of php generating captcha on the Internet, as well as the generation method of php image captcha and php Chinese captcha. The PHP GD library is used.
1. VerificationCode. class. php class to generate captcha
<?php
class VerificationCode{
private $charset="abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789"; // The random factor
private $code; // Verification code
private $codelen=4; // Captcha length
private $width=110; // The width of the
private $height=30; // highly
private $img; // Image resource handle
private $font; // Set the font
private $fontSize=25; // The font size
private $fontColor; // The font color
public function __construct(){
$this->font="CALIBRIZ.TTF";
}
// Generate verification code
private function createCode(){
$len=strlen($this->charset)-1;
for ($i = 0; $i < $this->codelen; $i++) {
$this->code .= $this->charset[mt_rand(0,$len)];
}
}
// Generate the background
private function createBg(){
$this->img=imagecreatetruecolor($this->width,$this->height);
$color = imagecolorallocate($this->img,mt_rand(157,255),mt_rand(157,255),mt_rand(157,255));
imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
}
// Generate text
private function createFont(){
$x=$this->width/$this->codelen;
for ($i = 0; $i < $this->codelen; $i++) {
$this->fontColor=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imagettftext($this->img,$this->fontSize,mt_rand(-30,30),$i*$x+mt_rand(1,5),$this->height/1.4,$this->fontColor,$this->font,$this->code[$i]); // www.ofstack.com
//imagestring($this->img,5,$i*$x+mt_rand(1,5),5,$this->code[$i],$this->fontColor);
}
}
// Generate lines, snowflakes
private function createDisturb(){
for ($i = 0; $i < 6; $i++) {
$color=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->width),mt_rand(0,$this->width),mt_rand(0,$this->width),$color);
}
for ($i = 0; $i < 100; $i++) {
$color=imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
}
}
// The output
private function outPut(){
header("Content-Type:image/png");
imagepng($this->img);
imagedestroy($this->img);
}
public function showCode(){
$this->createBg();
$this->createCode();
$this->createDisturb();
$this->createFont();
$this->outPut();
}
// Get verification code
public function getCode(){
return strtolower($this->code);
}
}
?>
code.php
<?php
session_start();
require_once 'VerificationCode.class.php';
$code=new VerificationCode();
$_SESSION['code']=$code->getCode();
$code->showCode();
?>
Verification code :<input type="text" name="code" /><img src="code.php" onclick="javascript:this.src='code.php?time='+Math.random();" />