PHP 动态生成验证码
……机器人会在网站中搜寻允许他们插入广告的输入表单,在虚拟世界没有什么能阻挡它们胡作非为。这些机器人效率极高,完全不关心所攻击的表单的本来用途。它们唯一的目标就是用它们的垃圾广告覆盖你的内容,残忍地为它们的主人谋取广告收入。
要检验一个表单所面对的是一个真正的人,这种测试称为CAPTCHA(完全自动化公共图灵测试)。目前最有效的方法是生成一个要求用户输入的随机通行短语,为了防止支持OCR(光学字符识别)的机器人破解系统,通行短语字母必须变形,或者用随机的直线和点进行部分模糊处理。
/* 生成验证码序列 */
define("CAPTCHA_NUMCHARS", 6); //验证码长度
$pass_phrase = ""; //验证码内容
for ($i = 0; $i < CAPTCHA_NUMCHARS; $i++) {
//随机生成字母添加至验证码
$pass_phrase .= chr(rand(97, 122));
} /* 生成验证码图像 */
define("CAPTCHA_WIDTH", 300); //验证码宽度
define("CAPTCHA_HEIGHT", 100); //验证码高度
//创建空白画布
$img = imagecreatetruecolor(CAPTCHA_WIDTH, CAPTCHA_HEIGHT);
//设置主题颜色
$bg_color = imagecolorallocate($img, 225, 225, 225); //白色背景
$text_color = imagecolorallocate($img, 0, 0, 0); //黑色字体
$graphic_color = imagecolorallocate($img, 64, 64, 64); //灰色图像
//填充背景
imagefilledrectangle($img, 0, 0, CAPTCHA_WIDTH, CAPTCHA_HEIGHT, $bg_color);
//绘制随机直线
for ($i = 0; $i < 10; $i++) {
imageline($img, 0, rand() % CAPTCHA_HEIGHT, CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, $graphic_color);
}
//绘制随机点
for ($i = 0; $i < 20; $i++) {
imagefilledellipse($img, rand() % CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, 10, 10, $graphic_color);
}
//绘制验证码
imagettftext($img, 60, 0, 20, CAPTCHA_HEIGHT - 20, $text_color, "C:/Windows/Fonts/SketchFlow Print.ttf", $pass_phrase);
//作为PNG图像输出
header("Content-type: image/png");
imagepng($img);
//从内存从撤销图像
imagedestroy($img);

使用PHP动态生成的图像并不存储在一个文件中,实际上,imagepng() 函数会在服务器的内存中生成一个二进制PNG图像,然后把它直接通过一个首部传送到浏览器。
正因如此可以直接把PHP脚本放置在 <img> 标记的 src 属性中:<img src = "CAPTCHA.php"/>
PHP 动态生成验证码的更多相关文章
- 动态生成验证码———MVC版
上面有篇博客也是写的验证码,但那个是适用于asp.net网站的. 今天想在MVC中实现验证码功能,弄了好久,最后还是看博友文章解决的,感谢那位博友. 首先引入生成验证码帮助类. ValidateCod ...
- 使用Servlet动态生成验证码
最近在重新看了一遍servlert,看到篇优质博客推荐给大家:https://www.cnblogs.com/xdp-gacl/p/3798190.html 顺便把学习过程中的知识记录下来. 今天是如 ...
- java动态生成验证码图片
package cn.lijun.checkimg; import java.awt.image.BufferedImage;import java.io.BufferedReader; import ...
- 动态生成能够局部刷新的验证码【AJAX技术】---看了不懂赔你钱
在开发JavaWeb应用时,动态生成能够局部刷新的验证码是一项必须的功能,在这里我们将会详细的讲解如何实现这一功能. 一.涉及技术 该功能需要用到AJAX异步传输技术,这样能保证在点击"看不 ...
- 由12306动态验证码想到的ASP.NET实现动态GIF验证码(附源码)
背景: 12306网站推出“彩色动态验证码机制”,新版验证码不但经常出现字符叠压,还不停抖动,不少人大呼“看不清”,称“那个验证码,是毕加索的抽象画么!”铁总客服则表示:为了能正常购票只能这样.而多家 ...
- C#后台生成验证码
https://www.cnblogs.com/vchenpeng/archive/2013/05/12/3074887.html /// <summary> /// 获 ...
- python生成验证码,文字转换为图片-乾颐堂
在58或者赶集等一些网站上经常看到手机号是图片格式,或者一些网站的验证码.这些都是动态生成的,今天我们来看一下如何用python把文字生成图片.其实今天主要借助pygame的图像渲染模块,这样比较简单 ...
- php实现动态随机验证码机制(CAPTCHA)
php实现动态随机验证码机制 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Ap ...
- 详细说说如何生成验证码—ASP.NET细枝末节(4)
前言 今天小编详细的说一下,ASP.NET网站开发过程中生成验证码的全部问题. 本文的目标,是让读者了解,生成验证码涉及的全部基础知识问题. 当然这里说的是比较简单的验证码. 真正符合要求的验证码,涉 ...
随机推荐
- c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.
c# 调用C++的dll报错 Attempted to read or write protected memory: 原因是:c# 传递Null的string值导致的,将Null改为string ...
- HTML5入门(---------------HTML——基本骨架--------------)
HTML基础 一.HTML 超文本标记语言.英文全拼:HyperText Markup Language.负责网页的语义描述. 二.HTML基本骨架 <!DOCTYPE html> < ...
- Android利用Jsoup解析html 开发网站客户端小记。
这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...
- 在基于vue的webpack脚手架开发中使用了代理转发,结果浏览器发出的请求中不带cookie导致登录时总是session失效怎么办?
环境: 有2个业务接口需要转发到82的服务器上: ../user/getCode.do ../user/doLogin.do 现象: 使用上述的 ...
- spring-boot-starter-amqp踩坑记
踩坑记录 近日在用spring boot架构一个微服务框架,服务发现与治理.发布REST接口各种轻松惬意.但是服务当设计MQ入口时,就发现遇到无数地雷,现在整理成下文,供各路大侠围观与嘲笑. 版本 当 ...
- js 判断各种数据类型
了解js的都知道, 有个typeof 用来判断各种数据类型,有两种写法:typeof xxx ,typeof(xxx) 如下实例: typeof 2 输出 number ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
- BZOJ2242 [SDOI2011]计算器
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- Linux 查找进程运行位置
1.通过ps或者top命令查看运行的进程的pid ps -aux|grep php-fpm #或者 top 2. 获取进程的pid后,然后使用命令ls -l /proc/${pid},这个命令可以列出 ...
- sql 知识点系统汇总
提供性能: .服务器往往具有强大的计算能力和速度..避免把大量的数据下载到客户端,减少网络上的传输量. 第一章 T-SQL 语句 1.1数据类型 文本型 -- CHAR 定长型 <=8000字节 ...