PHP如何实现简单的验证码功能

2013 年 5 月 23 日5700

PHP如何实现简单的验证码功能

Builder开发者在线 来源: 中国IT实验室 2013年04月02日

关键词: php 验证码

本文摘要

网站注册的验证码功能是最常用的,用PHP如何实现呢?本文给出了一个简单的答案。

Builder开发者在线 网站注册的验证码功能是最常用的,用PHP如何实现呢?本文给出了一个简单的答案。看了一些比较大的体验比较好的网站验证码都较为简单,没有复杂的背景,没有干扰码,没有背景。

有什么地方写的不好的欢迎大家批评,指点。

[php]

<?php

if (!defined('IS_INITPHP')) exit('Access Denied!');

/*********************************************************************************

* InitPHP 2.0 国产PHP开发框架 扩展类库-验证码

*-------------------------------------------------------------------------------

* 版权所有: CopyRight By initphp.com

* 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己

*-------------------------------------------------------------------------------

* $Author:liuxinming

* $Dtime:2012-10-09

***********************************************************************************/

class seccodeInit{

private $width;

private $height;

private $type=0;// 0 字母+数字验证码

private $time=3000;//验证码过期时间(s)

private $color=null;//验证码字体颜色

private $im;

private $length=4;//验证码长度

private $warping;//随机扭曲

/**

* 获取随机数值

* @return string

*/

private function get_random_val() {

$i=0;

while($i<$this->length)

{

mt_srand((double)microtime()*1000000);

$randnum=mt_rand(50,90);

if(!in_array($randnum,array(58,59,60,61,62,63,64,73,79)))

{

$authnum=$authnum.chr($randnum);

$i++;

}

}

session_start();

$time=time();

$checkcode=md5(md5($authnum.'initphpYzmsy'.$time));

$key=$time.','.$checkcode.','.authnum;

$_SESSION['initphp_code'] = $key;

return $authnum;

}

/**

* 获取验证码图片

* @param $width 宽

* @param $height 高

* @param $warping 字体随机扭曲开关 0=关,1=开

* @return string

*/

public function getcode($width=140,$height=40,$warping=0){

$this->width=$width;

$this->height=$height;

$this->warping=$warping;

if($this->type<2&& function_exists('imagecreate') && function_exists('imagecolorset') && function_exists('imagecopyresized') && function_exists('imagecolorallocate') && function_exists('imagechar') && function_exists('imagecolorsforindex') &&

function_exists('imageline') && function_exists('imagecreatefromstring') && (function_exists('imagegif') || function_exists('imagepng') || function_exists('imagejpeg'))){

$this->image();

}

}

/**

* 生成图片验证码

* @return string

*/

public function image(){

$this->im=imagecreate($this->width, $this->height);//设置图片背景大小

imagecolorallocate($this->im, 243, 251, 254);// 设置背景

$this->color=imagecolorallocate($this->im, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120));// 验证码字体随机颜色

$ttfPath = dirname(__FILE__) . '/font/';//字体目录

$dirs = opendir($ttfPath);

$seccodettf = array();

while($entry = readdir($dirs)) {

if($entry != '.' && $entry != '..' && in_array(strtolower(addslashes(strtolower(substr(strrchr($entry, '.'), 1, 10)))), array('ttf', 'ttc'))) {

$seccodettf[] = $ttfPath.$entry;

}

}

$ttf = $seccodettf[array_rand($seccodettf)];//随机一种字体

$size = $this->type ? $this->width / 7 : $this->width / 6;//字体大小

imagettftext($this->im,$size, 0, 10, $size*1.2, $this->color, $ttf, $this->get_random_val());//设置验证码字符

if($this->warping){//随机扭曲

$this->setWarping();

}

if(function_exists("imagepng"))

{

header ("Content-type: image/png");

$code=imagepng($this->im);

}elseif (function_exists("imagejpeg"))

{

本文导航

转发

文章评论

登录 (没有帐户?快速注册)

使用第三方帐号登录:

0 0