好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

验证码扭曲php 验证码js

很多站长朋友们都不太清楚验证码扭曲php,今天小编就来给大家整理验证码扭曲php,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 如何用PHP生成验证码 2、 php 验证码类,怎么改变验证码形状 3、 thinkphp的验证码字符为什么都斜着 4、 php如何生成加粗或者斜体的文字样式图片 5、 php验证码解析 如何用PHP生成验证码

PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中。PHP生成验证码的大致流程有:

1、产生一张png的图片;

2、为图片设置背景色;

3、设置字体颜色和样式;

4、产生4位数的随机的验证码;

5、把产生的每个字符调整旋转角度和位置画到png图片上;

6、加入噪点和干扰线防止注册机器分析原图片来恶意破解验证码;

7、输出图片;

8、释放图片所占内存。

session_start();?

getCode(4,60,20);?

?

function?getCode($num,$w,$h)?{?

????$code?=?"";?

????for?($i?=?0;?$i?<?$num;?$i++)?{?

????????$code?.=?rand(0,?9);?

????}?

????//4位验证码也可以用rand(1000,9999)直接生成?

????//将生成的验证码写入session,备验证时用?

????$_SESSION["helloweba_num"]?=?$code;?

????//创建图片,定义颜色值?

????header("Content-type:?image/PNG");?

????$im?=?imagecreate($w,?$h);?

????$black?=?imagecolorallocate($im,?0,?0,?0);?

????$gray?=?imagecolorallocate($im,?200,?200,?200);?

????$bgcolor?=?imagecolorallocate($im,?255,?255,?255);?

????//填充背景?

????imagefill($im,?0,?0,?$gray);?

?

????//画边框?

????imagerectangle($im,?0,?0,?$w-1,?$h-1,?$black);?

?

????//随机绘制两条虚线,起干扰作用?

????$style?=?array?($black,$black,$black,$black,$black,?

????????$gray,$gray,$gray,$gray,$gray?

????);?

????imagesetstyle($im,?$style);?

????$y1?=?rand(0,?$h);?

????$y2?=?rand(0,?$h);?

????$y3?=?rand(0,?$h);?

????$y4?=?rand(0,?$h);?

????imageline($im,?0,?$y1,?$w,?$y3,?IMG_COLOR_STYLED);?

????imageline($im,?0,?$y2,?$w,?$y4,?IMG_COLOR_STYLED);?

?

????//在画布上随机生成大量黑点,起干扰作用;?

????for?($i?=?0;?$i?<?80;?$i++)?{?

????????imagesetpixel($im,?rand(0,?$w),?rand(0,?$h),?$black);?

????}?

????//将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成?

????$strx?=?rand(3,?8);?

????for?($i?=?0;?$i?<?$num;?$i++)?{?

????????$strpos?=?rand(1,?6);?

????????imagestring($im,?5,?$strx,?$strpos,?substr($code,?$i,?1),?$black);?

????????$strx?+=?rand(8,?12);?

????}?

????imagepng($im);//输出图片?

????imagedestroy($im);//释放图片所占内存?

}

php 验证码类,怎么改变验证码形状

直接上代码:

复制代码 代码如下:

//验证码类

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 = dirname(__FILE__).'/font/elephant.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);

}

}

输出实例:

使用方法:

1、先把验证码类保存为一个名为 ValidateCode.class.php 的文件;2、新建一个名为 captcha.php 的文件进行调用该类;captcha.php

复制代码 代码如下:

session_start();

require './ValidateCode.class.php'; //先把类包含进来,实际路径根据实际情况进行修改。

$_vc = new ValidateCode(); //实例化一个对象$_vc->doimg();

$_SESSION['authnum_session'] = $_vc->getCode();//验证码保存到SESSION中3、引用到页面中,代码如下:

复制代码 代码如下:

<img title="点击刷新" src="/data/upload/help/202303/13/e9719592dfc75770b2b320906205ae16.php" align="absbottom" onclick="this.src='captcha.php?'+Math.random();"></img>

4、一个完整的验证页面,代码如下:

复制代码 代码如下:

<?php

session_start();

//在页首先要开启session,

//error_reporting(2047);

session_destroy();

//将session去掉,以每次都能取新的session值;//用seesion 效果不错,也很方便

?>

<html>

<head>

<title>session 图片验证实例</title>

<style type="text/css">

#login p{

margin-top: 15px;

line-height: 20px;

font-size: 14px;

font-weight: bold;

}

#login img{

cursor:pointer;

}

form{

margin-left:20px;

}

</style>

</head>

<body>

