Example of a verification code
Second, PHP Verification code class, secoder.class.php
<?php/** * Security Verification Code to: Verify code text distort, rotate, use different fonts, add interference code * * @author Running water Mengchun <cmpan (at) qq.com> * @link http://l Abs.yulans.cn/yl_security_secoder * @link Http://wiki.yulans.cn/docs/yl/security/secoder * * Class Yl_security_
Secoder {/** * Verification Code of the session of the subscript * * @var string///public static $seKey = ' Sid.sek ey.ylans.cn ';
public static $seKey = ' Sid '; public static $expire = 3000; Authenticode expiration (s)/** * code used in the character, 01IO easy to confuse, recommended not * * @var string/public static $codeSet = ' 346789ABCDEFGHJKLMNPQRTUVWX
Y '; public static $fontSize = 25; Authenticode font size (px) public static $useCurve = true; Whether to draw a confusing curve public static $useNoise = true; Add pragma public static $imageH = 0; Verify code picture wide public static $imageL = 0; Verify code picture long public static $length = 4; Verify the number of code digits public static $BG = Array (243, 251, 254); Background protected static $_image = NULL; Verification code picture instance protected static $_color = NULL; Verify code Font Color/** * Output Verification code and the value of the validation code saved in the session * Verify code saved to the session format: $_session[self:: $seKey= Array (' Code ' => ' Verification Code value ', ' time ' => ' Verification Code Creation Times '); */public static function entry () {//Picture width (px) Self:: $imageL | | self:: $imageL = self:: $length * Self:: $fontSize * 1.5 +
Self:: $fontSize *1.5; Picture High (px) Self:: $imageH | |
Self:: $imageH = self:: $fontSize * 2;
Establish a self:: $imageL x Self:: $imageH image self::$_image = Imagecreate (self:: $imageL, Self:: $imageH);
Set Background imagecolorallocate (Self::$_image, Self:: $BG [0], Self:: $BG [1], Self:: $BG [2]);
CAPTCHA font random Color Self::$_color = imagecolorallocate (Self::$_image, Mt_rand (1,120), Mt_rand (1,120), Mt_rand (1,120)); The validation code uses a random font//$ttf = DirName (__file__). '/ttfs/'. Mt_rand (1, 20). '. TTF '; 4 $ttf = dirname (__file__).
'/ttfs/4.ttf ';
if (self:: $useNoise) {//Paint Miscellaneous point self::_writenoise ();
} if (self:: $useCurve) {//Draw interference line self::_writecurve (); //Draw Verification Code $code = Array (); Verification code $codeNX = 0;
The left margin for the nth character of the authentication code for ($i = 0; $i <self:: $length; $i + +) {$code [$i] = self:: $codeSet [Mt_rand (0, 27)]; $codeNX + + Mt_rand (self:: $fontSize *1.2, Self:: $fontSize *1.6); Write a captcha character imagettftext (Self::$_image, Self:: $fontSize, Mt_rand ( -40), $codeNX, self:: $fontSize *1.5, Self::$_color
, $ttf, $code [$i]); }//Save Verification Code isset ($_session) | |
Session_Start (); $_session[self:: $seKey] [' code '] = Join (", $code); Save the check code to session $_session[self:: $seKey [' time '] = time ();
Verify Code creation Time Header (' Cache-control:private, max-age=0, No-store, No-cache, Must-revalidate ');
Header (' cache-control:post-check=0, pre-check=0 ', false);
Header (' Pragma:no-cache ');
Header ("Content-type:image/png");
Output Image imagepng (self::$_image);
Imagedestroy (Self::$_image); /** * Draw a random sine function curve that is composed of two lines (you can change to a more handsome curve function) * * The mathematical formula of the high school I forgot to go to Nirvana, write to * sine function analytic formula: Y=asin (ωx+φ) +b * Each constant value pair function image Impact: * A: Determines the peak (that is, the multiple of Longitudinal tensile compression) * B: Indicates the position of the waveform in the y-axis or the longitudinal moving distance (up and down) *φ: Determines the waveform and the position of the x-axis or the transverse moving distance (left plus right minus) *ω: Decision period (minimum positive period t=2π/∣ω∣) * * /protected static function _writecurve () {$A = Mt_rand (1, Self:: $imageH/2); Amplitude $b = Mt_rand (-self:: $imageH/4, Self:: $imageH/4); Y-axis Offset $f = Mt_rand (-self:: $imageH/4, Self:: $imageH/4); X axis Offset $T = Mt_rand (self:: $imageH *1.5, Self:: $imageL *2);
Cycle $w = (2* m_pi)/$T; $px 1 = 0; The starting position of the curve axis $px 2 = Mt_rand (self:: $imageL/2, Self:: $imageL * 0.667); End position of curve axis for ($px = $px 1; $px <= $px 2; $px = $px + 0.9) {if ($w!=0) {$py = $A * Sin ($w * $px + $f) + $b + self:: $image H/2;
y = Asin (ωx+φ) + b $i = (int) (self:: $fontSize-6)/4); while ($i > 0) {imagesetpixel (self::$_image, $px + $i, $py + $i, self::$_color);//Here The portrait is more than Imagettftext and imagestring.
Performance is much better $i--; }} $A = Mt_rand (1, Self:: $imageH/2); Amplitude $f = Mt_rand (-self:: $imageH/4, Self:: $imageH/4); X axis Offset $T = Mt_rand (self:: $imageH *1.5, Self:: $imageL *2);
Cycle $w = (2* m_pi)/$T;
$b = $py-$A * sin ($w * $px + $f)-Self:: $imageH/2;
$PX 1 = $px 2;
$px 2 = self:: $imageL; for ($px = $px 1; $px <= $px 2; $px = $px + 0.9) {if ($w!=0) {$py = $A * Sin ($w * $px + $f) + $b + self:: $imageH/2;//y = Asin (ωx+φ) +b $i = (int) (self:: $fontSize-8)/4); while ($i > 0) {imagesetpixel (self::$_image, $px + $i, $py + $i, self::$_color);//here (while) loop-point ratio imagettftext and IM
Agestring with a font size (without this while loop) performance is much better $i--;
/** * Draw Miscellaneous points * Write different color letters or numbers to the picture * * protected static function _writenoise () {for ($i = 0; $i < $i + +) {
Miscellaneous point Color $noiseColor = Imagecolorallocate (Self::$_image, Mt_rand (150,225), Mt_rand (150,225),
Mt_rand (150,225)); for ($j = 0; $j < 5 $j + +) {//Paint Miscellaneous point imagestring (Self::$_image, 5, Mt_rand ( -10, Self:: $imageL), Mt_rand
( -10, Self:: $imageH), Self:: $codeSet [Mt_rand (0, 27)],//Miscellaneous point text is a random letter or number $noiseColor); /** * Verify that the verification code is correct * * @param string $code user authentication code * @param BOOL user authentication code is correct */public static function check ($co
de) {isset ($_session) | | | session_start (); Authenticode cannot be empty if (empty ($code) | | empty ($_session[self:: $seKey]) {//echo $_session[self:: $seKey [' Code ']. '
1 ';
return false; }
//Session Expiration if (time ()-$_session[self:: $seKey] [' time '] > Self:: $expire) {unset ($_session[self:: $seKey]); echo $_session[self:: $seKey] [' Code ']. '
2 ';
return false;
return 0; }//if ($code = = $_session[self:: $seKey [' Code ']) {if strtoupper ($code) = = $_session[self:: $seKey [' Code ']] {//case-insensitive More//echo $_session[self:: $seKey [' Code ']. '
3 ';
return true; }//echo $_session[self:: $seKey [' Code ']. '
4 ';
return false; }//useage/* Yl_security_secoder:: $useNoise = false;
To be more secure, change to True yl_security_secoder:: $useCurve = true;
Yl_security_secoder::entry (); */*//Verify code if (!
Yl_security_secoder::check (@$_post[' Secode ')) {print ' Error secode ';} *
Third, call the method
1. Display Authentication code page code.php
<?php
session_start ();
Require ' secoder.class.php '; First the class is included, the actual path is modified according to the actual situation.
$vcode = new Yl_security_secoder (); Instantiate an object
$vcode->entry ();
? >
2. Check that the verification code is correct
<?php
session_start ();
Require ' secoder.class.php '; First the class is included, the actual path is modified according to the actual situation.
$vcode = new Yl_security_secoder (); Instantiate an object
//$vcode->entry ();
$code = $_get[' code '];
echo $vcode->check ($code);
$_session[' Code ' = $VC->getcode ()//Verify code is saved to session
?>
3. Verification Code Input Box call page
click the picture to retrieve the verification code <br>
<a href= "#" >
The above is the entire content of this article, I hope to help you learn, but also hope that we support the cloud habitat community.