|
Class securecode
{
Private static $ instance = null;
Private $ code = '';
Private $ fontfile;
Private $ validate;
Private $ image;
Private $ specialadd = 'Special string for securecode ';
Private $ codeexpire = 86400;
Private $ codecookiename = 'secure _ code ';
/**
* Constructor
*/
Private function securecode ()
{
$ This-> fontfile = dirname (_ file _). '/arial. Ttf ';
}
Private function _ construct ()
{
$ This-> securecode ();
}
Public static function getinstance ()
{
If (self: $ instance = null)
Self: $ instance = new self ();
Return self: $ instance;
}
/**
* Specifies the path of the font file. The default value is the arial. ttf file in the current folder.
* @ Param $ fontfile file path
* @ Return void
*/
Function loadfont ($ fontfile)
{
$ This-> fontfile = $ fontfile;
}
/**
* Image output method. The program should not output any form before executing this method.
* @ Return void;
*/
Function stroke ()
{
$ This-> savecode ();
Self: sendheader ();
Imagegif ($ this-> validate );
Imagedestroy ($ this-> validate );
Imagedestroy ($ this-> image );
}
/**
* Image storage method
* @ Param $ filename save path
* @ Return void
*/
Function save ($ filename)
{
$ This-> savecode ();
Imagegif ($ this-> validate, $ filename );
Imagedestroy ($ this-> validate );
Imagedestroy ($ this-> image );
}
/**
* Verification code verification method
* @ Param $ input the string to be verified, that is, the user's input content
* @ Return boolean verification result
*/
Function verify ($ input)
{
$ Input = strtolower ($ input );
$ Targetcode = $ this-> authcode ($ input );
$ Code = $ this-> getcookie ();
If (empty ($ code) | $ code! = $ Targetcode)
$ Result = false;
Else
$ Result = true;
$ _ Cookie [$ this-> codecookiename] = '';
Setcookie ($ this-> codecookiename, '',-1 );
Return $ result;
}
/**
* Image creation method
* @ Return void;
*/
Function createimage ()
{
$ This-> randcode ();
$ Size = 30;
$ Width = 90;
$ Height = 35;
$ Degrees = array (
Rand (0, 30), rand (0, 30), rand (0, 30), rand (0, 30)
);
For ($ I = 0; $ I <4; ++ $ I)
{
If (rand () % 2 );
Else $ degrees [$ I] =-$ degrees [$ I];
}
$ This-> image = imagecreatetruecolor ($ size, $ size );
$ This-> validate = imagecreatetruecolor ($ width, $ height );
$ Back = imagecolorallocate ($ this-> image, 255,255,255 );
$ Border = imagecolorallocate ($ this-> image, 0, 0, 0 );
Imagefilledrectangle ($ this-> validate, 0, 0, $ width, $ height, $ back );
For ($ I = 0; $ I <4; ++ $ I)
{
$ Temp = self: rgbtohsv (rand (0,250), rand (0,150), rand (0,250 ));
If ($ temp [2]> 60) $ temp [2] = 60;
$ Temp = self: HSV torgb ($ temp [0], $ temp [1], $ temp [2]);
$ Textcolor [$ I] = imagecolorallocate ($ this-> image, $ temp [0], $ temp [1], $ temp [2]);
}
For ($ I = 0; $ I <200; ++ $ I)
{
$ Randpixelcolor = imagecolorallocate ($ this-> validate, rand (0,255), rand (0,255), rand (0,255 ));
Imagesetpixel ($ this-> validate, rand (1, 87), rand (1, 35), $ randpixelcolor );
}
$ Temp = self: rgbtohsv (rand (220,255), rand (220,255), rand (220,255 ));
If ($ temp [2] <200) $ temp [2] = 255;
$ Temp = self: HSV torgb ($ temp [0], $ temp [1], $ temp [2]);
$ Randlinecolor = imagecolorallocate ($ this-> image, $ temp [0], $ temp [1], $ temp [2]);
Self: imagelinethick ($ this-> validate, $ textcolor [rand (0, 3)]);
Imagefilledrectangle ($ this-> image, 0, 0, $ size, $ size, $ back );
Putenv ('gdfontpath = '. realpath ('.'));
// Name the font to be used (note the lack of the. ttf extension
Imagettftext ($ this-> image, 15, 0, 8, 20, $ textcolor [0], $ this-> fontfile, $ this-> code [0]);
$ This-> image = imagerotate ($ this-> image, $ degrees [0], $ back );
Imagecolortransparent ($ this-> image, $ back );
Imagecopymerge ($ this-> validate, $ this-> image, 1, 4, 4, 5, imagesx ($ this-> image)-10, imagesy ($ this-> image)-10,100 );
$ This-> image = imagecreatetruecolor ($ size, $ size );
Imagefilledrectangle ($ this-> image, 0, 0, $ size, $ size, $ back );
Imagettftext ($ this-> image, 15, 0, 8, 20, $ textcolor [1], $ this-> fontfile, $ this-> code [1]);
$ This-> image = imagerotate ($ this-> image, $ degrees [1], $ back );
Imagecolortransparent ($ this-> image, $ back );
Imagecopymerge ($ this-> validate, $ this-> image, 21, 4, 4, 5, imagesx ($ this-> image)-10, imagesy ($ this-> image)-10,100 );
$ This-> image = imagecreatetruecolor ($ size, $ size );
Imagefilledrectangle ($ this-> image, 0, 0, $ size-1, $ size-1, $ back );
Imagettftext ($ this-> image, 15, 0, 8, 20, $ textcolor [2], $ this-> fontfile, $ this-> code [2]);
$ This-> image = imagerotate ($ this-> image, $ degrees [2], $ back );
Imagecolortransparent ($ this-> image, $ back );
Imagecopymerge ($ this-> validate, $ this-> image, 41, 4, 4, 5, imagesx ($ this-> image)-10, imagesy ($ this-> image)-10,100 );
$ This-> image = imagecreatetruecolor ($ size, $ size );
Imagefilledrectangle ($ this-> image, 0, 0, $ size-1, $ size-1, $ back );
Imagettftext ($ this-> image, 15, 0, 8, 20, $ textcolor [3], $ this-> fontfile, $ this-> code [3]);
$ This-> image = imagerotate ($ this-> image, $ degrees [3], $ back );
Imagecolortransparent ($ this-> image, $ back );
Imagecopymerge ($ this-> validate, $ this-> image, 61, 4, 4, 5, imagesx ($ this-> image)-10, imagesy ($ this-> image)-10,100 );
Imagerectangle ($ this-> validate, 0, 0, $ width-1, $ height-1, $ border );
} |