在网站功能建设中,php随机数是常用的一个功能,
比如用户注册时随机产生的验证码、
又比如用户注册时生成随机的一组密码后可自行修改,
当用户需要重置密码的时候也需要生成一个随机的密码······
随机数就根据特定的规则(或在一个数组范围内)所自动产生的字符串,
在php开发中应用广泛,不过php中的随机数也分好几种不同的情况,
首先来认识一下PHP提供的随机数函数rand()。
rand(min,max)
可选参数min和max可以使rand() 返回0到RAND_MAX之间的伪随机整数。
例如,想要5到15(包括 5 和 15)之间的随机数,用 rand(5, 15)。
常用是随机数函数,自记便于使用
/** 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;
}
本文为冯奎原创文章,转载无需和我联系,但请注明来自冯奎博客fengkui.net
最新评论