使用javascript也可以生成十六进制随机数,但是稍有些复杂。JavaScript中不能直接将十进制数转为十六进制,需要手动进行转换。首先使用Math.random()函数生成0~15之间的随机数,然后使用Math.ceil()函数将随机数取整,接下来就要逐次判断该值,如果该值大于9,那么将10~15的数一一对应转换为a、b…,一直到f。转换完成后,将值累加,最后传给valcode.php页。
使用JavaScript生成十六进制随机数的完整代码如下:
//生成随机数
function showval(){ num = ‘‘; for(i=0;i<4;i++){//循环输出四位验证码 tmp = Math.ceil((Math.random() * 15));//取出一位十六进制的整数 if(tmp > 9){//依次判断随机数 switch(tmp){ case(10)://如果随机数等于10,换为a num += ‘a‘; break; case(11): num += ‘b‘;//如果随机数等于11,换为b break; case(12): num += ‘c‘;//如果随机数等于12,换为c break; case(13): num += ‘d‘;//如果随机数等于13,换为d break; case(14): num += ‘e‘;//如果随机数等于14,换为e break; case(15): num += ‘f‘;//如果随机数等于15,换为f break; } }else{ num += tmp; } } $(‘chkid‘).src=‘valcode.php?num=‘+num;//将生成的随机数传给图像生成页 $(‘chknm‘).value = num;//将随机数的值保存到页面的隐藏域中 }
附上图像生成页代码(实现的功能是验证码)
<?php header("content-type:image/png"); //设置页面编码 $num = $_GET[‘num‘]; //获取超级链接传递的随机数 $imagewidth=60; //定义画布的宽 $imageheight=18; //定义画布的高 $numimage = imagecreate($imagewidth,$imageheight); //创建画布 imagecolorallocate($numimage,240,240,240); //设置画布颜色分别是红,绿,黄 for($i=0;$i<strlen($num);$i++){ //循环读取随机数 $x = mt_rand(1,8)+$imagewidth*$i/4; $y = mt_rand(1,$imageheight/4); $color=imagecolorallocate($numimage,mt_rand(0,150),mt_rand(0,150),mt_rand(0,150)); //定义图像的颜色 imagestring($numimage,5,$x,$y,$num[$i],$color); //将随机数写入到画布中 } for($i=0;$i<200;$i++){ //for循环语句生成干扰线 $randcolor=imagecolorallocate($numimage,rand(200,255),rand(200,255),rand(200,255)); //定义颜色 imagesetpixel($numimage,rand()%70,rand()%20,$randcolor); //生成干扰线 } imagepng($numimage); //生成图像 imagedestroy($numimage); //释放资源 ?>