问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用PHP生成验证码

发布网友 发布时间:2022-04-25 05:13

我来回答

3个回答

热心网友 时间:2022-04-06 03:45

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);//释放图片所占内存 
}

热心网友 时间:2022-04-06 05:03

php生成验证码,php验证码,php怎样生成验证码?
工具/原料
这个验证码较实用,大家可以应用到项目中。
方法/步骤
1.
<?php
/*设置文件头为图片输出*/
Header("Content-type: image/JPEG");

/*调用生成验证码函数*/
$checkcode = make_rand(4);

/**
 * 生成验证码字符
 * @param int $length 验证码字符长度
 * @return string
 */
function make_rand($length="32"){
$str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$result="";
for($i=0;$i<$length;$i++){
$num[$i]=rand(0,25);
$result.=$str[$num[$i]];
}
return $result;
}
2.
/*调用输出验证码图片函数*/
getAuthImage($checkcode, 160, 40);

/**
 * 生成验证码图片
 * @param string $text 验证码字符
 */
function getAuthImage($text, $w, $y) {
/*设置图片的宽度和高度*/
$im_x = $w;
$im_y = $y;
/*创建图片*/
$im = imagecreatetruecolor($im_x,$im_y);
$text_c = ImageColorAllocate($im, mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
$tmpC0=mt_rand(100,255);
$tmpC1=mt_rand(100,255);
$tmpC2=mt_rand(100,255);
$buttum_c = ImageColorAllocate($im,$tmpC0,$tmpC1,$tmpC2);
imagefill($im, 16, 13, $buttum_c);
3.
/*字体文件*/
$font = 't1.ttf';
for ($i=0;$i<strlen($text);$i++)
{
$tmp =substr($text,$i,1);
$array = array(-1,1);
$p = array_rand($array);
$an = $array[$p]*mt_rand(1,10);//角度
$size = 28;
imagettftext($im, $size, $an, 15+$i*$size, 35, $text_c, $font, $tmp);
}

/*将字符写入文件中*/
$distortion_im = imagecreatetruecolor ($im_x, $im_y);
imagefill($distortion_im, 16, 13, $buttum_c);
for ( $i=0; $i<$im_x; $i++) {
for ( $j=0; $j<$im_y; $j++) {
$rgb = imagecolorat($im, $i , $j);
if( (int)($i+20+sin($j/$im_y*2*M_PI)*10) <= imagesx($distortion_im)&& (int)($i+20+sin($j/$im_y*2*M_PI)*10) >=0 ) {
imagesetpixel ($distortion_im, (int)($i+10+sin($j/$im_y*2*M_PI-M_PI*0.1)*4) , $j , $rgb);
}
}
}
4.
/*干扰元素点的数量*/
$count = 160;
/*创建干扰元素点*/
for($i=0; $i<$count; $i++){
$randcolor = ImageColorallocate($distortion_im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagesetpixel($distortion_im, mt_rand()%$im_x , mt_rand()%$im_y , $randcolor);
}
/*创建干扰线条*/
$rand = mt_rand(5,30);
$rand1 = mt_rand(15,25);
$rand2 = mt_rand(5,10);
for ($yy=$rand; $yy<=+$rand+2; $yy++){
for ($px=-80;$px<=80;$px=$px+0.1)
{
$x=$px/$rand1;
if ($x!=0)
{
$y=sin($x);
}
$py=$y*$rand2;
imagesetpixel($distortion_im, $px+80, $py+$yy, $text_c);
}
}
5.
/*以PNG格式将图像输出到浏览器*/
ImagePNG($distortion_im);

/*销毁图像*/
ImageDestroy($distortion_im);
ImageDestroy($im);

热心网友 时间:2022-04-06 06:37

自带验证码类,有需要,这里看
http://jingyan.baidu.com/article/d45ad1488e7aa569552b80f3.html
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
糖代谢增高会发展成糖尿病吗? 地毯怎么选购呢 酒店地毯定制 葡萄籽油可以炒菜吗 葡萄籽食用油炒菜好吃吗 ...道路的理论基础、时代背景、历史依据、现实依据 排骨怎么炖好吃又简单家常做法 家常炖排骨怎样做好吃 vivox9spius怎么设置指纹解锁屏幕呀求大神交 vivox9pius怎么解锁密码 手机,没了你会更好作文 杨祖儿版杨贵妃谁知道 那位神人告诉我 长春龙峰殡仪客服电话如何在网上交纳骨灰盒存放费? 有多少杨祖发 杨祖发同名同姓 我想取一个三个字的名字前两了字是杨祖 人身损害赔偿丧葬费标准一般是什么的呢 杨祖全书哪个软件可以看 大家帮忙取名字 大年初一13:54生的女孩 杨祖() 丧葬费包括哪些项目 姓杨 祖字在中间男孩起名字三个字的 90分以上的 &#x39C4;这个字的拼音。 妇的拼音是什么 姓杨带个祖的取个名字例如杨祖…… 殡仪馆的骨灰盒收保管费吗 杨祖这两个字多少画? 火葬场费用需要多少钱?西安市临潼区关于一切从简大致费用是多少呢?就是火化和灵车和骨灰盒最低标准费用 诗句 快!!! 可动心反位缺口影响定位缺口么 叶玄离开杨祖在第几章 事业单位的人员和公务员的丧葬费标准有何不同 写出关于时间过得很快的诗句 国家应该想一想低保那么多年的费用可以解决多少人一次的火葬的骨灰盒费用? 《三国演义》中杨祖徳是谁 丧葬费标准是什么 江苏宜兴杨祖建制壶情况? 哈尔滨第二火葬场网上可以交寄存骨灰盒费吗? 捕鱼世界忘记帐号密码怎么办 求杨祖加的艺术签名,谢谢 大集体退休职工丧葬费用该如何计算? 长江十年禁渔!世代打鱼的他们,上岸后该如何生活? 全国有多少个人和杨祖航同名同姓 骨灰盒管理费可以支付宝缴费吗? php里有没有生成验证码的函数?? 杨家将后代今何在 大名叫杨祖儿小名叫什么好呢? 怎么让php生成的验证码随机数不重复 php中如何使用随机函数rand()生成一个数字验证码 杨祖蓝生于1986年农历2月23晚上两点过 请问这个名字能得多少分 php生成的验证码10分钟内有效如何做? 关于PHP生成验证码图片的问题 急急急 捕鱼图记 文言文翻译