首页 > 编程语言 >PHP的验证码实现(w3schools推荐)

PHP的验证码实现(w3schools推荐)

时间:2023-02-07 13:32:55浏览次数:66  
标签:code letters color image 验证码 td PHP w3schools


本文使用PHP一些可用的特性实现了验证码功能。该教程非常的简单,使用可以改变的字体生成了验证码图片,正如我们所了解的,验证码是用于避免垃圾评论或者自动提交的。

本验证码程序的资源:

​下载地址​

​在线演示​

captcha_code_file.php

代码:

<?php
session_start ( ) ;
//设置: 你可以在这里修改验证码图片的参数
$image_width = 120 ;
$image_height = 40 ;
$characters_on_image = 6 ;
$font = './monofont.ttf' ;

//以下字符将用于验证码中的字符
//为了避免混淆去掉了数字1和字母i
$possible_letters = '23456789bcdfghjkmnpqrstvwxyz' ;
$random_dots = 10 ;
$random_lines = 30 ;
$captcha_text_color = "0x142864" ;
$captcha_noice_color = "0x142864" ;

$code = '' ;

$i = 0 ;
while ( $i < $characters_on_image ) {
$code . = substr ( $possible_letters , mt_rand ( 0 , strlen ( $possible_letters ) - 1 ) , 1 ) ;
$i ++ ;
}

$font_size = $image_height * 0.75 ;
$image = @ imagecreate ( $image_width , $image_height ) ;

/* 设置背景、文本和干扰的噪点 */
$background_color = imagecolorallocate ( $image , 255 , 255 , 255 ) ;

$arr_text_color = hexrgb ( $captcha_text_color ) ;
$text_color = imagecolorallocate ( $image , $arr_text_color [ 'red' ] ,
$arr_text_color [ 'green' ] , $arr_text_color [ 'blue' ] ) ;

$arr_noice_color = hexrgb ( $captcha_noice_color ) ;
$image_noise_color = imagecolorallocate ( $image , $arr_noice_color [ 'red' ] ,
$arr_noice_color [ 'green' ] , $arr_noice_color [ 'blue' ] ) ;

/* 在背景上随机的生成干扰噪点 */
for ( $i = 0 ; $i < $random_dots ; $i ++ ) {
imagefilledellipse ( $image , mt_rand ( 0 , $image_width ) ,
mt_rand ( 0 , $image_height ) , 2 , 3 , $image_noise_color ) ;
}

/* 在背景图片上,随机生成线条 */
for ( $i = 0 ; $i < $random_lines ; $i ++ ) {
imageline ( $image , mt_rand ( 0 , $image_width ) , mt_rand ( 0 , $image_height ) ,
mt_rand ( 0 , $image_width ) , mt_rand ( 0 , $image_height ) , $image_noise_color ) ;
}

/* 生成一个文本框,然后在里面写生6个字符 */
$textbox = imagettfbbox ( $font_size , 0 , $font , $code ) ;
$x = ( $image_width - $textbox [ 4 ] ) / 2 ;
$y = ( $image_height - $textbox [ 5 ] ) / 2 ;
imagettftext ( $image , $font_size , 0 , $x , $y , $text_color , $font , $code ) ;

/* 将验证码图片在HTML页面上显示出来 */
header ( 'Content-Type: image/jpeg' ) ; // 设定图片输出的类型
imagejpeg ( $image ) ; //显示图片
imagedestroy ( $image ) ; //销毁图片实例
$_SESSION [ '6_letters_code' ] = $code ;

function hexrgb ( $hexstr ) {
$int = hexdec ( $hexstr ) ;

return array ( "red" = > 0xFF & ( $int >> 0x10 ) ,
"green" = > 0xFF & ( $int >> 0x8 ) ,
"blue" = > 0xFF & $int
) ;
}
?>



 

验证验证码正确或错误的方法

验证码图片上的文字被存放到了SESSION 变量里面,验证的时候,我们需要将SESSION 里面的值和用户输入的值进行比较即可。

$_SESSION[6_letters_code] – 存放着验证码的文字值
$_POST[6_letters_code] – 这是用户输入的验证码的内容

index.php代码

包含了HTML, CSS, Javascript and PHP代码:

<?php session_start ( ) ;

