php生成SessionID和图片校验码的思路和实现代码
2023-06-13 09:14:08 时间
/******产生SessionID******/ 基本的思路:是把当前微秒的时间获取,然后产生以个随机数字,把随机数字和当前时间相加后加密一下,最后再截取需要的长度 /* 函数名称:create_sess_id() 函数作用:产生以个随机的会话ID 参数:$len:需要会话字符串的长度,默认为32位,不要低于16位 返回值:返回会话ID 函数作者:heiyeluren */ functioncreate_sess_id($len=32) { //校验提交的长度是否合法 if(!is_numeric($len)||($len>32)||($len<16)){return;} //获取当前时间的微秒 list($u,$s)=explode("",microtime()); $time=(float)$u+(float)$s; //产生一个随机数 $rand_num=rand(100000,999999); $rand_num=rand($rand_num,$time); mt_srand($rand_num); $rand_num=mt_rand(); //产生SessionID $sess_id=md5(md5($time).md5($rand_num)); //截取指定需要长度的SessionID $sess_id=substr($sess_id,0,$len); return$sess_id; } /******产生校验码******/ 思路:这个思路比较简单,因为考虑独一无二和随机性,我们的校验码就SessionID里面截取一段字符串就可以了,因为我们的SessionID是充分考虑了独一无二的。 /* 函数名称:create_check_code() 函数作用:产生以个随机的校验码 参数:$len:需要校验码的长度,请不要长于16位,缺省为4位 返回值:返回指定长度的校验码 函数作者:heiyeluren */ functioncreate_check_code($len=4) { if(!is_numeric($len)||($len>6)||($len<1)){return;} $check_code=substr(create_sess_id(),16,$len); returnstrtoupper($check_code); } /******生成校验码的图片******/ 这个就是一些比较简单的PHP图像编程的东西了,我作的图片和简单。 /* 函数名称:create_check_image() 函数作用:产生一个校验码的图片 参数:$check_code:校验码字符串,一般由create_check_code()函数来获得 返回值:返回该图片 函数作者:heiyeluren */ functioncreate_check_image($check_code) { //产生一个图片 $im=imagecreate(65,22); $black=ImageColorAllocate($im,0,0,0);//背景颜色 $white=ImageColorAllocate($im,255,255,255);//前景颜色 $gray=ImageColorAllocate($im,200,200,200); imagefill($im,68,30,$gray); //将四位整数验证码绘入图片 imagestring($im,5,8,3,$check_code,$white); //加入干扰象素 for($i=0;$i<200;$i++) { $randcolor=ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imagesetpixel($im,rand()%70,rand()%30,$randcolor); } //输出图像 Header("Content-type:image/PNG"); ImagePNG($im); ImageDestroy($im); } 这里我们要注意,引用create_check_image()函数的时候,必须在一个单独的文件里,因为输出文件头的时候输出的格式是图像格式,夹杂其他内容,会导致图片无法显示。另外,图片成生函数,你是可以更改的,比如你想改颜色,那么你就把前景色和背景色的生成位置换一下,那么颜色就不一样了,同时也要把校验码的颜色换了,不然背景和校验码都是黑色就显示不出来了。
PHP校验码生成--备忘
<?php session_start();//保存生成值,以与用户输入比较 //------------------------------------------------------------------------- $img_w=80;//设置图片宽 $img_h=20;//设置图片高 $pixel_num=200;//点越多干扰越大 $is_set_line=true;//启用干扰线 $pixel_mode=2;//干扰点模式,1,同色;2,杂色 //------------------------------------------------------------------------- //随机数产生器 functionmake_seed() { list($usec,$sec)=explode("",microtime()); return(float)$sec+((float)$usec*100000); } mt_srand(make_seed());//4.2.0以下版本适用 $authnum=mt_rand(100,99999); //加入session $_SESSION["verifycode"]=$authnum; //echo$authnum; //生成验证码图片 Header("Content-type:image/PNG"); $im=imagecreatetruecolor($img_w,$img_h); $bg_color=ImageColorAllocate($im,mt_rand(250,255),mt_rand(250,255),mt_rand(250,255)); //绘制背景 imagefill($im,0,0,$bg_color); $total_width=0; $word_info=array(); //循环,获取文字信息 $word_length=strlen($authnum); for($ii=0;$ii<$word_length;$ii++) { $word_space=mt_rand(1,5); $font=rand(3,5); mt_rand(1,9)%2==0?$top=1:$top=3; $word_info[$ii]["char"]=substr($authnum,$ii,1); $word_info[$ii]["font"]=$font; $word_info[$ii]["offset"]=$top; if($ii==0) { $word_info[$ii]["width"]=0; } $word_info[$ii]["width"]=imageFontWidth($font)+$word_space; $word_info[$ii]["height"]=imageFontHeight($font); $word_info[$ii]["color"]=imageColorAllocate($im,mt_rand(0,50),mt_rand(0,150),mt_rand(0,200)); //文字总宽度 $total_width+=$word_info[$ii]["width"]; //取第一个字体的高度 if($ii==0) { $total_height=imagefontHeight($font); } } //计算偏移 $offset_x=floor(($img_w-$total_width)/2); $offset_y=floor(($img_h-$total_height)/2); //填充验证码 $wid=0; $i=0; foreach($word_infoas$key=>$val) { if($i>0) { $wid+=$val["width"]; } imagestring($im,$val["font"],$offset_x+$wid,$val["offset"]+$offset_y,$val["char"],$val["color"]); $i++; } switch($pixel_mode) { case1: $pixel_color=ImageColorAllocate($im, mt_rand(50,255), mt_rand(50,255), mt_rand(50,255)); //干扰象素 for($i=0;$i<$pixel_num;$i++) { imagesetpixel($im,mt_rand()%$img_w,mt_rand()%$img_h,$pixel_color); } break; case"2": //干扰象素 for($i=0;$i<=128;$i++) { $pixel_color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imagesetpixel($im,mt_rand(2,128),mt_rand(2,38),$pixel_color); } break; default: $pixel_color=ImageColorAllocate($im, mt_rand(50,255), mt_rand(50,255), mt_rand(50,255)); //干扰象素 for($i=0;$i<$pixel_num;$i++) { imagesetpixel($im,mt_rand()%$img_w,mt_rand()%$img_h,$pixel_color); } break; } ImagePNG($im); ?>
相关文章
- 笛卡尔积 php,PHP笛卡尔积实现算法示例
- PHP对接chatGPT代码,openai接口对接,php 实现chatGPT功能
- PHP mysqli_query():执行SQL语句
- 开发Linux下PHP模块开发:实现程序性能最大化(linux下php模块)
- PHP助力MySQL实现程序开发梦想(php支持mysql)
- 网站利用 PHP 与 MySQL 构建网站.(php和mysql开发)
- 数据库远程连接MySQL数据库:利用PHP实现简易方法(php远程mysql)
- Linux下打开PHP文件的实用技巧(linux打开php文件)
- PHP连接MySQL数据库的实现代码分享(php连接mysql代码)
- PHP启用Redis:轻松灵活的缓存服务(php开启redis)
- PHP与MSSQL:高效开发数据驱动应用程序(php与mssql)
- 使用PHP实现Redis订阅功能(redis订阅php)
- 使用PHP连接Oracle数据库(php连接oracle)
- 脚本定时执行PHP脚本任务:Linux下的解决方案(linux定时php)
- 利用PHP实现MySQL数据库操作的简易指南(php实现mysql)
- PHP编程查询MySQL数据库:入门指南(php 查询 mysql)
- 使用PHP实现远程连接MSSQL数据库(php远程连接mssql)
- PHP连接MSSQL实现数据库操作(php用mssql)
- 基于 PHP 和 MSSQL 的连接类开发实战(php mssql连接类)
- PHP MSSQL技术培训:提升你的技能(php mssql 培训)
- 零基础必看MySQL与PHP的入门指南(MySQL不会PHP)
- 加入Redisso扩展,极大地提升PHP运行效率(加入redis.so扩展)
- 基于Oracle和PHP的新一代组件全面上线(oracle php组件)
- 让的PHP代码飞起来的40条小技巧(提升php效率)
- php中显示数组与对象的实现代码
- php判断终端是手机还是电脑访问网站的思路及代码
- php生成二维码的几种方式整理及使用实例
- php模拟asp.netwebFrom按钮提交事件的思路及代码
- 用PHP代替JS玩转DOM的思路及示例代码
- PHP利用MySQL保存session的实现思路及示例代码