用PHP生成一个随机的hex颜色代码
我正在一个项目中,我需要生成一个随机的hex颜色代码的未定义数量…我将如何去在PHP中build立这样的function?
从0到255获取一个随机数,然后将其转换为hex:
function random_color_part() { return str_pad( dechex( mt_rand( 0, 255 ) ), 2, '0', STR_PAD_LEFT); } function random_color() { return random_color_part() . random_color_part() . random_color_part(); } echo random_color();
RGBhexstring只是一个从0x0到0xFFFFFF的数字,因此只需在该范围内生成一个数字并将其转换为hex:
function rand_color() { return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT); }
要么:
function rand_color() { return sprintf('#%06X', mt_rand(0, 0xFFFFFF)); }
你可以使用md5来达到这个目的,很简短
$color = substr(md5(rand()), 0, 6);
$rand = dechex(rand(0x000000, 0xFFFFFF)); echo('#' . $rand);
如果你愿意的话,你可以改变mt_rand的rand,你可以在dechex周围加上strtoupper()来使得随机数看上去更好(尽pipe这不是必须的)。 那看起来像$rand = strtoupper(dechex(rand(0x000000, 0xFFFFFF)));
它完美的工作,比这里描述的所有其他方法更简单:)
$color = sprintf("#%06x",rand(0,16777215));
有效的hex颜色可以包含0到9和A到F,所以如果我们用这些字符创build一个string,然后洗牌,我们可以抓住前6个字符来创build一个随机的hex颜色代码。 下面是一个例子!
码
echo '#' . substr(str_shuffle('ABCDEF0123456789'), 0, 6);
我在一个while循环中testing了这个,并生成了10,000个独特的颜色。
我用来生成10,000种独特颜色的代码:
$colors = array(); while (true) { $color = substr(str_shuffle('ABCDEF0123456789'), 0, 6); $colors[$color] = '#' . $color; if ( count($colors) == 10000 ) { echo implode(PHP_EOL, $colors); break; } }
这给了我这些随机的颜色作为结果。
outis指出,我的第一个例子不能生成像“4488CC”这样的hex,所以我创build了一个能够生成这样的hex的函数。
码
function randomHex() { $chars = 'ABCDEF0123456789'; $color = '#'; for ( $i = 0; $i < 6; $i++ ) { $color .= $chars[rand(0, strlen($chars) - 1)]; } return $color; } echo randomHex();
第二个例子会更好用,因为它可以比第一个例子返回更多不同的结果,但是如果你不会产生很多的颜色代码,那么第一个例子就可以正常工作。
最短path:
echo substr(uniqid(),-6); // result: 5ebf06
从PHP 5.3开始,可以使用openssl_random_pseudo_bytes() :
$hex_string = bin2hex(openssl_random_pseudo_bytes(3));
这是我如何做到这一点。
<?php echo 'rgba('.rand(0,255).', '.rand(0,255).', '.rand(0,255).', 0.73)'; ?>
Web安全的颜色不再是必要的(甚至不是一个有效的概念),因为即使移动设备现在也有16位以上的颜色。
请参阅维基百科了解更多信息。
换句话说,使用#000000到#FFFFFF的任何颜色。
编辑:亲爱的downvoters。 首先检查问题的编辑历史logging。