Генерация случайного шестнадцатеричного цветового кода с помощью PHP - PullRequest
61 голосов
/ 11 апреля 2011

Я работаю над проектом, в котором мне нужно сгенерировать неопределенное количество случайных шестнадцатеричных цветовых кодов ... как бы мне построить такую ​​функцию в PHP?

Ответы [ 13 ]

120 голосов
/ 28 марта 2012

Шестнадцатеричная строка RGB - это просто число от 0x0 до 0xFFFFFF, поэтому просто сгенерируйте число в этом диапазоне и преобразуйте его в шестнадцатеричное:

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));
}
88 голосов
/ 11 апреля 2011

Получить случайное число от 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();
46 голосов
/ 09 августа 2012

Вы можете использовать md5 для этой цели, очень короткий

$color = substr(md5(rand()), 0, 6);
29 голосов
/ 23 сентября 2014
$rand = str_pad(dechex(rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT);
echo('#' . $rand);

Вы можете изменить rand() на mt_rand(), если хотите, и можете поставить strtoupper() вокруг str_pad(), чтобы случайное число выглядело лучше (хотя это и не требуется).

Он работает отлично и намного проще, чем все другие методы, описанные здесь:)

13 голосов
/ 12 августа 2015

Допустимые шестнадцатеричные цвета могут содержать от 0 до 9 и от A до F, поэтому, если мы создадим строку с этими символами, а затем перемешаем ее, мы можем получить первые 6 символов, чтобы создать случайный шестнадцатеричный код цвета.Ниже приведен пример!

код

echo '#' . substr(str_shuffle('ABCDEF0123456789'), 0, 6);

Я проверил это в цикле while и сгенерировал 10000 уникальных цветов.

кодРаньше я генерировал 10000 уникальных цветов:

$colors = array();
while (true) {
   $color          = substr(str_shuffle('ABCDEF0123456789'), 0, 6);
   $colors[$color] = '#' . $color;
   if ( count($colors) == 10000 ) {
      echo implode(PHP_EOL, $colors);
      break;
   }
}

, что дало мне эти случайные цвета в результате.


из них указывал, что мойВ первом примере не удалось сгенерировать шестнадцатеричные числа, такие как '4488CC', поэтому я создал функцию, которая могла бы генерировать шестнадцатеричные числа, подобные этой.

код

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

echo randomHex();

Второй пример лучше использовать, потому что он может вернуть намного больше результатов, чем первый, но если вы не собираетесь генерировать много цветовых кодов, тогда первый пример будет работать просто отлично.

9 голосов
/ 23 сентября 2014
$color = sprintf("#%06x",rand(0,16777215));
7 голосов
/ 12 августа 2016

Кратчайший путь:

echo substr(uniqid(),-6); // result: 5ebf06
3 голосов
/ 31 марта 2017

Вот как я это делаю.

<?php echo 'rgba('.rand(0,255).', '.rand(0,255).', '.rand(0,255).', 0.73)'; ?>
3 голосов
/ 28 февраля 2014

Начиная с PHP 5.3, вы можете использовать openssl_random_pseudo_bytes () :

$hex_string = bin2hex(openssl_random_pseudo_bytes(3));
1 голос
/ 10 января 2018
function random_color(){  
 return sprintf('#%06X', mt_rand(0, 0xFFFFFF));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...