This article mainly introduces the specific implementation method of the verification code applet based on PHP, and makes detailed comments, which is conducive to understanding and learning. Friends who need it can take a look together
Verification code function ( Personal understanding):
Reduce the pressure on the server (such as the verification code function of 12306);
Prevent violent registration
Personal idea: Generate n-digit random numbers from a-z, A-Z, 1-9 to form a new verification code.
Several small functions for generating verification codes
range() //Specify a range to output an array
a) For example: range(1,9)
array_merge()//Merge arrays
a) array_merge(array 1, array 2….)
array_rand (array, quantity)
a) Randomly take out several subscripts from the array and return an array
shuffle(array)//Will shuffle the array again Element
mt_rand (specify a range) //Generate a better random number
such as: mt_rand(1,5) // Generate an arbitrary number between 1-5
Generate verification code
<?php $arr1=range('a', 'z');//指定范围输出一个数组 $arr2=range('A', 'Z'); $arr3=range(1,9); $arr=array_merge($arr1,$arr2,$arr3); //合并数组 $index = array_rand($arr,5); //在$arr中随机取5个数,返回值是$arr的下标 Shuffle($index); $code = '';//定义一个空的字符串来存储生成的验证码用'点'来进行拼接 foreach ($index as $key => $value) {//遍历数组 $code.= $arr[$value];//根据下标取数组中的值 } var_dump($code); ?>
Screenshots of running results
Perfection: Add the verification code to the image so that the verification code is realistic
Before improving, let’s introduce the image creation The rough steps
Create an image
Method 1: Create a true color image (empty canvas)
imagecreatetruecolor(width, height) //Create a true color image
Description:
width: width of the canvas (pixels)
height: the height of the canvas (pixels)
The return value is the image resource
##Note:
is a true color image: fill color
imagefill(image, x, y, color) //Fill the image resource with color
for a true color image: Assign color
##imagecolorallocate(image, red, green, blue)Description:
When the canvas is not filled with color Effect
The effect and code when filling the canvas with color
<?php //创建图像资源(空白画布)默认显示为黑色 $image = imagecreatetruecolor(300, 400); //1.image //图像资源 //2.red: //红颜色(0-255) 或 0x(00-ff) //即十六进制来表示 (0xff就是255) //3.green//绿颜色(0-255) //4.blue //蓝颜色(0-255) $color = imagecolorallocate($image, 255, 0, 0); //1.image //图像资源 //2.x,y,填充的坐标点(注意:填充的与此点最接近的颜色) //3.color; //用什么颜色来填充 imagefill($image, 0, 0, $color); //输出图像 header('content-type:image/jpeg'); imagejpeg($image); //销毁图像资源 imagedestroy($image); ?>
## Result screenshot;
#Output image (take jpeg as an example)
Output image to browser
a ) header('content-type:image/jpeg'); //Set to view the image through browsing
b) imagejpeg (image resource)Output the image by file
a) imagejpeg(image resource,'image path',image quality) //Quality value 0-100
b) Note:Note: Only jpeg format has the quality parameter.
Destroy the image
imagedestroy($image); / /Destroy images and release memory resources.
Verify The entire code of the code:
<?php //实例:让文本居于图像的正中 //创建图像资源(空白的画布) $image = imagecreatetruecolor(100, 50); $color = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200)); //为图像资源填充颜色 imagefill($image, 0, 0, $color); //绘制图像 $font = 5; //验证码的开始 $arr1 = range('a','z'); $arr3 = range('A','Z'); $arr2 = range(1,9); //array_merge — 合并一个或多个数组 $arr = array_merge($arr1,$arr2,$arr3); $index = array_rand($arr,5); //随机从原数组中找出5个下标 $string = ''; foreach ($index as $value) { //$value 两个功能,即是$index中的值,又是$arr中的下标 $string .= $arr[$value]; //将得到字符进行连接 } //验证码的结束 //mt_rand — 生成更好的随机数 //echo mt_rand(1,5);die; //加入点干扰 $pointcolor = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200)); //循环创建1000个干扰点 for ($i=0; $i <1000 ; $i++) { imagesetpixel($image, mt_rand(0,imagesx($image)), mt_rand(0,imagesy($image)), $pointcolor); } //加入线的干扰 $lintecolor = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200)); // 循环创建50个线干扰 for ($i=0; $i <50 ; $i++) { imageline($image, mt_rand(0,imagesx($image)), mt_rand(0,imagesy($image)), mt_rand(0,imagesx($image)), mt_rand(0,imagesy($image)) ,$lintecolor); } //一个字符的宽度 imagefontwidth($font) //字符串的个数: strlen(字符串) //一个字符的宽度*字符串的个数 //所有字符串宽度和= 一个字符的宽度*字符串的个数 //$x = (画布的宽度-所有字符串宽度和)/2 $x = (imagesx($image)-imagefontwidth($font)*strlen($string))/2; //$y = (画布的高度-字符的高度)/2; //字符的高度: imagefontheight($font) $y = (imagesy($image)-imagefontheight($font))/2; $stringcolor = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200)); imagestring($image, $font, $x, $y, $string, $stringcolor); //输出图像 header('content-type:image/jpeg'); //设置将图像通过浏览来查看 imagejpeg($image,'',100); //将图像资源输出 //销毁图像资源 imagedestroy($image); //销毁图像
Understand some functions in the code
Add interference points
imagesetpixel(image, x, y, color)
Description: x, y is a point Coordinates
说明: x1,y1是线的一个端点坐标; x2,y2是线的另一个端口的坐标; 由两点画一条线 让验证码居于图像的正中 最后运行结果 再次完善(和html代码结合起来) Html代码 理解; 最后结果截图 以上就是本文的全部内容,希望对大家的学习有所帮助。 相关推荐: The above is the detailed content of How to implement verification code applet in php. For more information, please follow other related articles on the PHP Chinese website!imageline(image, x1, y1, x2, y2, color)
imagefontheight(font)获取字体的高度:
imagefontwidth(font)获取字体的宽度:
strlen(字符串)//获取字符串的长度
imagesx(image) //获取画布的宽度
imagesy(image) //获取画布的高度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form name='frm' method='post' action=''>
<table width="30%" border="2" align="center" rules="all" cellpadding="10">
<tr>
<th colspan="2">请输入信息</th>
</tr>
<tr>
<th>姓名:</th>
<th><input type="text" name="username"></input></th>
</tr>
<tr>
<th>密码:</th>
<th><input type="password" name="userpwd"></input></th>
</tr>
<tr> 555556
<th>验证码</th>
<th><input type = 'text' name = 'checkcode'></input><img src="21.php" style="cursor:pointer" onclick="this.src='21.php'?+Math.random()"></th>
</tr>
<tr>
<th colspan="2"><input type="submit" name="submit" value="提交"></input></th>
</tr>
</table>
</form>
</body>
</html>