求一个php生成随机字符串的函数

求一个php生成随机字符串的函数,要求能灵活指定随机的范围(大写字母、小写字母、数字等)和指定生成长度。
已邀请:

liuliangsong - 80后IT民工

赞同来自:

  使用下面自定义函数即可,其中第一个参数$len是要生成的随机字符串长度,第二个参数是随机数生成范围的掩码(爱E族:aiezu.com)。
  生成范围的4种基本掩码和对应的类型为:1、小写字母;2、大写字母;4、数字;8、其他ASCII可见字符。要生成多种类型,直接将上面对应的掩码相加就行,如:大小写字母,$mask为3;大小写字母和数字,$mask为7。
<?php
/*
* 生成随机字符串(可选含数字、字母、特殊字符)
* 爱E族: aiezu.com
* $len 生成字符串的长度
* $mask 生成字符范围的掩码之和:1、小写字母;2、大写字母;4、数字;8、其他ASCII可见字符
*/
function randChars( $len = 8, $mask = 7 ) {
    $result = $seeds = '';
    $maskChars = array(
         '1' => "abcdefghijklmnopqrstuvwxyz"
        ,'2' => "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        ,'4' => "0123456789"
        ,'8' => "!\"#$%&'()*+,-./:;<=>?@[\]^-`{|}"
    );
    foreach($maskChars as $key=>$val ) {
        ($mask & $key) === $key && $seeds .= $val;
    }
    while( $seeds && strlen($result) < $len ) {
        $result .=  substr($seeds, rand(0, strlen($seeds)-1), 1);
    }
    return $result;
}
下面是用法:
echo sprintf("% 16s: 16位小写字母mask:1\n", randChars(16, 1));
echo sprintf("% 16s: 8位大写字母mask:2\n", randChars(8, 2));
echo sprintf("% 16s: 12位大、小写字母mask:1+2=3\n", randChars(12, 3));
echo sprintf("% 16s: 16位数字mask:4\n", randChars(16, 4));
echo sprintf("% 16s: 16位大、小写字母和数字mask:1+2+4\n", randChars(16, 7));
echo sprintf("% 16s: 12位特殊字符mask:8\n", randChars(12, 8));
echo sprintf("% 16s: 16位大小写字母、数字、特殊字符mask:1+2+4+8=15\n", randChars(16, 15));
输出结果:
ebbgzzxzxpaiejvt: 16位小写字母mask:1
        EWSCCUPX: 8位大写字母mask:2
    HufkJUVTXYfW: 12位大、小写字母mask:1+2=3
9098692730559259: 16位数字mask:4
cl2RK83q2ZiZXpVU: 16位大、小写字母和数字mask:1+2+4
    )@>`?^?!`&:]: 12位特殊字符mask:8
Qj,UB9s>7jnW]AG%: 16位大小写字母、数字、特殊字符mask:1+2+4+8=15

要回复问题请先登录注册