Home  >  Article  >  Backend Development  >  Create dynamic random verification code in php, php dynamic verification code_PHP tutorial

Create dynamic random verification code in php, php dynamic verification code_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:06:58949browse

php generates dynamic random verification code, php dynamic verification code

CAPTCHA is the abbreviation of "Completely Automated Public Turing test to tell Computers and Humans Apart". It is a public fully automated test to distinguish whether a user is a computer or a human. program. It can prevent: malicious cracking of passwords, ticket fraud, forum flooding, and effectively prevents a hacker from using a specific program to violently crack a specific registered user from making continuous login attempts. In fact, using verification codes is a common method for many websites now. We use This function is implemented in a relatively simple way.

This question can be generated and judged by a computer, but only a human can answer it. Since computers cannot answer CAPTCHA questions, the user who answers the questions can be considered a human.

Php’s dynamic verification code production is based on php’s image processing. Let’s first introduce php’s image processing.

1.php image processing introduction

In PHP5, processing dynamic images is much easier than before. PHP5 includes the GD extension package in the php.ini file. You only need to remove the corresponding comments of the GD extension package to use it normally. The GD library included in PHP5 is the upgraded GD2 library, which contains some useful JPG functions that support true color image processing.

Generally generated graphics are stored in PHP’s document format, but dynamic graphics can be obtained directly through HTML’s image insertion method SRC. For example, verification code, watermark, thumbnail, etc.

General process for creating images:

1). Set the header to tell the browser the MIME type you want to generate.

2). Create an image area, and all subsequent operations will be based on this image area.

3). Draw a filled background in the blank image area.

4). Draw graphic outlines on the background to enter text.

5). Output the final graphics.

6). Clear all resources.

7). Call images from other pages.

The first step is to set the file MIME type and output type. Change the output type to image stream

Copy code The code is as follows:

header('Content-Type: image/png;');

Generally generated images can be png, jpeg, gif, wbmp

The second step is to create a graphics area and image background

imagecreatetruecolor() returns an image identifier representing a black image of size x_size and y_size. Syntax: resource imagecreatetruecolor ( int $width , int $height )

Copy code The code is as follows:

$im = imagecreatetruecolor(200,200);

The third step is to draw a filled background in the blank image area

Requires a color filler; imagecolorallocate -- assigns a color to an image; syntax: int imagecolorallocate ( resource $image , int $red , int $green , int $blue )

Copy code The code is as follows:

$blue = imagecolorallocate($im,0,102,255);

Fill this blue color into the background; imagefill -- area filling; syntax: bool imagefill ( resource $image , int $x , int $y , int $color )

Copy code The code is as follows:

imagefill($im,0,0,$blue);

The fourth step is to enter some lines, text, etc. on the blue background

Color Filler

Copy code The code is as follows:

$white = imagecolorallocate($im,255,255,255);

Draw two line segments: imageline

imageline() draws a line segment in the image image from coordinates x1, y1 to x2, y2 (the upper left corner of the image is 0, 0) using color color. Syntax: bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

Copy code The code is as follows:

imageline($im,0,0,200,200,$white);
imageline($im,200,0,0,200,$white);

Draw a line of string horizontally: imagestring

imagestring() uses col color to draw the string s to the x, y coordinates of the image represented by image (this is the coordinate of the upper left corner of the string, and the upper left corner of the entire image is 0, 0). If font is 1, 2, 3, 4 or 5, the built-in font is used. Syntax: bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )

Copy code The code is as follows:

imagestring($im,5,66,20,'jingwhale',$white);

Step 5, output the final graphics

imagepng() Outputs a GD image stream (image) in PNG format to standard output (usually a browser), or to a file if filename is given. Syntax: bool imagepng ( resource $image [, string $filename ] )

Copy code The code is as follows:

imagepng($im);

The sixth step is to clear all resources

imagedestroy() releases the memory associated with image. Syntax: bool imagedestroy ( resource $image )

