验证码核心

<?php

// 1, 创建画布
$img = imagecreatetruecolor(170, 40);

// 2, 填充背景色
// 2.1 创建背景色句柄
$backcolor = imagecolorallocate($img, mt_rand(200, 255), mt_rand(150, 255), mt_rand(200, 255));
// 2.2 填充背景
imagefill($img, 0, 0, $backcolor);

// 3, 产生随机验证码字符串
// 3.1,拼凑出一个数组,里面有大小写英文字母和数字(range和array_merge)
$arr = array_merge(range(‘A‘,‘Z‘),range(‘a‘,‘z‘),range(0,9));
// 3.2,打乱该数组(shuffle)
shuffle($arr);
// 3.3,利用array_rand随机获取若干个该数组的下标(键)
$rand_keys = array_rand($arr,4);
// 3.4,依次根据数组的键获得数组的值,拼凑到一起(foreach遍历)
$str = ‘‘;
foreach($rand_keys as $value) {
    $str .= $arr[$value];// $rand_keys中的值$value就是原数组$arr中的键
}

// 4,将验证码字符串写到图片上面
// 4.1 计算字符间隔
$span = ceil(170/(4+1));
for($i=1;$i<=4;$i++) {
    $strcolor = imagecolorallocate($img, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));
    imagestring($img, 5, $i*$span, 10, $str[$i-1], $strcolor);
}

// 5, 添加干扰线
for($i=1;$i<=6;$i++) {
    $linecolor = imagecolorallocate($img, mt_rand(50, 100), mt_rand(50, 100), mt_rand(0, 100));
    imageline($img, mt_rand(0,169), mt_rand(0,39), mt_rand(0,169), mt_rand(0,39), $linecolor);
}

// 6, 添加干扰点(噪点)
for($i=1;$i<=170*40*0.03;$i++) {
    $pxcolor = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
    imagesetpixel($img, mt_rand(0,169), mt_rand(0,39), $pxcolor);
}

// 7, 输出图片
header("Content-type:image/png");
// 清理数据缓冲区
ob_clean();
imagepng($img);

时间: 2024-09-29 07:25:53

验证码核心的相关文章

验证码的生成核心代码

var sResult = "";$(function () {//生成验证码 var context = $("#myCanvas")[0].getContext("2d"); //canvas的获取必须用DOM方式获取,所以必须把jQuery方式转换成DOM方式 context.font = "50px 微软雅黑"; //常用字体为微软雅黑 context.fillStyle = "red"; //定义

Java Web(四) 一次性验证码的代码实现

其实实现代码的逻辑非常简单,真的超级超级简单. 1.在登录页面上login.jsp将验证码图片使用标签<img src="xxx">将绘制验证码图片的url给它 2.在服务器端就两个servlet,一个就是用来绘制验证码图片的VerifyCodeServlet,另一个就是登录时验证验证码是否点写正确或是否重复提交的LoginServlet 3.在VerifyCodeServlet中,将验证码的四个字母存入session中,然后在LoginServlet中,将请求中提交过来的

JS-改变页面的颜色之变化核心-获取六位的随机数

前言:从JS-改变页面的颜色(一).JS-改变页面的颜色(二).JS-改变页面的颜色(三)三个简单的小白例,我们可以轻而易举的看到起变化的核心是——十六进制颜色值的获取方式,所以,我们这里总结一下获取六位随机数的方法都有那些. 代码比较简单就不一个个解释了,不过总体的思路这里要简单的记录一下: 一:需求,获取六位的数字随机数 二:思路,关键就是怎么获取变化的数字 1)通过前端的随机函数,来获取随机数,可以获取一位或者多位然后通过循环来拼接成六位,或者我们想要的任何位数 2)获取随机数,除了通过随

java web 实现验证码

验证码的作用:通常的登录或者注册系统时,都会要求用户输入验证码,以此区别用户行为和计算机程序行为,目的是有人防止恶意注册.暴力破解密码等. 实现验证码的思路:用 server 实现随机生成数字和字母组成图片的功能,用 jsp 页面实现显示验证码和用户输入验证码的功能,再用 server 类分别获取图片和用户输入的数据,判断两个数据是否一致. 代码实现 1.编写数字.英文随机生成的 server 类,源码: 1 package com; 2 3 import java.awt.Color; 4 i

php核心知识要点

Php:脚本语言,网站建设,服务器端运行 PHP定义:一种服务器端的 HTML 脚本/编程语言,是一种简单的.面向对象的.解释型的.健壮的.安全的.性能非常之高的.独立于架构的.可移植的.动态的脚本语言.是一种广泛用于 Open Source(开放源代码)的尤其适合 Web 开发并可以嵌入 HTML 的多用途脚本语言.它的语法接近 C,Java 和 Perl,而且容易学习.该语言让 Web 开发人员快速的书写动态生成的网页. PHP简介:Rasmus Lerdorf发展历程(1994:1.0个人

为什么验证码短信成为行业短信主流?

从十年前短信群发行业的兴起,到2010年的短信各路企业的风起云涌,还有媒体对"垃圾短信"的多次曝光,再到2013年底运营商的大刀阔斧的整顿和叫停,时至今日,短信发送业务貌似步入了正轨,同时也随着智能手机移动互联网的快速发展,包括微信和手机安全软件的迅猛普及,人们对手机短信模块的使用变得可有可无,也许好多天都不会去看短信.总之,2014年企业应用级的短信市场总体业务量大不如五年前,至少下滑了60%!      那么,当年的成千上万家的短信公司现在怎么样了呢?据调查了解,那些曾经疯狂揽金的

十七、EnterpriseFrameWork框架核心类库之Web控制器

回<[开源]EnterpriseFrameWork框架系列文章索引> EFW框架源代码下载:http://pan.baidu.com/s/1qWJjo3U EFW框架中的WebController就是解决JqueryEasyUI与逻辑层的交互,之间的数据是通过Json字符串来传递:值得注意的是WebController的代码一定不要和EFWWeb项目放在一起,你可以单独建一个项目类库,也可以和逻辑层项目放一起:在EFWWeb项目不要编写任何C#代码,这个在前面的文章中就提过,可以让你的Web项

LUA+resty 搭建验证码服务器

使用Lua和OpenResty搭建验证码服务器 雨客 2016-04-08 16:38:11 浏览2525 评论0 云数据库Redis版 摘要: Lua下有个Lua-GD图形库,通过简单的Lua语句就能控制.生成图片. 环境说明: 操作系统:RHEL6.4 RHEL系统默认已安装RPM包的Lua-5.1.4,但其只具有Lua基本功能,不提供 lua.h 等,但 Lua-GD 编译需要用到 lua.h,故 Lua 需要编译安装. Lua-GD... Lua下有个Lua-GD图形库,通过简单的Lua

PHP核心知识要点II

HTTP协议:超文本传输协议,b/s架构项目遵循的基本协议,浏览器服务器通信的基本原理(请求连接(TCP/IP协议),连接成功,浏览器发送请求,服务器处理请求,浏览器处理结果,关闭连接),HTTP协议两部分(请求,响应),url,特点(支持客户/服务器模式,简单快速[只需请求方法和路径],灵活[任意数据],无连接[每次连接只处理一个请求],无状态[事务处理没有记忆能力]) HTTP请求:四部分(请求行,请求头,空行,请求主体),请求行(请求方式,请求文件,协议/版本),请求头(host,acce