mt_srand():为了保证随即性,所以要“播种”
注: 自 PHP 420 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现已自动完成。
====================================================
1理解第二个问题,就要了解中文的编码原理;因为中文是“宽字符”所以一个字节不够存储,起码要两个字节(如果是utf-8的存储格式那有可能要3个字节)。所以就要chr($c)chr(mt_rand(161,249))两个字节;(我估计你的默认编码应该是gb2312或者是它的超集gbk-----它们用两个字节存储一个汉字)
2这里两个字节对应的数都大于127就是说这个字节的第7位肯定是1;用来区别ascii码。而至于为什么是在(161,249)之间?因为汉字的存储是分区的(严格来讲不是的)GB2312的编码方式和古老的区位码颇有渊源。汉字的区位码每两位加上0xA0就是计算机中的GB2312码。比如“啊”区位码是1601,GB码是0xB0A1。B0 = 16 + A0,A1 = 01 + A0。
3由于在ac-af这个”区“中gb2312是没有定义的。所以我估计你的编码是gbk或者是gb18030
4当$c = 215 即 $c = 0xd7的时候:由于gbk在这个“区”中有几个“位”(fa-fe)是没用到的。
5你看看gbk的编码表就什么都明白了!!
function random($len) {
$srcstr = "1a2s3d4f5g6hj8k9l0qwertyuiopzxcvbnm"; //后面只取了0-10共11个字符,所以第12个字符以后都是多余的
mt_srand(); //这里执行一次就是在浪费国家粮食
$strs = ""; //给$strs赋一个空值,后面使用$strs=的时候才不会报错
for ($i = 0; $i < $len; $i++) { //$len为4的时候,明明就循环了4次,你为什么说是3次
$strs = $srcstr[mt_rand(0, 10)];//这里的随机数与上面的没有关系
}
return $strs;
}
$ch=range('A','G');//字母从A-G
$num=range(0,9);//数字从0-9
$x=$ch[mt_rand(0,6)]$num[mt_rand(0,8)];//这样获得第一个随机坐标$x,其他坐标一样方法
$y=$ch[mt_rand(0,6)]$num[mt_rand(0,8)];
$z=$ch[mt_rand(0,6)]$num[mt_rand(0,8)];
$charactors = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
shuffle($charactors);
function GetCharactors($samples, $levels, $times, $result = array()) {
$temp = array();
for ($i = 0; $i < $times; $i++) {
$temp[] = array_shift($samples);
}
$result[$levels] = implode('', $temp);
$levels--;
if ($levels > 0) {
shuffle($samples);
$result = GetCharactors($samples, $levels, $times, $result);
}
return $result;
}
print_r(GetCharactors($charactors, 5, 4));
以上就是关于随机产生中文字符的PHP语句理解不了全部的内容,包括:随机产生中文字符的PHP语句理解不了、看不懂下面PHP随机输出字符串的过程、怎么用php随机生成3组 类似 A3 F8 D4 的三组随机坐标 字母和数字都有限制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)