Copy code The code is as follows:

imagedestroy($im);

Graphics created by calling other pages (html)

Copy code The code is as follows:

Image created by PHP

The sample code is as follows:

Copy code The code is as follows:

//The first step is to set the file MIME type
header('Content-Type: image/png;');
//The second step is to create a graphics area and image background
$im = imagecreatetruecolor(200,200);
//The third step is to draw a filled background in the blank image area
$blue = imagecolorallocate($im,0,102,255);
Imagefill($im,0,0,$blue);
//Step 4, enter some lines, text, etc. on the blue background
$white = imagecolorallocate($im,255,255,255);
Imageline($im,0,0,200,200,$white);
Imageline($im,200,0,0,200,$white);
Imagestring($im,5,66,20,'Jing.Whale',$white);
//Step 5, output the final graphic
Imagepng($im);
//Step six, I want to clear all resources
Imagedestroy($im);
?>

Display effect:

2. Create dynamic verification code

Attachment: Code source address https://github.com/cnblogs-/php-captcha

1. Create a picture with verification code and blur the background

The random code uses hexadecimal; the blurred background means adding lines, snowflakes, etc. to the background of the picture.

1) Create random code

Copy code The code is as follows:

for ($i=0;$i<$_rnd_code;$i++) {
           $_nmsg .= dechex(mt_rand(0,15));
}
string dechex (int $number), returns a string containing the hexadecimal representation of the given number parameter.

2) Save in session

Copy code The code is as follows:

$_SESSION['code'] = $_nms

3) Create pictures

Copy code The code is as follows:

//Create an image
$_img = imagecreatetruecolor($_width,$_height);
//White
$_white = imagecolorallocate($_img,255,255,255);
//Fill
imagefill($_img,0,0,$_white);
if ($_flag) {
//Black, border
$_black = imagecolorallocate($_img,0,0,0);
Imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);
}

4) Blurred background

Copy code The code is as follows:

//Draw 6 lines randomly
for ($i=0;$i<6;$i++) {
$_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
Imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
}
//Random snowflakes
for ($i=0;$i<100;$i++) {
$_rnd_color = imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
Imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),'*',$_rnd_color);
}

5) Output and destruction

Copy code The code is as follows:

//Output verification code
for ($i=0;$i           $_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
}
//Output image
header('Content-Type: image/png');
imagepng($_img);
//Destroy
imagedestroy($_img);

Encapsulate it in the global.func.php global function library, and the function name is _code() for easy calling. We will set the four parameters $_width, $_height, $_rnd_code, $_flag to enhance the flexibility of the function.

* @param int $_width The length of the verification code: if you want 6 digits, 75+50 is recommended; if you want 8 digits, 75+50+50 is recommended, and so on
* @param int $_height The height of the verification code
* @param int $_rnd_code The number of digits in the verification code
* @param bool $_flag Whether the verification code requires a border: true with border, false without border (default)

The encapsulated code is as follows:

Copy code The code is as follows:

/**
 *      [verification-code] (C)2015-2100 jingwhale.
 *     
 *      This is a freeware
 *      $Id: global.func.php 2015-02-05 20:53:56 jingwhale$
 */
/**
* _code() is the verification code function
* @access public
* @param int $_width The length of the verification code: if you want 6 digits, 75+50 is recommended; if you want 8 digits, 75+50+50 is recommended, and so on
* @param int $_height The height of the verification code
* @param int $_rnd_code The number of digits in the verification code
* @param bool $_flag Whether the verification code requires a border: true with border, false without border (default)
* @return void This function generates a verification code after execution
​*/
function _code($_width = 75,$_height = 25,$_rnd_code = 4,$_flag = false) {
//Create random code
for ($i=0;$i<$_rnd_code;$i++) {
           $_nmsg .= dechex(mt_rand(0,15));
}
//Save in session
$_SESSION['code'] = $_nmsg;
//Create an image
$_img = imagecreatetruecolor($_width,$_height);
//White
$_white = imagecolorallocate($_img,255,255,255);
//Padding
Imagefill($_img,0,0,$_white);
If ($_flag) {
​​​​ //Black, border
          $_black = imagecolorallocate($_img,0,0,0);
Imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);
}
//Draw 6 lines immediately
for ($i=0;$i<6;$i++) {
          $_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
Imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
}
//Snowflakes then
for ($i=0;$i<100;$i++) {
          $_rnd_color = imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
Imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),'*',$_rnd_color);
}
//Output verification code
for ($i=0;$i           $_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
}
//Output image
header('Content-Type: image/png');
Imagepng($_img);
//Destroy
Imagedestroy($_img);
}
?>

