這是一個PHP驗證碼類,支持干擾碼、干擾線和傾斜。
PHP驗證碼類生成的樣式圖片:
其實PHP生成驗證碼沒有想象中的難,我自己寫了一個類,記住備忘。以下是這個類可以生成的樣式啦!
PHP 驗證碼類代碼:
PHP Code復制內容到剪貼板
- <?php
- /**
- * PHP 驗證碼,支持干擾點、干擾線、傾斜。
- * 日期:2011-09-23
- * 作者:www.itwhy.org
- * 使用:
- * $obj = new class_authcode(); //實例化對象,并設置驗證碼圖片的寬、高和驗證碼的長度。
- * $obj->$authcode; //獲取驗證碼。
- * $obj->output(); //輸出驗證碼圖片。
- */
- class class_authcode{
- public $authcode = ''; //驗證碼
- private $width = ''; //驗證碼圖片寬
- private $height = ''; //驗證碼圖片高
- private $len = ''; //驗證碼長度
- private $tilt = array(-30,30); //驗證碼傾斜角度
- private $font = 'AlteHaasGroteskBold.ttf'; //字體文件
- private $str = ''; //驗證碼基
- private $im = ''; //生成圖片的句柄
- //構造函數(shù),生成驗證碼。
- function __construct($width=100,$heigh=30,$len=4) {
- $this->width = $width;
- $this->height = $heigh;
- $this->len = $len;
- $this->str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
- $str_len = strlen($this->str)-1;
- for ($i=0; $i<$len; $i++) {
- $this->authcode .= $this->str[rand(0,$str_len)];
- }
- }
- //創(chuàng)建圖片
- private function imagecreate(){
- $this->im = imagecreatetruecolor($this->width,$this->height);
- }
- //干擾顏色
- private function ext_color() {
- return imagecolorallocate($this->im,rand(50, 180),rand(50, 180),rand(50, 180));
- }
- //創(chuàng)建干擾點
- private function ext_point() {
- for ($i=0; $i<$this->width*2; $i++) {
- imagesetpixel($this->im,rand(1,$this->width-1),rand(1,$this->height-1),$this->ext_color());
- }
- }
- //創(chuàng)建干擾線
- private function ext_line() {
- for ($i=0; $i<$this->len; $i++) {
- $x1 = rand(1,$this->width-1);
- $y1 = rand(1,$this->height-1);
- $x2 = rand(1,$this->width-1);
- $y2 = rand(1,$this->height-1);
- imageline($this->im,$x1,$y1,$x2,$y2,$this->ext_color());
- }
- }
- //把驗證碼寫入圖片(不能和$this->imgstrfloat()同時使用)
- private function imgstr() {
- $old_x = 1;
- for ($i=0; $i<$this->len; $i++) {
- $fontsize = rand(2,5); //字體大小
- $tmp_1 = $fontsize*2.5;
- $tmp_2 = $i>0 ? $tmp_1 : 0;
- $y = rand(1,$this->height/2);
- $x = rand($old_x+$tmp_2, ($i+1)*($this->width)/$this->len-$tmp_1);
- $old_x = $x;
- $color = imagecolorallocate($this->im,rand(200, 255),rand(200, 255),rand(200, 255));
- imagestring($this->im,$fontsize,$x,$y,$this->authcode[$i],$color);
- }
- }
- //把驗證碼傾斜寫入圖片(不能和$this->imgstr()同時使用)
- private function imgstrfloat() {
- $old_x = 1;
- for ($i=0; $i<$this->len; $i++) {
- $fontfloat = rand($this->tilt[0],$this->tilt[1]);
- $fontsize = rand(10,15); //字體大小
- $tmp_1 = $i>0 ? $fontsize : 0;
- $y = rand($fontsize+2, $this->height-2);
- $x = rand($old_x+$tmp_1+2, ($i+1)*($this->width)/$this->len-$fontsize-2);
- $old_x = $x;
- $color = imagecolorallocate($this->im, rand(200, 255), rand(200, 255), rand(200, 255));
- imagettftext($this->im, $fontsize, $fontfloat, $x, $y, $color, $this->font, $this->authcode[$i]);
- }
- }
- //輸出圖片
- function output() {
- $this->imagecreate();
- $this->imgstr();
- //$this->imgstrfloat();
- $this->ext_point();
- $this->ext_line();
- header('content-type:image/png');
- imagepng($this->im);
- imagedestroy($this->im);
- }
- }
- ?>