用php和jquery分别实现验证码功能

一开始是想通过 jQuery 来实现验证码功能的。也实现了。

验证码效果

但是发现不能很好的和 PHP 联动,我是想直接用 JavaScript 来判断是否正确而非进行提交,不能很好的达到我想要的效果,当然也可能是我没想到。

1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
var num_list=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
var num='';
var num_len=5;
function createnum(){
for(let i =0;i<num_len;i++){
let num_random = Math.floor(Math.random()*num_list.length)
num = num+num_list[num_random];
}
}
createnum();
$('.right-num').val(num);
</script>

简单上一下 jQuery 的代码,很简单,但是没有实现我想要的效果,所以放弃来使用 PHP 写。

其实 PHP 的思路和 JavaScript 是一样的,我们通过数组来创建包含数据的数组,然后设置随机数来随机选择数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$numlist = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$num ='';
$numlen=5;
function createnum($numlist,$num,$numlen){
for($i=0;$i<$numlen;$i++){
$numrandom = rand(0,count($numlist)-1);
$num=$num.$numlist[$numrandom];
}
return $num;
}
$num =createnum($numlist,$num,$numlen);
?>

我是直接将我的代码复制上来了,其实也就是前面创建出来这个验证码,然后在验证码的地方输出,之后通过 form 表单提交数据,这里面有个很关键的地方就是传 right-num 数据。如果我们不传这个数据而是使用前面的 $num 的话,那么会造成 $num 为当前页面的验证码,而我们提交的则是上一个页面的验证码,也就是说我们点击提交按钮后,数据发生了变化,我们提交的是之前的验证码,而 $num 是提交后新生成的。所以我们就需要将之前生成的验证码也传入 PHP 中来进行判断。

然后就实现了验证码的功能,虽然比较简陋,但是验证码通常用来防止自动提交等,防君子不防小人。

作者

datehoer

发布于

2021-05-28

更新于

2023-10-19

许可协议

评论