PHP generates graphics verification code with background

Source: Internet
Author: User
Tags html page php file rand strlen

Cases

1, produce a picture of PNG
2. Set the background color for the picture
3. Set font color and style
4, generate a 4-digit random verification code
5, the resulting each character adjusted rotation angle and position to the PNG picture
6, add noise and interference line to prevent the registration machine analysis of the original picture to malicious registration
7. Output picture
8, free up the image of memory
authcode.php file

Code

The code is as follows Copy Code
<?php
Session_Start ();
Header (' content-type:image/png ');
Create a picture
$im = Imagecreate ($x =130, $y = 45);
$BG = Imagecolorallocate ($im, Rand (50,200), Rand (0,155), Rand (0,155)); The first call to Imagecolorallocate () fills the background color with the palette-based image
$fontColor = Imagecolorallocate ($im, 255, 255, 255); Font Color
$fontstyle = ' Rock.ttf '; Font style, this can be found from the C:windowsfonts folder, I put it in the same directory as the authcode.php file, where you can replace other font styles
Generate random characters
for ($i = 0; $i < 4; $i + +) {
$randAsciiNumArray = Array (rand (48,57), Rand (65,90));
$randAsciiNum = $randAsciiNumArray [Rand (0, 1)];
$RANDSTR = Chr ($randAsciiNum);
Imagettftext ($im, 30,rand (0,20)-rand (0,25), 5+ $i *30,rand (30,35), $fontColor, $fontstyle, $RANDSTR);
$authcode. = $RANDSTR;
}
$_session[' authcode ' = $randFourStr;//user and user input validation code comparison
Jamming line
For ($i =0 $i <8; $i + +) {
$lineColor = Imagecolorallocate ($im, Rand (0,255), Rand (0,255), Rand (0,255));
Imageline ($im, rand (0, $x), 0,rand (0, $x), $y, $lineColor);
}
Jamming Point
For ($i =0 $i <250; $i + +) {
Imagesetpixel ($im, rand (0, $x), rand (0, $y), $fontColor);
}
Imagepng ($im);
Imagedestroy ($im);
?>

Example 2

• Create a new PHP file captcha_code_file.php

The code is as follows Copy Code

Open Session First
Session_Start ();
Define foreground display verification code length & width
$image _width = 120;
$image _height = 40;
$characters _on_image = 6;
$font = './monofont.ttf ';

The characters that can is used in the CAPTCHA code.
Avoid confusing characters (l 1 and I for example)
$possible _letters = ' 23456789bcdfghjkmnpqrstvwxyz ';
$random _dots = 10;
$random _lines = 30;
$captcha _text_color= "0x142864";
$captcha _noice_color = "0x142864";
To define the string to generate the verification code
$code = ';

$i = 0;
while ($i < $characters _on_image) {
$code. = substr ($possible _letters, Mt_rand (0, strlen ($possible _letters)-1), 1);
$i + +;
}

$font _size = $image _height * 0.75;
$image = @imagecreate ($image _width, $image _height);

/* Setting the background, text and noise colours here * *
$background _color = imagecolorallocate ($image, 255, 255, 255);

$arr _text_color = Hexrgb ($captcha _text_color);
$text _color = imagecolorallocate ($image, $arr _text_color[' red '),
$arr _text_color[' green '], $arr _text_color[' Blue ');

$arr _noice_color = Hexrgb ($captcha _noice_color);
$image _noise_color = imagecolorallocate ($image, $arr _noice_color[' red '),
$arr _noice_color[' green '], $arr _noice_color[' Blue ');

/* Generating the dots randomly in background * *
for ($i =0; $i < $random _dots; $i + +) {
Imagefilledellipse ($image, Mt_rand (0, $image _width),
Mt_rand (0, $image _height), 2, 3, $image _noise_color);
}

/* generating lines randomly in background of image */
for ($i =0; $i < $random _lines; $i + +) {
Imageline ($image, Mt_rand (0, $image _width), Mt_rand (0, $image _height),
Mt_rand (0, $image _width), Mt_rand (0, $image _height), $image _noise_color);
}

/* Create a text box and add 6 letters code in IT * * *
$textbox = Imagettfbbox ($font _size, 0, $font, $code);
$x = ($image _width-$textbox [4])/2;
$y = ($image _height-$textbox [5])/2;
Imagettftext ($image, $font _size, 0, $x, $y, $text _color, $font, $code);

/* Show CAPTCHA image in the page HTML page */
Header (' content-type:image/jpeg ');//Defining the image Type to is shown in browser widow
Imagejpeg ($image);//showing the image
Imagedestroy ($image);//destroying the image instance
Set session, do validation
$_session[' 6_letters_code ' = $code;

function Hexrgb ($HEXSTR)
{
$int = Hexdec ($HEXSTR);

Return Array ("Red" => 0xFF & ($int >> 0x10),
"Green" => 0xFF & ($int >> 0x8),
"Blue" => 0xFF & $int);
}

Show authentication code page index.php

<?php
Session_Start ();
if (Isset ($_request[' Submit ')) {
Code for check server side validation
if (Empty ($_session[' 6_letters_code ')) | |
STRCASECMP ($_session[' 6_letters_code '], $_post[' 6_letters_code '])!= 0)
{
$msg = "The authentication code you entered is wrong, please re-enter!";
}else{
echo "you entered the correct!";
Captcha verification is correct. Final Code Execute here!
}
}
?>

<style type= "Text/css" >
. table{
Font-family:arial, Helvetica, Sans-serif;
font-size:12px;
Color: #333;
Background-color: #E4E4E4;
}
. Table td{
<a href= "http://www.111cn.net" >coinstar money point</a> background-color: #F8F8F8;
}
</style>

<form action= "" method= "Post" Name= "Form1" Id= "Form1" >
<table width= "border=" 0 "align=" center "cellpadding=" 5 "cellspacing=" 1 ">
<?php if (isset ($msg)) {?>
<tr>
&LT;TD colspan= "2" align= "center" valign= "Top" ><?php echo $msg;? ></td>
</tr>
<?php}?>
<tr>
&LT;TD align= ' right ' valign= ' top ' > Verification Code demo:</td>
<td> "id= ' captchaimg ' onclick=" Refreshcaptcha (); "><br>
<label for= ' message ' > Please enter the verification code:</label>
<br>
<input id= "6_letters_code" name= "6_letters_code" type= "text" >
<br>
If you do not see it, please <a href= ' Javascript:refreshcaptcha (); ' > Point I </a> Refresh!
</p></td>
</tr>
<tr>
<td>&amp;nbsp;</td>
<td><input name= "Submit" type= "Submit" onclick= "return Validate ();" value= "Submit" ></td>
</tr>
</table>
</form>
<script type= ' Text/javascript ' >
The refresh request defined
function Refreshcaptcha ()
{
var img = document.images[' captchaimg '];
IMG.SRC = img.src.substring (0,img.src.lastindexof ("?")) + "? rand=" +math.random () *1000;
}
</script>

Example 3

Validation code with a snowflake background

The code is as follows Copy Code

<?session_start ();? >
<form method=post action= "" >
<input type=text name=number maxlength=4>
<input type= "Submit" Name= "Sub" >
</FORM>
?
Check-Check Code
if (Isset ($HTTP _post_vars["Sub"]):
if ($HTTP _post_vars["number"]!= $HTTP _session_vars[login_check_number] | | empty ($HTTP _post_vars["number"]) {
echo "Check code is incorrect!";
}else{
echo "Verification code passed! ";
}
endif
Show_source (' test.php ');
Above this page's source code


The following is the source code to generate the verification code
Show_source (' yanzhengma.php ');
?>
<?php
Session_Start ();
Session_register ("Login_check_number");

Last night saw the verification code effect on the Chianren, just consider it, using PHP's GD library to complete a similar function
First genetic the background, and then put the generated verification into the stacking
$img _height=120; First define the length and width of the picture
$img _width=40;
if ($HTTP _get_vars["act"]== "init") {
Srand (Microtime () * 100000); After//php420, Srand is not necessary.
For ($Tmpa =0 $Tmpa <4; $Tmpa + +) {
$nmsg. =dechex (rand (0,15));
}//by Sports98


$HTTP _session_vars[login_check_number] = $nmsg;

$HTTP _session_vars[login_check_number] = Strval (Mt_rand ("1111", "9999")); Generates a 4-bit random number and puts it in session
Who can make the supplement, can generate letters and numbers at the same time?? ----finished by Sports98.

$aimg = Imagecreate ($img _height, $img _width); Generate pictures
Imagecolorallocate ($aimg, 255,255,255); Picture background, imagecolorallocate the 1th time to define color PHP is considered to be the background
$black = Imagecolorallocate ($aimg, 0,0,0); Define the required Black


Imagerectangle ($aimg, 0,0, $img _height-1, $img _width-1, $black);//A black rectangle to surround the picture

The following is the creation of a snowflake background, in fact, is to generate some symbols on the picture
For ($i =1 $i <=100; $i + +) {//test with 100 first


        imagestring ($aimg, 1,mt_rand (1, $img _height), Mt_rand (1, $img _ width), "*", Imagecolorallocate ($aimg, Mt_rand (200,255), Mt_rand (200,255), Mt_rand (200,255));
       /ha, see it, in fact, is not a snowflake, is the generation of * No. In order for them to look "cluttered, 5-color, 6", they have to have their position, color, or even size randomly counted at 1 1, and rand () or mt_rand can do it.
   }

With the background generated, it's time to put the generated random numbers up. The reason is similar to above, random number 1 1 places, at the same time let their position, size, color are used into random number ~ ~
In order to distinguish it from the background, the color here is not more than 200, the above is not less than 200
For ($i =0 $i <strlen ($HTTP _session_vars[login_check_number]); $i + +) {
Imagestring ($aimg, Mt_rand (3,5), $i * $img _height/4+mt_rand (1,10), Mt_rand (1, $img _width/2), $HTTP _session_vars[login _check_number][$i],imagecolorallocate ($aimg, Mt_rand (0,100), Mt_rand (0,150), Mt_rand (0,200));
}
Header ("Content-type:image/png"); Tell the browser that the following data is a picture, not a text display
Imagepng ($AIMG); Generate PNG format ... The effect is quite like a matter of ...
Imagedestroy ($AIMG);
}

?>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.