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. MyEclipse8.5优化经验

    第一步: 取消自动validation    validation有一堆,什么xml.jsp.jsf.js等等,我们没有必要全部都去自动校验一下,只是需要的时候才会手工校验一下!    取消方法:   ...

  2. 一个appium 博客

    http://www.cnblogs.com/tobecrazy/category/699177.html appium Java控制Appium server start/stop 摘要: 相信很多 ...

  3. php源码分析之base64_encode函数

    base64_encode编码规律分析 字符串长度除以3向上取整乘以4等于编码后的字符串长度 ceil(strlen($string)/3)*4 = strlen(base64_encode($str ...

  4. CentOS6.5 安装snort

    本机CentOS6.5最大化安装,以下安装所需组件也是最大化安装之后仍需自己安装的. 1.安装libpcap与libpcap-devel yum -y install libpcap* 2.安装lib ...

  5. HDU 1754 I Hate It(线段树基础应用)

    基础线段树 #include<iostream> #include<cstdio> #include<cstring> using namespace std; # ...

  6. hrbustoj 2130 一笔画(状态压缩)

    基础状态压缩 转移方程为 dp[j][i] = min(dp[j][i],dp[k][i^(1<<j)] + dis[k][j]); #include<iostream> #i ...

  7. UML关系总结

    用例图: 1.扩展关系:如果已有一个用例,在这个用例的基础(该用例是完整的)上加入新的动作形成了另一个用例,即后者是通过继承前者的属性并加入新的内容而来的,则前者通常称为通用化用例,后者常为扩展用例. ...

  8. POJ 3905 Perfect Election

    2-SAT 裸题,搞之 #include<cstdio> #include<cstring> #include<cmath> #include<stack&g ...

  9. CSS中关于margin的理解误区

    思考一 在以前,我对于margin的理解是这样的,此处用margin-top举例:指的是离相邻元素之间的距离. 但是实际是:相对于自身原来的位置偏移. 举个例子: <!DOCTYPE HTML ...

  10. spring boot + neo4j restful

    整整折腾了三天,终于把spring boot + neo4j的路走通了. 这里介绍3个部分,pom,entity,repository 1)pom <?xml version="1.0 ...