Пишу API для онлайн-игры. Требуется сгенерировать токен игрока из 30 знаков (только цифры и английские буквы). Как это сделать правильно и быстро?
Для начала как не надо делать. Не используйте для генерации mt_rand() или тем более rand() если вам нужны уникальные строки.
Идеологически более правильный подход - чтение исходной "энтропии" из /dev/random или /dev/urandom. Их конечно же нету в Windows, но я надеюсь вы не станете хостить проект на PHP в Windows (для этой оси есть более подходящая платформа). Для теста можно сделать и заглушку на mt_rand().
Еще более надежный вариант random_bytes() (но он есть только начиная с PHP7) или openssl_random_pseudo_bytes() (5.3+)
Чтобы получить нужные вам символы, можно:
перевести исходную строку байт из системы счисления 256 в систему счисления с нужным вам алфавитом. Этот вариант не потеряет характеристики распределения исходной строки, но немного сложнее в реализации;
перевести грубым сопоставлением 1байт - 1символ. Допустим для вашего варианта (цифры и буквы) можно брать остаток от деления каждого байта на 36 (это количество символов в вашем алфавите) и по полученному индексу брать символ из набора допустимых (это может быть строка из цифр и букв, или пара if'ов). При этом варианте вероятность появления разных символов будет неравномерной, но это может оказаться не важно;
отказаться от варианта цифры и все английские буквы и оставить только [0-9a-f] - то есть просто перевести строку в шестнадцатеричный вид. Также сохранятся характеристики "случайности", но это несколько противоречит вашим исходным условиям.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости