у меня два одинаковых гуида было, вероятность тоже, казалось бы, невероятная. 8 миллиардов генераций (точнее строк), и два все таки нашлось
пишем свой уник PHP: <?php function myuniqid(){ static $uarr; if(!$uarr) $uarr=array(); do{ $res=uniqid("",true); }while(in_array($res,$uarr)); $uarr[]=$res; return $res; } на подобии можно и uniqid переписать. правда память может улететь =)
хотя вот это Код (Text): #if HAVE_USLEEP && !defined(PHP_WIN32) if (!more_entropy) { #if defined(__CYGWIN__) php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must use 'more entropy' under CYGWIN"); RETURN_FALSE; #else [i][u][b]usleep(1); [/b][/u][/i] #endif } не пойму что за условие, но вроде как для этого дела
Psih Тебе придется делать запрос в базу, потому что "код ваучера должен быть случайным". Если ты делаешь код ваучера таким, что не требуется его проверка на дубликат - значит его номер уже не случайный. Самое простое - простейшая генерилка "паролей" на 4-6 символов (рандом индекса в массиве с занесенными заранее символами) + текущее время. От этого md5(), обрезать и проверить в базе. Хеш нынче быстр, рандомилка паролей тоже (ну эт как напишешь), время - соль.
Как сделал то в итоге? У меня сейчас похожая задача, продажа билетов, надо генерить случайный код на каждую покупку, 5-8 символов максимум, что бы не трудно было читать с листа.
ideea Если покупки живут недельку - можешь вобще не париться. Ни менеджеры ни покупатели не спутаются.
Буквы большие и маленькие - или только одни какие-то? Даже если одни какие-то + цифры = 78 364 164 096 комбинаций. Нифига себе! Что еще нужно отцу русской демократии?
Планируемое кол-во - около 5-ти тысяч в месяц, если просто генерить и сравнивать с базой, что будет, когда база будет большая? Пара решений есть, буду пробовать.
воэпервых при таких объемах и 7 знаках можно генерить и НЕ сравнивать уже ни с чем никогда. во-вторых - сгенерируте один раз кучищу уников и суньте в файл. читайте из него по чуть-чуть. одного миллиона хватит на 10-20 лет, а это файл всего на 7 мегабайт не ищите проблемы там где их нет