2. Create a verification mechanism

Create a PHP verification page and check whether the verification code is consistent through session.

1) Create verification-code.php verification page

Copy code The code is as follows:

/**
 *      [verification-code] (C)2015-2100 jingwhale.
 *
 *      This is a freeware
 *      $Id: verification-code.php 2015-02-05 20:53:56 jingwhale$
 */
//设置字符集编码
header('Content-Type: text/html; charset=utf-8');
?>



   
    verification code
   


   

       

           

               
验证码:

               

           

       

   



显示如下:

2)创建产生验证码图片页面

创建codeimg.php为verification-code.php html代码里的img提供验证码图片

首先必须在codeimg.php页面开启session;

其次,将我们封装好的global.func.php全局函数库引入进来;

最后,运行_code();

复制代码 代码如下:

/**
 *      [verification-code] (C)2015-2100 jingwhale.
 *     
 *      This is a freeware
 *      $Id: codeimg.php 2015-02-05 20:53:56 jingwhale$
 */
//开启session
session_start();
//引入全局函数库(自定义)
require dirname(__FILE__).'/includes/global.func.php';
//运行验证码函数。通过数据库的_code方法,设置验证码的各种属性,生成图片
_code(125,25,6,false);
?>

3)创建session检验机制

首先必须在verification-code.php页面也开启session;

其次,设计提交验证码的方式,本文以get方式提交,当action=verification时提交成功;

最后,创建验证函数,原理是将客户端用户提交的验证码同服务器codeimg.php中session的验证码是否一致;这里有一个js弹窗函数_alert_back(),我们也把它封装在global.func.php里;

修改verification-code.php中php代码如下:

复制代码 代码如下:

/**
 *      [verification-code] (C)2015-2100 jingwhale.
 *
 *      This is a freeware
 *      $Id: verification-code.php 2015-02-05 20:53:56 jingwhale$
 */
//Set character set encoding
header('Content-Type: text/html; charset=utf-8');
//Open session
session_start();
//Introduce global function library (custom)
require dirname(__FILE__).'/includes/global.func.php';
//Check verification code
if ($_GET['action'] == 'verification') {
If (!($_POST['code'] == $_SESSION['code'])) {
​​​​ _alert_back('Verification code is incorrect!');
}else{
​​​​ _alert_back('Verification code passed!');
}
}
?>




verification code





         

                                                                                       
Verification code:                                                                                                                                                                                           out out out there out there out out out there out of the way,

                                                              
                         





3. Click on the verification code image to update the verification code

If you want to update the verification code above, you must refresh the page; we write a codeimg.js function to update the verification code by clicking on the verification code image

Copy code The code is as follows:
window.onload = function () {
var code = document.getElementById('codeimg');//Find the img tag
in html by id Code.onclick = function () {//Add a click event to the label
This.src='codeimg.php?tm='+Math.random();//Modify time and redirect to codeimg.php
};  
}

Then it in the verification-code.php html code head.

http://www.bkjia.com/PHPjc/957115.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/957115.htmlTechArticlephp produces dynamic random verification code, php dynamic verification code verification code (CAPTCHA) is "Completely Automated Public Turing test to tell Computers and Humans Apart” (fully automatically distinguish computers...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn