→

JavaScript программирование →  JS Функция для получения случайного цвета

Столкнулся с необходимостью получения случайного цвета в Java Script.

Задача была сделать логотип на сайте Антилебедева, как в оригинале.

Нашел одно решение, которое достойно говнокода.

Так же нашлось более изящное решение.

// @format (hex|rgb|null) : Format to return, default is integer
function random_color(format)
{
 var rint = Math.round(0xffffff * Math.random());
 switch(format)
 {
  case 'hex':
   return ('#0' + rint.toString(16)).replace(/^#0([0-9a-f]{6})$/i, '#$1');
  break;
 
  case 'rgb':
   return 'rgb(' + (rint >> 16) + ',' + (rint >> 8 & 255) + ',' + (rint & 255) + ')';
  break;
 
  default:
   return rint;
  break;
 }
}


Ну, если нужен только HEX, то можно вот так:

(Math.round(0xFFFFFF * Math.random()).toString(16) + "000000").replace(/([a-f0-9]{6}).+/, "#$1").toUpperCase();
0

Говнокод →  JS Функция для получения случайного цвета


<script language="Javascript">
<!--
function genHex(){
colors = new Array(14)
colors[0]="0"
colors[1]="1"
colors[2]="2"
colors[3]="3"
colors[4]="4"
colors[5]="5"
colors[5]="6"
colors[6]="7"
colors[7]="8"
colors[8]="9"
colors[9]="a"
colors[10]="b"
colors[11]="c"
colors[12]="d"
colors[13]="e"
colors[14]="f"

digit = new Array(5)
color=""
for (i=0;i<6;i++){
digit[i]=colors[Math.round(Math.random()*14)]
color = color+digit[i]
}
document.getElementById('hexc').style.backgroundCo lor=color
document.getElementById('hexn').innerText="#"+color
}
//-->
</script>
 


Нормальное решение здесь
0

PHP программирование →  Как работает rand?

Столкнулся с задачкой генерации логинов. Недолго думая была написана такая функция:


private function _get_login() {
       
        $login = "";                           
        for( $i=0; $i<=9; $i++ ) {

                $login .= chr( rand( 97, 122 ) );
        }
        return $login;
}
 


Которая по моему скромному мнению должна была генерировать уникальные логины, которые живому человеку придумать тяжело. Упор ставился именно на уникальность.
Если посчитать, количество таких логинов примерно 141167095653376. Логины генерировались и вставлялись в БД. Каково же было моё удивление когда после генерации примерно 1000 логинов посыпались ошибки добавления в базу при срабатывании констрейнтов не уникальности данных. Причем ошибки не единичные, а десятки логинов подряд вылетали. Начал исследовать — выяснилось эта функция действительно генерирует повторяющиеся логины=\. Как такое может быть, что бы последовательности из 10 случайных чисел совпадали так часто? Ответа на этот вопрос так и не нашел. Перешел на использование функции mt_rand(), которая работает в 4 раза быстрее обычной rand(), имеет какие-то известные гарантированные характеристики работы(в отличии от rand()) и добавил элементарную проверку.
Получилось так:


private function _get_login() {
       
       
        $done = false;
        while( !$done ) {
               
                $login = "";                           
                for( $i=0; $i<=9; $i++ ) {

                        $login .= chr( mt_rand( 97, 122 ) );
                }
                $sql = "SELECT count(*) FROM users WHERE login='$login'";
                if($this->db->fetchRow( $sql ) == 0)
                        $done = true;
        }
       
        return $login;
}
 


Может у вас будут идеи по усовершенствованию алгоритма генерации логинов что бы они удовлетворяли следующим условиям:
-более-менее удобочитаемы, а не что-то невнятное вида qlgkakxwci
-более-менее уникальные — что-то типа qlgkakxwci =)

Спасибо за внимание.
1
10