if ( isset ( $_REQUEST [ 'Submit' ] ) ) {
// 服务器端验证的代码
if ( empty ( $_SESSION [ '6_letters_code' ] ) ||
strcasecmp ( $_SESSION [ '6_letters_code' ] , $_POST [ '6_letters_code' ] ) != 0 )
{
$msg = "验证失败!" ;
} else {
//验证码验证正确,这里放验证成功后的代码
}
}
?>
<style type ="text/css">
.table {
font-family : Arial, Helvetica, sans-serif ;
font-size : 12px ;
color : #333 ;
background-color : #E4E4E4 ;
}
.table td {
background-color : #F8F8F8 ;
}
</style>

< form action = "" method = "post" name = "form1" id = "form1" >
< table width = "400" border = "0" align = "center" cellpadding = "5" cellspacing = "1" class = "table" >
<?php if ( isset ( $msg ) ) { ?>
< tr >
< td colspan = "2" align = "center" valign = "top" > <?php echo $msg ; ?> < / td >
< / tr >
<?php } ?>
< tr >
< td align = "right" valign = "top" > 验证码 : < / td >
< td > < img src = "captcha_code_file.php?rand=<?php echo rand();?>" id = 'captchaimg' > < br >
< label for = 'message' >请输入上面的验证码 : < / label >
< br >
< input id = "6_letters_code" name = "6_letters_code" type = "text" >
< br >
无法读图片吗?点击 < a href = 'javascript: refreshCaptcha();' > here < / a > 刷新
< / p > < / td >
< / tr >
< tr >
< td > < / td >
< td > < input name = "Submit" type = "submit" onclick = "return validate();" value = "提交" > < / td >
< / tr >
< / table >
< / form >
<script type = 'text/javascript' >
function refreshCaptcha ( )
{
var img = document . images [ 'captchaimg' ] ;
img . src = img . src . substring ( 0 , img . src . lastIndexOf ( "?" ) ) + "?rand=" + Math . random ( ) * 1000 ;
}
</script>


 

标签:code,letters,color,image,验证码,td,PHP,w3schools
From: https://blog.51cto.com/peishuai/6042037

相关文章

  • PHP中文乱码解决
    网上转载的,但是代码不完全,补充了下,再发通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来下载,相信这个大家都会。那么用Content-Disp......
  • PHP安全笔记
    1、          MagicQuotes选项PHP.INI中中有三个以magic_quotes_开头的选项magic_quotes_gpc如果是On的话,就会自动用‘\’转义从GET,POST,COOKIE来的数据,这是为......
  • 17个非常有用的PHP类和库
    本文转自互联网。在我们日常程序开发当中,使用一个好的而且成熟的PHP类,可以减少很多手工编码,通过这些通用API的使用,可以大大减轻我们的开发工作。今天,我们将重点介绍了一些很......
  • PHP字符串函数、知识要点总结
    主要包括以下方面:字符串的格式化字符串的连接与分割字符串的比较使用字符串函数匹配和替换子字符串使用正则表达式(下一篇文章专门总结)1、字符串的格式化:chop(rtrim)、ltrim......
  • 数据采集必备知识-php计划任务的实现
    站点如果做的多了,难免要发些伪原创的文章,文章的来源必然来源于网络采集,对于采集这里不详述,我自己用的是”SimpleHTMLDOM”,见我另一篇关于他的介绍:​​数据采集利器-PHP用......
  • PHP获取IP的多种方式解析
    PHP获取IP的方法有许多种,我们今天向大家总结了六种方法,希望通过对这六种方法的学习,能够加深我们对PHP语言的进一步了解,巩固我们所掌握的知识。PHP获取IP方法一:<?phpecho"<......
  • Java 图形验证码
    简介Java图形验证码,支持Gif、中文、算术等类型,可用于JavaWeb、JavaSE等项目。效果展   集成项目maven方式引入:<dependency><groupId>com.git......
  • PHPMyWind支持ppt粘贴
    ​ 自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了。一般情况下我们将Word内容粘贴到Web编辑......
  • laravel框架php artisan vendor:publish的作用
     场景在使用laravel框架的时候phpartisanvendor:publish#可以把对应的服务提供者的资源文件,复制到指定的路径下。 一般用法phpartisanvendor:publish--pr......
  • 学编程PHP与Python都有哪些区别?
    对于学习编程的小伙伴来说,不管是PHP还是python或者是java都是一门不错的编程语言,根据不同的应用场景选择适合的语言编程至关重要。那么学编程用PHP与Python语言都有哪些区......