web-dev-qa-db-fra.com

Générer un code de couleur hexagonal aléatoire avec PHP

Je travaille sur un projet où je dois générer un nombre indéfini de codes de couleur aléatoires et hexadécimaux… comment pourrais-je créer une telle fonction en PHP?

56
joshdcomp

Obtenez un nombre aléatoire de 0 à 255, puis convertissez-le en hexadécimal:

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();
83
Galen

Une chaîne hexadécimale RVB est juste un nombre compris entre 0x0 et 0xFFFFFF. Il vous suffit donc de générer un nombre compris dans cette plage et de le convertir en hexadécimal:

function Rand_color() {
    return '#' . str_pad(dechex(mt_Rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
}

ou:

function Rand_color() {
    return sprintf('#%06X', mt_Rand(0, 0xFFFFFF));
}
112
outis

vous pouvez utiliser md5 à cette fin, très court

$color = substr(md5(Rand()), 0, 6);
44
Notepad
$Rand = str_pad(dechex(Rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT);
echo('#' . $Rand);

Vous pouvez modifier Rand() dans pour mt_Rand() si vous le souhaitez et vous pouvez placer strtoupper() autour de str_pad() pour rendre le nombre aléatoire plus agréable (bien que ce ne soit pas obligatoire).

Cela fonctionne parfaitement et est bien plus simple que toutes les autres méthodes décrites ici :)

29
Cas Bloem

Les couleurs hexadécimales valides peuvent contenir de 0 à 9 et de A à F. Par conséquent, si nous créons une chaîne avec ces caractères, puis que nous les mélangeons, nous pouvons saisir les 6 premiers caractères pour créer un code de couleur hexagonal aléatoire. Un exemple est ci-dessous!

code

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

J'ai testé cela dans une boucle while et généré 10 000 couleurs uniques.

code utilisé pour générer 10 000 couleurs uniques:

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

Ce qui m'a donné ces couleurs aléatoires comme résultat.


outis a souligné que mon premier exemple ne pouvait pas générer d'hexadécimaux tels que '4488CC', j'ai donc créé une fonction capable de générer des hexadécimaux de ce type.

code

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

echo randomHex();

Le deuxième exemple serait préférable car il peut donner des résultats beaucoup plus différents que le premier, mais si vous ne générez pas beaucoup de codes de couleur, le premier exemple fonctionnerait parfaitement.

13
Jake
$color = sprintf("#%06x",Rand(0,16777215));
9
Cas Bloem

Chemin le plus court:

echo substr(uniqid(),-6); // result: 5ebf06
7
Cyril

A partir de PHP 5.3, vous pouvez utiliser openssl_random_pseudo_bytes () :

$hex_string = bin2hex(openssl_random_pseudo_bytes(3));
3
danorton

Je pense que ce serait bien ainsi que toutes les couleurs soient disponibles

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

C'est comme ça que je le fais.

<?php echo 'rgba('.Rand(0,255).', '.Rand(0,255).', '.Rand(0,255).', 0.73)'; ?>
1
Jeeva
function random_color(){  
 return sprintf('#%06X', mt_Rand(0, 0xFFFFFF));
}
0
Shaz

Les couleurs Web sécurisées ne sont plus nécessaires (ni même un concept valable) car même les appareils mobiles ont désormais une couleur de 16 bits ou plus.

Voir Wikipedia pour plus d'informations.

En d'autres termes, utilisez n'importe quelle couleur de # 000000 à #FFFFFF.

edit: Chers bas électeurs. Vérifiez d'abord l'historique de la question.

0
ceejayoz

Si quelqu'un veut générer des couleurs claires 

sprintf('#%06X', mt_Rand(0xFF9999, 0xFFFF00));
0
MudithaE