<form id="login" action="" method="post">

<p>此例为session验证实例</p>

<p>

<span>验证码:</span>

<input type="text" name="validate" value="" size=10>

<img title="点击刷新" src="/data/upload/help/202303/13/e9719592dfc75770b2b320906205ae16.php" align="absbottom" onclick="this.src='captcha.php?'+Math.random();"></img>

</p>

<p>

<input type="submit">

</p>

</form>

<?php

//打印上一个session;

//echo "上一个session:<b>".$_SESSION["authnum_session"]."</b><br>";$validate="";

if(isset($_POST["validate"])){

$validate=$_POST["validate"];

echo "您刚才输入的是:".$_POST["validate"]."<br>状态:";if($validate!=$_SESSION["authnum_session"]){//判断session值与用户输入的验证码是否一致;echo "<font color=red>输入有误</font>";

}else{

echo "<font color=green>通过验证</font>";}

}

?>

thinkphp的验证码字符为什么都斜着

字符倾斜打乱增加背景等,都是为了能有限的控制机器自动识别验证码。

php如何生成加粗或者斜体的文字样式图片

加粗或者斜体的文字可以用php的函数控制.我想你是想生成验证码图片是吗?

如果是想生成验证么图片有几个函数可以考虑

imagecreate($length,$height)创建图片.参数是图片的宽度和高度

imagecolorallocate($image,$r,$g,$b)设置背景色,r b g就是图片的三色rgb参数.这个可以由传入0-255的随机数决定随机的背景色.还可以生成字体色

imagettftext($_image,$fontSize,?mt_rand(-40,?70),?$codeNX,$fontSize*1.5,$_color,?$ttf,?$code[$i]);写入随机的文字,这里要一个字一个字写.所以这个函数要循环调用.

百度了一下 找到了一个类...如下

<?php

/**

?*?安全验证码

?*?

?*?安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码。

?*?如果用中文做验证码(我这里不是哦,有兴趣你来改成用中文的),安全度会更好些,但验证码扭曲和旋转是王道,用了字体也算是已经给字体扭曲了,我就不再去给他添一只扭曲的足了。

?*?可配置的属性都是一些简单直观的变量,我就不用弄一堆的setter/getter了

?*

?*?@author?流水孟春?<cmpan(at)qq测试数据>

?*?@copyright?NEW?BSD

?*?@link?

?*?@link?

?*/

