使用PHP生成随机十六进制颜色代码

jos*_*omp 70 php hex

我正在开发一个项目,我需要生成一个未定义数量的随机,十六进制颜色代码......我将如何在PHP中构建这样的函数?

out*_*tis 126

RGB十六进制字符串只是从0x0到0xFFFFFF的数字,因此只需在该范围内生成一个数字并将其转换为十六进制:

function rand_color() {
    return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
}
Run Code Online (Sandbox Code Playgroud)

要么:

function rand_color() {
    return sprintf('#%06X', mt_rand(0, 0xFFFFFF));
}
Run Code Online (Sandbox Code Playgroud)


Gal*_*len 93

获取0到255之间的随机数,然后将其转换为十六进制:

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();
Run Code Online (Sandbox Code Playgroud)

  • 实际上这种方法是所有答案中最慢的,最后2个答案快300%(我测试它生成并输出2500个表格单元格); (7认同)
  • @aleation - 比.005秒快300%!大!但是说真的,使用最可读的东西.不要超过.00007秒.(不是说我的最可读) (3认同)

Not*_*pad 49

你可以使用md5来实现这个目的,非常简短

$color = substr(md5(rand()), 0, 6);
Run Code Online (Sandbox Code Playgroud)

  • 没有参数,`rand()`在某些平台(包括Windows,根据[文档](http://php.net/rand))不会返回大于32767的数字.除此之外,使用`md5()`没有优点和一些缺点,而不是简单地将数字转换为十六进制,即`md5()`可能不会产生规则分布(一些十六进制字符串可能比其他字符串更频繁地出现). (8认同)

Cas*_*oem 31

$rand = str_pad(dechex(rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT);
echo('#' . $rand);
Run Code Online (Sandbox Code Playgroud)

您可以更改rand()mt_rand(),如果你愿意,你可以把strtoupper()周围的str_pad()使随机数看起来更好(尽管它不是必需的).

它完美地工作,并且比这里描述的所有其他方法更简单:)


Jak*_*ake 14

有效的十六进制颜色可以包含0到9和A到F,所以如果我们创建一个包含这些字符的字符串然后随机播放,我们可以抓取前6个字符来创建随机的十六进制颜色代码.一个例子如下!

echo '#' . substr(str_shuffle('ABCDEF0123456789'), 0, 6);
Run Code Online (Sandbox Code Playgroud)

我在一个while循环中测试了它并生成了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;
   }
}
Run Code Online (Sandbox Code Playgroud)

这给了我这些随机颜色的结果.


outis指出我的第一个例子不能生成像'4488CC'这样的十六进制,所以我创建了一个能够生成类似十六进制的函数.

function randomHex() {
   $chars = 'ABCDEF0123456789';
   $color = '#';
   for ( $i = 0; $i < 6; $i++ ) {
      $color .= $chars[rand(0, strlen($chars) - 1)];
   }
   return $color;
}

echo randomHex();
Run Code Online (Sandbox Code Playgroud)

第二个例子会更好用,因为它可以返回比第一个例子更多不同的结果,但如果你不打算生成很多颜色代码,那么第一个例子就可以了.


Cas*_*oem 9

$color = sprintf("#%06x",rand(0,16777215));
Run Code Online (Sandbox Code Playgroud)


Cyr*_*ril 8

最短的方式:

echo substr(uniqid(),-6); // result: 5ebf06
Run Code Online (Sandbox Code Playgroud)

  • 这将无法使用超过1种颜色,因为时间将是相同的,uniqid()也会如此。“ uniqid()函数根据微时间(当前时间以微秒为单位)生成唯一的ID。”对于那些想一次生成一种以上颜色的人来说。 (3认同)

Jee*_*eva 5

这就是我的方法。

<?php echo 'rgba('.rand(0,255).', '.rand(0,255).', '.rand(0,255).', 0.73)'; ?>
Run Code Online (Sandbox Code Playgroud)


小智 5

如果有人想产生浅色

sprintf('#%06X', mt_rand(0xFF9999, 0xFFFF00));
Run Code Online (Sandbox Code Playgroud)