123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php
- namespace Passport\Lib;
- use Dever;
- class Code
- {
- private $width;
- private $height;
- public $code;
- public $mcode;
- public $string;
- private $image;
- public function __construct($width = '160', $height = '30')
- {
- $this->width = $width;
- $this->height = $height;
- }
- public function create()
- {
- header("Content-type: image/png");
- $this->createCode();
- $this->createImage();
- $this->createPix();
- $this->write();
- imagepng($this->image);
- imagedestroy($this->image);
- }
- public function createM()
- {
- $len = isset(Dever::config('base', 'project')->mobileCode['length']) ? Dever::config('base', 'project')->mobileCode['length'] : 4;
- $this->createRand($len);
- }
- private function createImage()
- {
- $this->image = @imagecreate($this->width, $this->height);
- $back = imagecolorallocate($this->image, 255, 255, 255);
- $border = imagecolorallocate($this->image, 0, 0, 0);
- imagefilledrectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $back);
- imagerectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $border);
- }
- private function createPix()
- {
- for ($i = 0; $i <= 200; $i++) {
- imagesetpixel($this->image, rand(2, $this->width), rand(2, $this->height), imagecolorallocate($this->image, rand(0, 255), rand(0, 255), rand(0, 255)));
- }
- }
- public function createRand($length)
- {
- $this->mcode = null;
- $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
- $str = '0123456789';
- $max = strlen($str) - 1;
- for ($i = 0; $i < $length; $i++) {
- $this->mcode .= $str[rand(0, $max)]; //rand($min,$max)生成介于min和max两个数之间的一个随机整数
- }
- }
- private function createCode()
- {
- $cal = array
- (
- array('+', '+'),
- array('-', '-'),
- //array('*', '乘以'),
- //array('/', '除以'),
- );
- $index = array_rand($cal);
- $m1 = rand(1, 100);
- $m2 = rand(1, 100);
- $this->string = $m1 . $cal[$index][1] . $m2 . '';
- $this->code = '$this->code = ' . $m1 . $cal[$index][0] . $m2 . ';';
- eval($this->code);
- }
- private function write()
- {
- $length = strlen($this->string);
- for ($i = 0; $i < $length; $i++) {
- $bg_color = imagecolorallocate($this->image, rand(0, 255), rand(0, 128), rand(0, 255));
- $x = floor($this->width / $length) * $i;
- $y = rand(0, $this->height - 15);
- imagechar($this->image, rand(5, 5), $x + 5, $y, $this->string[$i], $bg_color);
- }
- }
- public function __destruct()
- {
- unset($this->width, $this->height, $this->image);
- }
- }
|