打印

[php] PHP随机码问题

复制内容到剪贴板
代码:
function rand_show($len=6)
{   
    $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    mt_srand((double)microtime()*1000000*getmypid());
    $password='';   
    while(strlen($password)<$len)   
    $password.=substr($chars,(mt_rand()%strlen($chars)),1);   
    return $password;   
}
function rand_number($len,$numbers)
{   
     $str = rand_show(1);
    
     $c=0;
    
     if(strlen($numbers)==$len)
     {
         return $numbers;
     }else{
        
        for($k=0;$k<strlen($numbers);$k++)
        {
            if($numbers[$k]!=$str)
            {
                $c++;
            }
            
        }
        
        if(strlen($numbers)==$c)
        {
            $numbers.=$str;
        }
        rand_number($len,$numbers);
            
    }
}
echo rand_number(7,'A'); //随机执行
为啥这个不行呢? 但函数里的 return $numbers;这个确实已经有值啊 我echo $numbers; 都是出来正确的 可怎么就是返回不出来
这个程序的目的是 想得到一个随机不相同的编码 比如 AHIETML 但不能为AHHTETM 就是说这组编码中不能存在两个相同的字母,如果那个高手有现成的麻烦贡献下。
www.gyqpw.com  广源汽车配件报价网
分析:
if(strlen($numbers)==$len) //如果字符串长度等于$len直接返回$numbers..你这里是7.很明显这里的条件为false.转到else语句后代码..else后的代码你没有返回任何值..SO
复制内容到剪贴板
代码:
<?php
function rand_show($len=6)
{   
    $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    mt_srand((double)microtime()*1000000*getmypid());
    $password='';   
    while(strlen($password)<$len)   
    $password.=substr($chars,(mt_rand()%strlen($chars)),1);   
    return $password;   
}
function rand_number($len,$numbers)
{   
     $str = rand_show(1);
     $c=0;
     if(strlen($numbers)==$len)
     {
         return $numbers;
     }
     else
     {        
        for($k=0;$k<strlen($numbers);$k++)
        {
            if($numbers[$k]!=$str)
            {
                $c++;
            }
            
        }
        
        if(strlen($numbers)==$c)
        {
            $numbers.=$str;
        }
        rand_number($len,$numbers);
        return $numbers;
    }
   
}
echo rand_number(7,'A'); //随机执行
?>
银子博客
经典站长QQ群:16719484
研究Kohana中..
版主 你这样直接在后面添加了个 return $numbers; 那么他只能返回1位 而我需要的是7位
其实在
if(strlen($numbers)==$len)
     {
         return $numbers;
     }
这里 把 return $numbers;替换成 echo $numbers; 你可以发现这个是个标准的7位编码(不重复的) 但我想要的不是他打印出来而是想让他返回出来
www.gyqpw.com  广源汽车配件报价网
复制内容到剪贴板
代码:
function rand_show($len=6)
{   
    $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    mt_srand((double)microtime()*1000000*getmypid());
    $password='';   
    while(strlen($password)<$len)   
    $password.=substr($chars,(mt_rand()%strlen($chars)),1);   
    return $password;   
}
function rand_number($len,$numbers)
{   
    
     $str = rand_show(1);
     $c=0;
     
     if(strlen($numbers) != $len)
     {
        for($k=0;$k<strlen($numbers);$k++)
        {
            if($numbers[$k]!=$str)
            {
                $c++;
            }
        }
        
        if(strlen($numbers)==$c)
        {
            $numbers.=$str;
        }
        
        $numbers = rand_number($len,$numbers);
        return $numbers;
    }
    else
    {
         return $numbers;
    }
}
echo rand_number(7,'A'); //随机执行
用递归时要考虑到已改变的变量值是否被传递..

p.s.效率不高啊..
似乎有更好的办法..
银子博客
经典站长QQ群:16719484
研究Kohana中..

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
p.s.效率不高啊..
似乎有更好的办法..

烦请赐教....
www.gyqpw.com  广源汽车配件报价网

TOP