//First open the session
session_start();
//Define the length & width of the verification code displayed in the front desk
$image_width = 120;
$image_height = 40;
$characters_on_image = 6;
$font = './monofont.ttf';
//The characters that can be 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";
//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 colors 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 be shown in browser widow
imagejpeg($image);//showing the image
imagedestroy($image);//destroying the image instance
//Set up session and do verification
$_SESSION['6_letters_code'] = $code;
function hexrgb ($hexstr)
{
$int = hexdec($hexstr);
return array("red" => 0xFF & ($int >> 0x10),
"green" => 0xFF & ($int >> 0x8),
"blue" => 0xFF & $int);
}
Display verification code page index.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 verification code you entered is incorrect, please re-enter!";
}else{
echo "What you entered is correct!";
// Captcha verification is Correct. Final Code Execute here!
}
}
?>
Example 3
Verification code with snowflake background
The code is as follows |
Copy code |
//Check the verification code
if(isset($HTTP_POST_VARS["sub"])):
if($HTTP_POST_VARS["number"] != $HTTP_SESSION_VARS[login_check_number] || empty($HTTP_POST_VARS["number"])){
echo "The check code is incorrect!" ;
}else{
echo "Verification code passed!";
}
endif;
show_source('test.php');
//Source code of the above page
//The following is the source code for generating verification code
show_source('YanZhengMa.php');
?>
session_start();
session_register("login_check_number");
//I saw the verification code effect on chianren last night, so I thought about it and used PHP’s GD library to complete a similar function
//Generate the background first, then put the generated verification code
$img_height=120; //First define the length and width of the image
$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")); //Generate a 4-digit random number and put it into the session
//Who can add something that can generate letters and numbers at the same time? ? ----Complete by sports98
$aimg = imageCreate($img_height,$img_width); //Generate image
ImageColorAllocate($aimg, 255,255,255); //The background color of the picture, the first time ImageColorAllocate defines the color, PHP considers it as the background color
$black = ImageColorAllocate($aimg, 0,0,0); //Define the required black
ImageRectangle($aimg,0,0,$img_height-1,$img_width-1,$black);//First create a black rectangle to surround the image
//It’s time to generate the snowflake background, which is actually 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, you see, it’s not actually a snowflake, it’s just an * sign. In order to make them look "messy and colorful", you have to use random numbers for their position, color, and even size when generating them one by one. This can be done with rand() or mt_rand.
}
//The background is generated above, now it’s time to put the generated random numbers. The principle is similar to the above. Random numbers are placed one by one, and their positions, sizes, and colors are all random numbers~~
//In order to distinguish it from the background, the color here should not exceed 200, and the color above should not be less than 200
for ($i=0;$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 an image instead of text
ImagePng($aimg); //Generate png format. . . Hehe, the effect is quite similar. . .
ImageDestroy($aimg);
} ?>
|
|