class?YL_Security_Secoder?{

/**

?*?验证码的session的下标

?*?

?*?@var?string

?*/

public?static?$seKey?=?'sid.sekey.ylans.cn';

public?static?$expire?=?3000;?????//?验证码过期时间(s)

/**

?*?验证码中使用的字符,01IO容易混淆,建议不用

?*

?*?@var?string

?*/

public?static?$codeSet?=?'346789ABCDEFGHJKLMNPQRTUVWXY';

public?static?$fontSize?=?25;?????//?验证码字体大小(px)

public?static?$useCurve?=?true;???//?是否画混淆曲线

public?static?$useNoise?=?true;???//?是否添加杂点

public?static?$imageH?=?0;????????//?验证码图片宽

public?static?$imageL?=?0;????????//?验证码图片长

public?static?$length?=?4;????????//?验证码位数

public?static?$bg?=?array(243,?251,?254);??//?背景

protected?static?$_image?=?null;?????//?验证码图片实例

protected?static?$_color?=?null;?????//?验证码字体颜色

/**

?*?输出验证码并把验证码的值保存的session中

?*?验证码保存到session的格式为:?$_SESSION[self::$seKey]?=?array('code'?=>?'验证码值',?'time'?=>?'验证码创建时间');

?*/

public?static?function?entry()?{

//?图片宽(px)

self::$imageL?||?self::$imageL?=?self::$length?*?self::$fontSize?*?1.5?+?self::$fontSize*1.5;?

//?图片高(px)

self::$imageH?||?self::$imageH?=?self::$fontSize?*?2;

//?建立一幅?self::$imageL?x?self::$imageH?的图像

self::$_image?=?imagecreate(self::$imageL,?self::$imageH);?

//?设置背景??????

imagecolorallocate(self::$_image,?self::$bg[0],?self::$bg[1],?self::$bg[2]);?

//?验证码字体随机颜色

self::$_color?=?imagecolorallocate(self::$_image,?mt_rand(1,120),?mt_rand(1,120),?mt_rand(1,120));

//?验证码使用随机字体?

$ttf?=?dirname(__FILE__)?.?'/ttfs/'?.?mt_rand(1,?20)?.?'.ttf';??

if?(self::$useNoise)?{

//?绘杂点

self::_writeNoise();

}?

if?(self::$useCurve)?{

//?绘干扰线

self::_writeCurve();

}

//?绘验证码

$code?=?array();?//?验证码

$codeNX?=?0;?//?验证码第N个字符的左边距

for?($i?=?0;?$i<self::$length;?$i++)?{

$code[$i]?=?self::$codeSet[mt_rand(0,?27)];

$codeNX?+=?mt_rand(self::$fontSize*1.2,?self::$fontSize*1.6);

//?写一个验证码字符

imagettftext(self::$_image,?self::$fontSize,?mt_rand(-40,?70),?$codeNX,?self::$fontSize*1.5,?self::$_color,?$ttf,?$code[$i]);

}

//?保存验证码

isset($_SESSION)?||?session_start();

$_SESSION[self::$seKey]['code']?=?join('',?$code);?//?把校验码保存到session

$_SESSION[self::$seKey]['time']?=?time();??//?验证码创建时间

header('Cache-Control:?private,?max-age=0,?no-store,?no-cache,?must-revalidate');

header('Cache-Control:?post-check=0,?pre-check=0',?false);

header('Pragma:?no-cache');

header("content-type:?image/png");

//?输出图像

imagepng(self::$_image);?

imagedestroy(self::$_image);

}

/**?

?*?画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更帅的曲线函数)?

?????*??????

?????*??????高中的数学公式咋都忘了涅,写出来

?* 正弦型函数解析式:y=Asin(ωx+φ)+b

?*??????各常数值对函数图像的影响:

?*????????A:决定峰值(即纵向拉伸压缩的倍数)

?*????????b:表示波形在Y轴的位置关系或纵向移动距离(上加下减)

?*????????φ:决定波形与X轴位置关系或横向移动距离(左加右减)

?*????????ω:决定周期(最小正周期T=2π/∣ω∣)

?*

?*/

????protected?static?function?_writeCurve()?{

$A?=?mt_rand(1,?self::$imageH/2);??????????????????//?振幅

$b?=?mt_rand(-self::$imageH/4,?self::$imageH/4);???//?Y轴方向偏移量

$f?=?mt_rand(-self::$imageH/4,?self::$imageH/4);???//?X轴方向偏移量

$T?=?mt_rand(self::$imageH*1.5,?self::$imageL*2);??//?周期

$w?=?(2*?M_PI)/$T;

$px1?=?0;??//?曲线横坐标起始位置

$px2?=?mt_rand(self::$imageL/2,?self::$imageL?*?0.667);??//?曲线横坐标结束位置? ????

for?($px=$px1;?$px<=$px2;?$px=$px+?0.9)?{

if?($w!=0)?{

$py?=?$A?*?sin($w*$px?+?$f)+?$b?+?self::$imageH/2;??//?y?=?Asin(ωx+φ)?+?b

$i?=?(int)?((self::$fontSize?-?6)/4);

while?($i?>?0)?{

????imagesetpixel(self::$_image,?$px?+?$i,?$py?+?$i,?self::$_color);??//?这里画像素点比imagettftext和imagestring性能要好很多 ????

????$i--;

}

}

}

$A?=?mt_rand(1,?self::$imageH/2);??????????????????//?振幅

$f?=?mt_rand(-self::$imageH/4,?self::$imageH/4);???//?X轴方向偏移量

$T?=?mt_rand(self::$imageH*1.5,?self::$imageL*2);??//?周期

$w?=?(2*?M_PI)/$T;

$b?=?$py?-?$A?*?sin($w*$px?+?$f)?-?self::$imageH/2;

$px1?=?$px2;

$px2?=?self::$imageL;

for?($px=$px1;?$px<=$px2;?$px=$px+?0.9)?{

if?($w!=0)?{

$py?=?$A?*?sin($w*$px?+?$f)+?$b?+?self::$imageH/2;??//?y?=?Asin(ωx+φ)?+?b

$i?=?(int)?((self::$fontSize?-?8)/4);

while?($i?>?0)?{

????imagesetpixel(self::$_image,?$px?+?$i,?$py?+?$i,?self::$_color);??//?这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出(不用这while循环)性能要好很多

????$i--;

}

}

}

}

/**

?*?画杂点

?*?往图片上写不同颜色的字母或数字

?*/

protected?static?function?_writeNoise()?{

for($i?=?0;?$i?<?10;?$i++){

//杂点颜色

????$noiseColor?=?imagecolorallocate(

??????????????????????self::$_image,?

??????????????????????mt_rand(150,225),?

??????????????????????mt_rand(150,225),?

??????????????????????mt_rand(150,225)

??????????????????);

for($j?=?0;?$j?<?5;?$j++)?{

//?绘杂点

????imagestring(

????????self::$_image,

????????5,?

????????mt_rand(-10,?self::$imageL),?

????????mt_rand(-10,?self::$imageH),?

????????self::$codeSet[mt_rand(0,?27)],?//?杂点文本为随机的字母或数字

????????$noiseColor

????);

}

}

}

/**

?*?验证验证码是否正确

?*

?*?@param?string?$code?用户验证码

?*?@return?bool?用户验证码是否正确

?*/

public?static?function?check($code)?{

isset($_SESSION)?||?session_start();

//?验证码不能为空

if(empty($code)?||?empty($_SESSION[self::$seKey]))?{

return?false;

}

//?session?过期

if(time()?-?$_SESSION[self::$seKey]['time']?>?self::$expire)?{

unset($_SESSION[self::$seKey]);

return?false;

}

if($code?==?$_SESSION[self::$seKey]['code'])?{

return?true;

}

return?false;

}

}

