比如用户注册时随机产生的验证码、
又比如用户注册时生成随机的一组密码后可自行修改,
当用户需要重置密码的时候也需要生成一个随机的密码······
随机数就根据特定的规则(或在一个数组范围内)所自动产生的字符串,
在php开发中应用广泛,不过php中的随机数也分好几种不同的情况,
首先来认识一下PHP提供的随机数函数rand()。.
rand(min,max)
可选参数min和max可以使rand() 返回0到RAND_MAX之间的伪随机整数。
例如,想要5到15(包括 5 和 15)之间的随机数,用 rand(5, 15)。
常用是随机数函数,自记便于使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | /** fengkui.net * \[rand_number 获取一定范围内的随机数字\] * @param integer $min \[最小值\] * @param integer $max \[最大值\] * @return \[type\] \[description\] */ function rand_number ($min=1, $max=9999) { return sprintf("%0".strlen($max)."d", mt_rand($min,$max)); } /** fengkui.net * \[get_rand_number 生成不重复的随机数\] * @param integer $start \[需要生成的数字开始范围\] * @param integer $end \[结束范围\] * @param integer $length \[需要生成的随机数个数\] * @return \[type\] \[生成的随机数\] */ function get_rand_number($start=1,$end=10,$length=4) { $connt=0; $temp=array(); while($connt<$length){ $temp\[\]=mt_rand($start,$end); $data=array_unique($temp); $connt=count($data); } sort($data); return $data; } /** fengkui.net * \[build_count_rand 生成一定数量的随机数,并且不重复\] * @param \[type\] $number \[数量\] * @param integer $length \[长度\] * @param integer $mode \[字串类型 0 字母 1 数字 其它 混合\] * @return \[type\] \[description\] */ function build_count_rand ($number,$length=4,$mode=1) { if($mode==1 && $length<strlen($number) ) { //不足以生成一定数量的不重复数字 return false; } $rand = array(); for($i=0; $i<$number; $i++) { $rand\[\] = rand_string($length,$mode); } $unqiue = array_unique($rand); if(count($unqiue)==count($rand)) { return $rand; } $count = count($rand)-count($unqiue); for($i=0; $i<$count*3; $i++) { $rand\[\] = rand_string($length,$mode); } $rand = array_slice(array_unique ($rand),0,$number); return $rand; } /** fengkui.net * \[get_rand_str 获取随机字符串\] * @param integer $randLength \[长度\] * @param integer $addtime \[是否加入当前时间戳\] * @param integer $includenumber \[是否包含数字\] * @return \[type\] \[description\] */ function get_rand_str($randLength=6,$addtime=1,$includenumber=0) { if ($includenumber){ $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQEST123456789'; }else { $chars='abcdefghijklmnopqrstuvwxyz'; } $len=strlen($chars); $randStr=''; for ($i=0;$i<$randLength;$i++){ $randStr.=$chars\[rand(0,$len-1)\]; } $tokenvalue=$randStr; if ($addtime){ $tokenvalue=$randStr.time(); } return $tokenvalue; } /** * \[genToken 生成32位随机数\] * @param integer $len \[长度\] * @param boolean $md5 \[是否md5\] * @return \[type\] \[description\] */ function genToken( $len = 32, $md5 = true ) { # Seed random number generator # Only needed for PHP versions prior to 4.2 mt_srand( (double)microtime()*1000000 ); # Array of characters, adjust as desired $chars = array( 'Q', '@', '8', 'y', '%', '^', '5', 'Z', '(', 'G', '_', 'O', '`', 'S', '-', 'N', '<', 'D', '{', '}', '\[', '\]', 'h', ';', 'W', '.', '/', '|', ':', '1', 'E', 'L', '4', '&', '6', '7', '#', '9', 'a', 'A', 'b', 'B', '~', 'C', 'd', '>', 'e', '2', 'f', 'P', 'g', ')', '?', 'H', 'i', 'X', 'U', 'J', 'k', 'r', 'l', '3', 't', 'M', 'n', '=', 'o', '+', 'p', 'F', 'q', '!', 'K', 'R', 's', 'c', 'm', 'T', 'v', 'j', 'u', 'V', 'w', ',', 'x', 'I', '$', 'Y', 'z', '*'); # Array indice friendly number of chars; $numChars = count($chars) - 1; $token = ''; # Create random token at the specified length for ( $i=0; $i<$len; $i++ ){ $token .= $chars\[ mt_rand(0, $numChars) \]; # Should token be run through md5? } if ( $md5 ) { # Number of 32 char chunks $chunks = ceil( strlen($token) / 32 ); $md5token = ''; # Run each chunk through md5 for ( $i=1; $i<=$chunks; $i++ ){ $md5token .= md5( substr($token, $i * 32 - 32, 32) ); } # Trim the token $token = substr($md5token, 0, $len); } return $token; } |