PHP验证码
设计一个验证码类,在需要的时候可以随时调用
验证码类,保存为ValidateCode.class.php
- <?php
- //验证码类
- session_start();
- class ValidateCode {
- private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
- private $code;//验证码
- private $codelen = 4;//验证码长度
- private $width = 130;//宽度
- private $height = 50;//高度
- private $img;//图形资源句柄
- private $font;//指定的字体
- private $fontsize = 20;//指定字体大小
- private $fontcolor;//指定字体颜色
- //构造方法初始化
- public function __construct() {
- $this->font = './latha.ttf';//注意字体路径要写对,否则显示不了图片
- }
- //生成随机码
- private function createCode() {
- $_len = strlen($this->charset)-1;
- for ($i=0;$i<$this->codelen;$i++) {
- $this->code .= $this->charset[mt_rand(0,$_len)];
- }
- }
- //生成背景
- private function createBg() {
- $this->img = imagecreatetruecolor($this->width, $this->height);
- $color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
- imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
- }
- //生成文字
- private function createFont() {
- $_x = $this->width / $this->codelen;
- for ($i=0;$i<$this->codelen;$i++) {
- $this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
- imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);
- }
- }
- //生成线条、雪花
- private function createLine() {
- //线条
- for ($i=0;$i<6;$i++) {
- $color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
- imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
- }
- //雪花
- for ($i=0;$i<100;$i++) {
- $color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
- imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
- }
- }
- //输出
- private function outPut() {
- header('Content-type:image/png');
- imagepng($this->img);
- imagedestroy($this->img);
- }
- //对外生成
- public function doimg() {
- $this->createBg();
- $this->createCode();
- $this->createLine();
- $this->createFont();
- $this->outPut();
- }
- //获取验证码
- public function getCode() {
- return strtolower($this->code);
- }
- }
注意:第16行中,要修改字体的路径,否则字体图片无法显示
实现,保存为captcha.php
- session_start();
- require './ValidateCode.class.php'; //先把类包含进来,实际路径根据实际情况进行修改。
- $_vc = new ValidateCode(); //实例化一个对象
- $_vc->doimg();
- $_SESSION['authnum_session'] = $_vc->getCode();//验证码保存到SESSION中
页面使用
- <img title="点击刷新" src="./captcha.php" align="absbottom" onclick="this.src='captcha.php?'+Math.random();"></img>
转载自:一个漂亮的php验证码类(分享)
PHP验证码的更多相关文章
- .net点选验证码实现思路分享
哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...
- 【探索】无形验证码 —— PoW 算力验证
先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...
- TODO:Laravel增加验证码
TODO:Laravel增加验证码1. 先聊聊验证码是什么,有什么作用?验证码(CAPTCHA)是"Completely Automated Public Turing test to te ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- 随手记_C#验证码
前言 最近在网上偶然看见一个验证码,觉得很有意思,于是搜了下,是使用第三方实现的,先看效果: 总体来说效果还是可以的,官方提供的SDK也比较详细,可配置性很高.在这里在简单啰嗦几句使用方式: 使用步骤 ...
- WPF做12306验证码点击效果
一.效果 和12306是一样的,运行一张图上点击多个位置,横线以上和左边框还有有边框位置不允许点击,点击按钮输出坐标集合,也就是12306登陆的时候,需要向后台传递的参数. 二.实现思路 1.获取验证 ...
- 零OCR基础6行代码实现C#验证码识别
这两天因为工作需要,要到某个网站采集信息,一是要模拟登陆,二是要破解验证码,本想用第三方付费打码,但是想想网上免费的代码也挺多的,于是乎准备从网上撸点代码下来,谁知道,撸了好多个都不行,本人以前也没接 ...
- ASP.NET中画图形验证码
context.Response.ContentType = "image/jpeg"; //生成随机的中文验证码 string yzm = "人口手大小多少上中下男女天 ...
- asp.net mvc 验证码
效果图 验证码类 namespace QJW.VerifyCode { //用法: //public FileContentResult CreateValidate() //{ // Validat ...
- ecshop验证码
<?php //仿制ecshop验证码(四位大写字母和数字.背景) //处理码值(四位大写字母和数字组成) //所有的可能的字符集合 $chars = 'ABCDEFGHIJKLMNOPQRST ...
随机推荐
- java:[1,1] 需要class, interface或enum
状态: cmd编译.java文件时报异常:java:[1,1] 需要class, interface或enum异常原因: 主要原因是java文件的编码问题. 在中文操作系统中,使用一贯的"j ...
- Node.js爬虫数据抓取乱码问题总结
一.非UTF-8页面处理 1.背景 windows-1251编码 比如俄语网站:https://vk.com/cciinniikk 可耻地发现是这种编码 所有这里主要说的是 Windows-1251( ...
- WebApi中跨域解决办法
在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案.由于时间有限,本文不会深入. 笔者遇到的问题是Js调用WebAPI中的数据进行跨域的场景.涉及若干跨域方案: 方案1:j ...
- Oracle基本操作汇总
--10g 新增的表空间类型:大文件 (Bigfile) 表空间.--10g 数据库在创建的时候,会指定默认的表空间类型.如果不特殊指定的话,默认为 SMALLFILE 类型的表空间.SELECT * ...
- 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知
[源码下载] 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台任务 推送通 ...
- EntityFramework left join
var result = from u in db.Order join n in db.Equipment on u.OrderId ...
- [Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题
http://www.cnblogs.com/mizhon/p/4242073.html [Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题 最近想 ...
- 在一个未知的CentOS服务器中如何加上PHP的openssl扩展
1. 服务器是定制过的,不知对应的centos版本: 2. PHP是自己编译的,而且服务器上没有保留对应版本的源代码,通过/pathto/php -v 找出php版本号,然后wget去下载对应的php ...
- CSS选择器性能分析
写了几篇关于js的博客,也是关于性能的,现在,我觉得有必要那css来认真分析一下了.之前只是看别人这么写就跟着写,但是没有去研究这样写或者是不是正确的写法,性价比怎么样,渲染的效率好么!这些都没有考虑 ...
- 为什么要用visibility:hidden;代替display:none;?
为什么要用用visibility:hidden;代替display:none;?因为后者更加消耗浏览器: css绘制画面有两种形式:repaint 和reflow,当我们更改css属相如backgro ...