我亏一点 - 函数
type: channel
link: https://www.000081.xyz/index.php/tag/函数/
items: PHP生成随机验证码

PHP生成随机验证码
type: item
date: 2022-05-10T01:46:21+00:00
description: AI摘要 本文介绍了使用PHP生成随机验证码的方法。通过自定义函数，利用GD库创建画布，生成包含字母与数字的随机字符串，并添加干扰像素、线条及边框以增强安全性。最终将验证码存入Session并以PNG图片格式输出。 此内容根据文章生成，仅用于文章内容的解释与总结 PHP生成随机验证码源代码：<?php // $img_w 图片宽 // $img_h 图片高 // $char_len 验证码字符数 // $font 字体大小(内置字体1-5) // $px 随机干扰像素点 // $line 随机线条数 function getCode($img_w=100,$img_h=40,$char_len=5,$font=5,$px=80,$line=10){ //生成码值数组,不需要0，避免与字母o冲突 $char = array_merge(range("A","Z"),range("a","z"),range("1","9")); //随机获取$char_len个码值的键 $rand_keys = array_rand($char,$char_len); //判断当码值长度为1时，将其放入数组中 if($char_len == 1){ $rand_keys = array($rand_keys); } //打乱随机获取的码值键的数组 shuffle($rand_keys); //根据键获取对应的码值，并拼接成字符串 $code=''; foreach($rand_keys as $i){ $code = $code . $char[$i]; } //----1 生成画布 $img = imageCreateTrueColor($img_w,$img_h); //设置背景 $bg_color = imageColorAllocate($img,0xcc,0xcc,0xcc); imageFill($img,0,0,$bg_color); //干扰像素 for($i=0;$i<=$px;$i++){ $color = imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imageSetPixel($img,mt_rand(0,$img_w),mt_rand(0,$img_h),$color); } for($i=0;$i<=$line;$i++){ $color = imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imageline($img,mt_rand(0,$img_w),mt_rand(0,$img_h),mt_rand(0,$img_w),mt_rand(0,$img_h),$color); } //矩形边框 $rect_color = imageColorAllocate($img,0x90,0x90,0x90); imageRectangle($img,0,0,$img_w-1,$img_h-1,$rect_color); //----2 操作画布 //设定字符串颜色 $str_color = imageColorAllocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100)); //设定字符串位置 $font_w = imageFontWidth($font); $font_h = imageFontHeight($font); $str_w = $font_w * $char_len; imageString($img,$font,($img_w-$str_w)/2,($img_h-$font_h)/2,$code,$str_color); $resulf = array( "code" => $code, "img" => $img ); return $resulf; } // $res['code'] 验证码 // $res['img'] 图片 $res = getCode(); session_start(); $_SESSION['captcha_code'] = $res['code']; header("Content-Type: image/png"); imagepng($res['img']); imagedestroy($res['img']); ?>