Создание случайного шестнадцатеричного цветового кода с помощью PHP

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

Получите случайное число от 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(); 

Строка RGB hex – это всего лишь число от 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)); } 

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

 $color = substr(md5(rand()), 0, 6); 
 $rand = dechex(rand(0x000000, 0xFFFFFF)); echo('#' . $rand); 

Вы можете изменить rand in для mt_rand, если хотите, и можете поместить strtoupper () вокруг dechex, чтобы сделать случайное число более приятным (хотя это и не требуется). Это будет выглядеть как $rand = strtoupper(dechex(rand(0x000000, 0xFFFFFF)));

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

 $color = sprintf("#%06x",rand(0,16777215)); 

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

код

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

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

код, который я использовал для создания 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», поэтому я создал функцию, которая могла бы генерировать такие шестнадцатеричные элементы.

код

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

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

Самый короткий путь:

 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)'; ?> 

Веб-безопасные цвета больше не нужны (даже не действительная концепция, даже), поскольку в наши дни даже мобильные устройства имеют 16-битный цвет.

См. Википедию для получения дополнительной информации.

Другими словами, используйте любой цвет от # 000000 до #FFFFFF.

Редактировать: Уважаемые downvoters. Сначала проверьте историю изменений для вопроса.

Я думаю, что это будет хорошо, а также получит любой цвет

 $color= substr(str_shuffle('AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899'), 0, 6);