Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Генерировать String с длиной 6


Автор: Muerto 25.1.2011, 16:18
Хотелось бы генерировать String длиной 6, что бы был уникален и не пришлось сверять с базой...

Должен состоять из крупных и маленьких букв...

Есть идея присвоить каждой цифре в  timestamp букву можно будет что то уникальное таки даже без рандомации выдавать, что думайте?

Надо будет продумать конечно ибо длину я хочу короткую так что это будет алгоритм который на пару цифр наверно даже свою букву давать будет...

Так же ещё одна проблема это что в базе данных поиск идет как бы не case sensitive поэтому если aaaaaa или AAAAAA по сути может найти по запросу aaaaaa Эти обе записи, если ставить varchar (надо binary?)и тп... но с другой стороны можно в md5 катать... но это уже мой тупизм что я что то упускаю, не хотелось бы конвертировать в md5

Автор: skyboy 25.1.2011, 16:32
Цитата(Muerto @  25.1.2011,  15:18 Найти цитируемый пост)
Есть идея присвоить каждой цифре в  timestamp букву

в течение одной секунды вполне могут быть несколько запросов.
проще rand() + преобразование из десятичной системы в, скажем, 36-ричную(для записи используется 26 букв и 10 цифр). итого в 6 символов умещаются 36^6 ~ 2.2 млрд комбинаций
а чтоб обеспечить уникальность, поставить в БД уникальный индекс. и только если вставка обломилась(такое значение уже есть) - генерировать новое значение.

Автор: Muerto 25.1.2011, 16:53
skyboy, Ну можно брать в учет микро секунды  smile 
Если есть хоть какой то шанс что в базе оно есть, меня это не устраивает, ибо я тогда могу генерировать пока такого не будет в базе ( и я уверен что больше раза за тысячу запросов такого не будет), а эт не интересно 

Сейчас дела есть, позже возьму придумаю как таки micro time превратить в уникальный String длиной 6

Что то я сейчас в сторону хекса децималки подумал , точно ща не помню какая длинна у timstamp + micro но допустим

14246547987654323

будет

329 D28 F01 46 6B 4

А дальше уже какие то вычисления сделать , и будет то что нужно  smile 

Хотя не, надо что то посложней брать мне в помощь http://www.php.net/manual/en/function.base-convert.php и ваш совет  smile 

Но может и тупо игра с uniqid()





Автор: skyboy 25.1.2011, 17:33
http://www.php.net/manual/en/function.uniqid.php#96898

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)