php随机类型验证码
开发使用验证码的意义就是为了区别操作者是人还是机器,防止自动脚本对服务器造成灾难性的攻击
目前有各种各样的验证码种类,譬如:静态字符验证码、算术验证码、拖拽验证码、识别文字或识别物品验证码(高级),下面介绍随机切换算术或字符验证码
本验证码特点:静态验证码和算术验证码随机更换,每个字符位置会随机移动
一、效果图
二、使用函数列表
(1)imagecreatetruecolor:创建画布
(2)imagecolorallocate:为画布分配颜色
(3)imagefill:画布填充颜色
(4)imagesetpixel:设置干扰点
(5)imageline:设置干扰线
(6)imagestring:水平地画一行字符串
(7)imagepng:以 png格式将图像输出到浏览器或文件
(8)imagedestroy:销毁图片
三、实现流程
创建画布 -> 为画布定义背景颜色 -> 填充背景颜色 -> 设置干扰点 -> 设置干扰线 -> 把字符串填充到画布 -> 设置header向浏览器输出图片 -> 输出图片到浏览器 -> 销毁图片
四、实现代码
define("WIDTH", 200);
define("HEIGHT", 50);
//1.创建画布
$image = imagecreatetruecolor(WIDTH, HEIGHT); //2.为画布定义背景颜色
$bgcolor = imagecolorallocate($image, 255, 255, 255); //3.填充背景颜色
imagefill($image, 0, 0, $bgcolor); //4.设置干扰点
for ($i = 0; $i < 200; $i++) {
$pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imagesetpixel($image, mt_rand(0, WIDTH), mt_rand(0, HEIGHT), $pointcolor);
} //5.设置干扰线
for ($i = 0; $i < 3; $i++) {
$linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imageline($image, mt_rand(0, WIDTH), mt_rand(0, HEIGHT), mt_rand(0, WIDTH), mt_rand(0, HEIGHT), $linecolor);
} $type=mt_rand(0,1);
if($type==0){
$num1=mt_rand(0, 99);
$num2=mt_rand(0, 99);
$cal="+-";
$captcha=$num1.$cal[mt_rand(0, strlen($cal)-1)].$num2.'=';
$captchaLen=strlen($captcha);
$distance=WIDTH/2.0/$captchaLen; for ($i = 0; $i < $captchaLen; $i++) {
// 字体颜色
$fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
// 设置字体内容
$fontcontent = substr($captcha, $i, 1);
// 设置字符的xy坐标
$x = WIDTH/2.0- $distance*$captchaLen/2+$i* $distance;
$y = mt_rand(5, 30);
// 6.把字符串填充到画布
imagestring($image,30, $x, $y, $fontcontent, $fontcolor);
}
}else{
$captcha='2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY';
$captchaLen=4;
$distance=WIDTH/2.0/$captchaLen;
for ($i = 0; $i < $captchaLen; $i++) {
// 字体颜色
$fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
// 设置字体内容
$fontcontent = $captcha[mt_rand(0, strlen($captcha)-1)];
// 设置字符的xy坐标
$x = WIDTH/2.0- $distance*$captchaLen/2+$i* $distance;
$y = mt_rand(5, 30);
// 6.把字符串填充到画布
imagestring($image,30, $x, $y, $fontcontent, $fontcolor);
}
} //7.向浏览器输出图片头信息
header('content-type:image/png'); //8.输出图片到浏览器
imagepng($image); //9.销毁图片
imagedestroy($image);
php随机类型验证码的更多相关文章
- JavaWeb学习记录(五)——Servlet随机产生验证码
随机产生验证码的工具类: import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;impo ...
- springboot搭建项目,实现Java生成随机图片验证码。
这篇文章主要介绍了如何通过Java如何生成验证码并验证.验证码的作用我想必大家都知道,话不多说开始实施! 首先创建一个springboot项目以下是项目结构,内有utli工具类.存放生成图片验证码方法 ...
- Python随机生成验证码的两种方法
Python随机生成验证码的方法有很多,今天给大家列举两种,大家也可以在这个基础上进行改造,设计出适合自己的验证码方法方法一:利用range Python随机生成验证码的方法有很多,今天给大家列举两种 ...
- Alias Method解决随机类型概率问题
举个例子,游戏中玩家推倒了一个boss,会按如下概率掉落物品:10%掉武器 20%掉饰品 30%掉戒指 40%掉披风.现在要给出下一个掉落的物品类型,或者说一个掉落的随机序列,要求符合上述概率. 一般 ...
- Android锁定EditText内容和随机生成验证码
昨天写了个小Demo,实现了随机生成验证码,和锁定EditText两个小功能,先看一下效果图: 锁定EditText在我们不须要用户编辑EditText内容的时候能够用到,实现还是非常easy的,一行 ...
- python 全栈开发,Day85(Git补充,随机生成图片验证码)
昨日内容回顾 第一部分:django相关 1.django请求生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这 ...
- 随机生成验证码及python中的事务
1.随机生成验证码 # import random # print(random.random()) #-1的小数 # print(random.randint(,)) #包括1和3 # print( ...
- 用js做数字字母混合的随机四位验证码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- js随机生成验证码以及随机颜色
Javascript通过Math.random()随机生成验证码. 代码如下: <!DOCTYPE html><html> <head> <meta char ...
随机推荐
- C++Builder编写计算器
用C++Builder确实能快速上手, 只要是会一点C++基础的,都能很快的编写一些小程序,而且VCL库组件也很丰富,比微软MFC强多了. 自己动手写了一个计算器来增加自己的兴趣.C++基础以后有空还 ...
- PAT——1006. 换个格式输出整数
1006. 换个格式输出整数 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们用字母B来表示“百” ...
- Android 进价5_自定义广播 通过广播更新ListView的适配器 下载管理
1.在处理下载管理时,服务在后台运行,下载完成后要更新listview列表的按钮,将“下载”改成“打开”这样一个功能. 在Activity里面写一个静态内部类,继承广播.其中属性text_button ...
- JS获取MVC Attrbuate验证是否通用
直接用JQValidate的方法,$("#FeedBackForm").valid(); 当结果是true表示验证通过,false时表示验证失败~
- usb入门学习
1.学习资源: usb org.http://www.beyondlogic.org/usbnutshell/usb3.shtml http://wenku.baidu.com/view/028231 ...
- position定位笔记
position定位 position一共有四个可选属性:static/relative/absolute/fixed 代码: <style type="text/css"& ...
- Oracle子查询之高级子查询
Oracle 高级子查询 高级子查询相对于简单子查询来说,返回的数据行不再是一列,而是多列数据. 1,多列子查询 主查询与子查询返回的多个列进行比较 查询与141号或174号员工的manager_id ...
- oc中文首字母排序
oc中文首字母排序 NSArray *arr2=@[@"小雨",@"安安",@"小风",@"荣荣",@"张涛& ...
- iOS之iOS中的(null)、<null>、 nil 的问题
摘要: 你有没有过这样的经历,就是界面上显示出类似<null>.(null)这样一些东西,有时候还会莫名其妙的闪退.反反复复真是曰了犬,今天来总结一下这个问题的解决方法 前段时间开发过 ...
- git 的一些基本命令小结
Git是目前世界上最先进的分布式版本控制系统 对于git 的用法,本文并不属于教程,只是总结记录一些平时用的简单命令 git的下载地址:https://git-scm.com/downloads 主要 ...