PHP實現(xiàn)漂亮的驗證碼功能
來源:易賢網(wǎng) 閱讀:956 次 日期:2015-04-15 15:20:48
溫馨提示:易賢網(wǎng)小編為您整理了“PHP實現(xiàn)漂亮的驗證碼功能”,方便廣大網(wǎng)友查閱!

網(wǎng)站為了防止用戶利用機器人自動注冊、登錄、灌水,采用了驗證碼技術(shù)。所謂驗證碼,就是將一串隨機產(chǎn)生的數(shù)字或符號,生成一幅圖片, 圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,輸入表單提交網(wǎng)站驗證,驗證成功后才能使用某項功能。這里展示了PHP實現(xiàn)漂亮的驗證碼功能,具體代碼如下:

<?php

class Imagecode{

private $width ;

private $height;

private $counts;

private $distrubcode;

private $fonturl;

private $session;

function __construct($width = 120,$height = 30,$counts = 5,$distrubcode="1235467890qwertyuipkjhgfdaszxcvbnm",$fonturl="C:\Windows\Fonts\TektonPro-BoldCond.otf"){

$this->width=$width;

$this->height=$height;

$this->counts=$counts;

$this->distrubcode=$distrubcode;

$this->fonturl=$fonturl;

$this->session=$this->sessioncode();

session_start();

$_SESSION['code']=$this->session;

}

function imageout(){

$im=$this->createimagesource();

$this->setbackgroundcolor($im);

$this->set_code($im);

$this->setdistrubecode($im);

ImageGIF($im);

ImageDestroy($im);

}

private function createimagesource(){

return imagecreate($this->width,$this->height);

}

private function setbackgroundcolor($im){

$bgcolor = ImageColorAllocate($im, rand(200,255),rand(200,255),rand(200,255));//±³¾°ÑÕÉ«

imagefill($im,0,0,$bgcolor);

}

private function setdistrubecode($im){

$count_h=$this->height;

$cou=floor($count_h*2);

for($i=0;$i<$cou;$i++){

$x=rand(0,$this->width);

$y=rand(0,$this->height);

$jiaodu=rand(0,360);

$fontsize=rand(8,15);

$fonturl=$this->fonturl;

$originalcode = $this->distrubcode;

$countdistrub = strlen($originalcode);

$dscode = $originalcode[rand(0,$countdistrub-1)];

$color = ImageColorAllocate($im, rand(40,140),rand(40,140),rand(40,140));

imagettftext($im,$fontsize,$jiaodu,$x,$y,$color,$fonturl,$dscode);

}

}

private function set_code($im){

$width=$this->width;

$counts=$this->counts;

$height=$this->height;

$scode=$this->session;

$y=floor($height/2)+floor($height/4);

$fontsize=rand(30,35);

$fonturl="C:\Windows\Fonts\AdobeGothicStd-Bold.otf";//$this->fonturl;

$counts=$this->counts;

for($i=0;$i<$counts;$i++){

$char=$scode[$i];

$x=floor($width/$counts)*$i+8;

$jiaodu=rand(-20,30);

$color = ImageColorAllocate($im,rand(0,50),rand(50,100),rand(100,140));

imagettftext($im,$fontsize,$jiaodu,$x,$y,$color,$fonturl,$char);

}

}

private function sessioncode(){

$originalcode = $this->distrubcode;

$countdistrub = strlen($originalcode);

$_dscode = "";

$counts=$this->counts;

for($j=0;$j<$counts;$j++){

$dscode = $originalcode[rand(0,$countdistrub-1)];

$_dscode.=$dscode;

}

return $_dscode;

}

}

Header("Content-type: image/GIF");

$imagecode=new Imagecode(160,50);

$imagecode->imageout();

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機網(wǎng)站地址:PHP實現(xiàn)漂亮的驗證碼功能

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)