Je suis confronté à cette situation où j'ai une pièce d'identité qui provient d'une base de données (il peut donc être de 1, 100, 1000, ...) et je dois générer des couleurs aléatoires, mais l'égalité d'identification égale devrait entraîner la même chose. couleur. p>
Toute suggestion sur la façon dont je peux y parvenir? p>
Merci! P>
4 Réponses :
L'approche évidente consiste à convertir l'identifiant en une couleur (par exemple, les 8 bits inférieurs sont le bleu, les 8 bits suivants sont verts, les 8 suivants sont rouges - laissez 8 bits, mais je suis sûr que vous pouvez comprendre cela; -) p>
En supposant que cela ne fonctionne pas (parce que vous vous retrouvez avec une horrible palette de couleurs: Utilisez une matrice (ou une table de hachage) pour créer une cartographie des identifiants aux couleurs. P>
Si vous craignez qu'il y ait trop d'identifiants, vous pouvez appliquer un hash à l'ID et l'utiliser comme vous avez la clé de la cartographie «ID à la couleur». Dans ce cas, vous disez efficacement qu'un identifiant a toujours une couleur, mais une couleur peut être utilisée par de nombreux identifiants. P>
Utilisez un hachage cryptographique et clipez les octets dont vous n'avez pas besoin: le résultat ( code pour générer ) ressemble à ceci pour les chiffres 0-20: p> p> p>
<?php // someting like this? $randomString = md5($your_id_here); // like "d73a6ef90dc6a ..." $r = substr($randomString,0,2); //1. and 2. $g = substr($randomString,2,2); //3. and 4. $b = substr($randomString,4,2); //5. and 6. ?> <style> #topbar { border-bottom:4px solid #<?php echo $r.$g.$b; ?>; } </style>
Si la matrice est toujours triée, vous pouvez utiliser cette algorythm jusqu'à 250 éléments:
<?php function getRGBColorString( $array ) { $indexColor = round( 250 / count( $array ) ); $iterator = 1; $arrayOfRGB = array(); foreach( $array as $item) { $arrayOfRGB[] = "rgb(" . ( $indexColor * $iterator ) . ", 113, 113 )"; $iterator++; } return $arrayOfRGB; } ?>
Avez-vous un code (ou un pseudocode) écrit jusqu'à présent?
Qu'en est-il de la fractionnement du peu? Bit0-> bit7 de r, bit1-> bit7 de g, bit2-> bit7 de b, bit3-> bit6 de r, ... pendant que cela est compliqué, il donne des couleurs très différentes, tant que l'espace d'identification n'est pas trop grand.