PHP生成验证码的类代码,本验证码类支持生成干扰点、干扰线等干扰像素,还可以使字符倾斜。在类中你可以定义验证码宽度、高度、长度、倾斜角度等参数,后附有用法:

<?php
class class_authcode{
public $authcode = ''; //验证码
private $width = ''; //验证码图片宽
private $height = ''; //验证码图片高
private $len = ''; //验证码长度
private $tilt = array(-30,30);//验证码倾斜角度
private $font = 'AlteHaasGroteskBold.ttf';//字体文件
private $str = ''; //验证码基
private $im = ''; //生成图片的句柄
//构造函数
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)];
}
}
//生成验证码图片
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));
}
//生成干扰点
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());
}
}
//生成干扰线
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);
}
}
?>

本验证码用法说明:

$obj = new class_authcode();//实例化对象,并设置验证码图片的宽、高和验证码的长度
$obj->$authcode; //获取验证码
$obj->output(); //输出验证码图片

PHP生成带有干扰线的验证码,干扰点、字符倾斜的更多相关文章

  1. 利用java生成带有干扰线的网页验证码图片

    package imageCreate; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import j ...

  2. 利用canvas绘制带干扰线的验证码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. django-simple-captcha 验证码干扰线随机点位

    CAPTCHA_NOISE_FUNCTIONS = ( 'captcha.helpers.noise_null',# 设置样式 'captcha.helpers.noise_arcs',# 设置干扰线 ...

  4. JavaWeb开发之普通图片验证码生成技术与算术表达式验证码生成技术

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134649.html    另:算术验证码生成的JSP.Servlet实现均已移植github:https:/ ...

  5. 动态生成能够局部刷新的验证码【AJAX技术】---看了不懂赔你钱

    在开发JavaWeb应用时,动态生成能够局部刷新的验证码是一项必须的功能,在这里我们将会详细的讲解如何实现这一功能. 一.涉及技术 该功能需要用到AJAX异步传输技术,这样能保证在点击"看不 ...

  6. php使用imagettftext()函数有干扰线但是没有文字的问题解决

    public function code() { //主要参数 if($font_size == 0) $font_size = 20; if($img_width == 0) $img_width ...

  7. 用Maven快速生成带有依赖的可执行jar包

    一.背景 最近项目在做微服务的拆分,那么我们想让我们的容器启动更加的轻量级,所以我们选择放弃tomcat等容器,而是通过maven生成带有指定依赖的可执行jar包的方式进行处理,本文我将分享如何通过m ...

  8. 使用TuShare下载历史逐笔成交数据并生成1分钟线

    使用如下代码从TuShare下载沪深300每只股票的历史成交记录并按股票.日期保存到本地.主要是为了以后查询方便快速. #-*- coding: utf-8 -*- import numpy as n ...

  9. 生成带有表格的word附件和动态赋值

    生成带有表格的word附件和动态赋值, 表格前后需要添加一个特殊的开始和结束的域,表格第一列 TableStart:AuditJdcttbzInfo 和表格的最后一列 TableEnd:AuditJd ...

随机推荐

  1. STM32F2系列低功耗总结

    序号 运行状态 进入指令(stm32f2xx_pwr.c) 退出条件 状态 IO管脚状态 进一步降低功耗的措施 1 运行模式 上电/系统复位后的默认模式, HCLK驱动CPU运行代码 可通过指令 进入 ...

  2. io scheduler

    http://doctorlzr1988.blog.163.com/blog/static/50456520201051905236683/

  3. hibernate中SQLQuery的addEntity()方法

    如果使用原生sql语句进行query查询时,hibernate是不会自动把结果包装成实体的.所以要手动调用addEntity(Class class)等一系列方法. 如session.createSQ ...

  4. JS读RSS

    <html>  <head>   <title>javascript读取RSS数据</title>   <META content="t ...

  5. Android安全讲座第九层(二) 内存dump

    近来android上越来越多的应用对自身的保护机制加强了重视,主要表现在几个方面. 1 dex加壳 2 so加壳 3 dex藏在so中,在适当的时候释放. 这是技术上一个进步,并且还有一些专业的公司提 ...

  6. iOS开发中控制器切换方式Modal

    简介 在iPhone开发中 Modal是一种常见的切换控制器的方式 默认是从屏幕底部往上弹出,直到完全盖住后面的内容为止 在iPad开发中 Modal的使用频率也是非常高的 对比iPhone开发,Mo ...

  7. 强制删除sql用户链接

    SELECT 'alter system kill session '''||sid||','||serial#||''';' FROM v$session WHERE username='USER' ...

  8. CSS3的background-size

    DEMO一.background-size:auto; 我来看第一个DEMO,在前面的DEMO上加上和个class名为"backgroundSizeAuto",在这个Demo上我们 ...

  9. Delphi的指针(转)

    源:http://blog.csdn.net/henreash/article/details/7368088 Pointers are like jumps, leading wildly from ...

  10. javascript 对象的复制

    1. jQuery has a method that can be used to deep-clone objects, the$.extend() function. Let’s take a ...