如何生成验证码

1.随机生成验证码

    rand()--返回0到getrandmax()之间的伪随机整数;

<?php
header('content-type:text/html;charset=utf-8');

$str = "abcdefghijklmnopqrstuvwxyz0123456789";

echo getrandmax();
 
echo '<br>';

echo rand();

2.在指定范围内生成一个随机数

    int rand(int $min,int $max)

    例:生成 0-10 之间的随机数

<?php
header('content-type:text/html;charset=utf-8');

$str = "abcdefghijklmnopqrstuvwxyz0123456789";

echo rand(0,10);

3.mt_rand——生成更好的随机数(语法同rand)

<?php
header('content-type:text/html;charset=utf-8');

$str = "abcdefghijklmnopqrstuvwxyz0123456789";

$len = strlen($str);//36

mt_rand(0,$len-1);

   索引号为0-35

4.substr——返回字符串的子串   

  语法:string substr(string $string,int $strat[,int $length]) 

  start

  如果start是非负数,返回的字符串将从string的start位置开始,从0开始计算。 

  如果start是负数,返回的字符串将从string结尾处向前数第start个字符开始。

  如果start的长度小于或等于start,将返回FALSE

 例:使用负数start

<?php

$rest = substr("abcdef",-1);      //返回"f"

$rest = substr("abcdef",-1);      //返回"ef"

$rest = substr("abcdef",-3,1);    //返回d

   length 

   如果提供了正数的length,返回的字符串将从start处开始最多包括length个字符(取决于string的长度).

   如果提供了负数的length,那么string末尾处的许多字符将会被漏掉(若start是负数则从字符串尾部算起),如果start不在这段文本中,那么将返回一个空字符串。

   如果提供了值为0,FALSE或NULL的length,那么将返回一个空字符串。

   如果没有提供length,返回的子字符串将从start位置开始直到字符串结尾。

  例:使用负数length

<?php

$rest = aubstr("abcdef",0,-1);      //返回"abcde"

$rest = aubstr("abcdef",2,-1);      //返回"cde"

$rest = aubstr("abcdef",4,-4);      //返回 ""

$rest = aubstr("abcdef",-3,-1);     //返回"de"

5.生成四位随机验证码

  思路:首先生成四个指定范围的随机数,从每个数中取一个字符,之后连接起来

<?php
header('content-type:text/html;charset=utf-8');

$str = "abcdefghijklmnopqrstuvwxyz0123456789";

$len = strlen($str);//36

$yzm = '';

for($i=0;$i<4;$i++){

	$rand = mt_rand(0,$len-1);

	$yzm .= substr($str, $rand,1);

	//echo $rand.'<br>';

}

echo $yzm;

6.使用数组生成四位随机验证码

思路:首先创建数组,合并数组,随机从数组中抽取元素,之后连接起来

<?php

header('content-type:text/html;charset=utf-8');

$arr1 = range('a','z');

$arr2 = range('A','Z');

$arr3 = range(0,9);

//合并数组
$arr = array_merge($arr1,$arr2,$arr3);

//随机从数组中抽取4个元素
$keys = array_rand($arr,4);

$yzm = '';

foreach($keys as $k){

   $yzm .= $arr[$k];

}

echo $yzm;

1. array_merge — 合并一个或多个数组    语法:array array_merge ( array $array1 [, array $... ] )

array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

2. array_rand — 从数组中随机取出一个或多个单元    语法:mixed array_rand ( array $input [, int $num_req = 1 ] )

从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键。

如果你只取出一个, array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值。

猜你喜欢

转载自blog.csdn.net/qq_43628350/article/details/83932048
今日推荐