//?useage

/*

YL_Security_Secoder::$useNoise?=?false;??//?要更安全的话改成true

YL_Security_Secoder::$useCurve?=?true;

YL_Security_Secoder::entry();

*/

/*

//?验证验证码

if?(!YL_Security_Secoder::check(@$_POST['secode']))?{

print?'error?secode';

}

*/

这是效果

php验证码解析

同学 具体那看不明白请说

东西太多 不能一一解释

<?php

//产生随机变形随机码

session_start();;/* 开启SESSION 以便其他页面对验证码进行验证*/

$authnum=random(4);//种子

Header("Content-type: image/PNG"); //古例,改不得

$im = imagecreate(55,18); //imagecreate() 新建图像,大小为 x_size 和 y_size 的空白图像。

$red = ImageColorAllocate($im, 52,24,128); //设置背景颜色

$white = ImageColorAllocate($im, 65,223,224);//设置文字颜色

$gray = ImageColorAllocate($im, 0,0,0); //设置杂点颜色

imagefill($im,55,18,$red);

for ($i = 0; $i < strlen($authnum); $i++)

{

imagestring($im, 6, 13*$i+4, 1, substr($authnum,$i,1), $white);

}

for($i=0;$i<50;$i++) imagesetpixel($im, rand()%55 , rand()%48 , $gray); //加入干扰象素

ImagePNG($im); //以 PNG 格式将图像输出到浏览器或文件

ImageDestroy($im);//销毁一图像

$authnum=strtolower($authnum);

$_SESSION['code']=$authnum /* 把验证码的内容赋值给SESSION 以便其他页面验证*/

//产生随机数的函数

function random($length) /* 产生随机数字或者字母 */

{

$hash = '';

$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';

$max = strlen($chars) - 1;

mt_srand((double)microtime() * 1000000);

for($i = 0; $i < $length; $i++) {

$hash .= $chars[mt_rand(0, $max)];

}

return $hash; //又来

}

?>

关于验证码扭曲php的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于验证码扭曲php 验证码js的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did196935
更新时间:2023-04-26   阅读:21次

上一篇: php安全xss PHP安全吗

下一篇:php图片怎样打开 php图片显示代码

最新资料更新

  • 1.token验证php Token验证失败异地登陆什么意思
  • 2.vip影院php后台版 vip影视电视剧电影
  • 3.郑州php业余培训 郑州php业余培训机构
  • 4.php字母循序排列 php字符串排序
  • 5.php网站后台demo php后端模板
  • 6.iconv函数php iconv函数参数
  • 7.无限级菜单php java无限极菜单
  • 8.php中序递归 php递归算法1加到100
  • 9.php比较数组差集 php比较多个数组中是否有重复值
  • 10.php链接数据库创建表格 php连接数据库的方法
  • 11.phpwsdl调用 php调用php文件
  • 12.php操作redis存值 php redis数据类型
  • 13.php图片上传及显示 php 图片上传
  • 14.php匹配尖括号 括号匹配python代码
  • 15.php在线运行测试 php 测试工具
  • 16.php支付源码 php支付平台
  • 17.php数据库对象 php针对数据库的查询函数是
  • 18.php项目补充redis php+redis
  • 19.扫描登录php代码 扫描登录php代码错误
  • 20.php前端页面源码 php前端页面源码是多少

CopyRight:2016-{hedonghua:year}{hedonghua:sitegs} 备案ICP:湘ICP备09009000号-16 {hedonghua:sitejym}
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]