Генерация буквенно-цифровых идентификаторов (уникальных строк) - PullRequest
1 голос
/ 05 октября 2010

Как можно генерировать буквенно-цифровые идентификаторы в PHP или AS3 и т. Д. Вместо классического числового идентификатора с автоматическим увеличением.

YouTube использует это для своих идентификаторов видео, например. Facebook генерирует длинные буквенно-цифровые строки для имен загружаемых изображений и т. Д.

EDIT: Это не то, как я генерирую строки как таковые, а как я генерирую уникальные строки, такие как столбец auto_increment в столбце MySQL.

Ответы [ 4 ]

1 голос
/ 05 октября 2010

AS3

import mx.utils.UIDUtil; 
var uuid:String = UIDUtil.createUID()

PHP

$unique = md5( uniqid() );  // 32 characters long
$unique = sha1( uniqid() );  // 40 characters long
1 голос
/ 05 октября 2010

Чтобы гарантировать уникальность, вам нужно предоставить идентификатор на стороне сервера.Тогда это может быть, например, ячейка MySQL, которую вы используете, чтобы получить следующий номер.Если у вас есть 64-битное число, вы также можете сгенерировать число при загрузке страницы независимо от того, нужен ли в конце уникальный идентификатор или нет, если вам нужно, чтобы он всегда был встроен в файл JavaScript.Затем, если пользователь, например, сохраняет данные, вы можете сохранить предоставленный идентификатор.Вам не нужно хранить неиспользуемые идентификационные номера до тех пор, пока вы убедитесь, что счетчик надежно увеличивается, поэтому для использования MySQL вам просто нужна одна ячейка, которая всегда увеличивается в дополнение к фактическим данным, которые вы сохраняете.

С 64 битами у вас никогда не закончатся идентификаторы, и вы можете изменить порядок битов, если хотите, чтобы они были менее предсказуемыми, чем будет следующий идентификатор.Если требуется какой-либо тип защиты, вам следует больше обратить внимание на отображение 1: 1 из бегущих чисел в менее предсказуемые.

Что касается места хранения возрастающего числа, то оно может быть строкой в ​​любой базе данных SQL.или простой текстовый файл, если вы обрабатываете блокировку, или если у вас всегда есть программа, работающая на сервере, вы можете общаться с ней, используя любой вид IPC для получения новых номеров.Просто убедитесь, что если сервер перезагрузится, последовательность продолжится хотя бы от того места, где он был оставлен.

1 голос
/ 05 октября 2010

Лучший способ для уникальности - объединить текущее время / дату в миллисекундах со случайным числом. Взгляните на UUID s

http://en.wikipedia.org/wiki/Universally_unique_identifier

они не похожи на струны на YouTube, но они уникально уникальны

1 голос
/ 05 октября 2010

В PHP вы можете использовать base_convert , чтобы перейти к большей числовой базе (до 36, формат будет 0-9a-z, с равным 10 и т. Д.).

С уважением, Алин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...