PHP如何实现简单的验证码功能
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"))
{
本文导航
转发
文章评论
登录 (没有帐户?快速注册)
使用第三方帐号登录: