Как я могу создать уникальный 7-значный код для объекта? - PullRequest
10 голосов
/ 11 февраля 2010

Когда пользователь добавляет новый элемент в мою систему, я хочу создать уникальный не приращающийся псевдослучайный 7-значный код для этого элемента.Количество созданных элементов будет исчисляться только тысячами (<10 000). </p>

Поскольку он должен быть уникальным и никакие два элемента не будут иметь одинаковую информацию, я мог бы использовать хеш, но это должен бытькод, которым они могут поделиться с другими людьми - отсюда и 7 цифр.

Моя первоначальная мысль заключалась в том, чтобы просто зациклить генерацию случайного числа, убедиться, что оно еще не использовалось, и, если оно было, промыть и повторить,Я думаю, что это разумное, если неприятное решение, учитывая низкую вероятность столкновений.

Ответы на на этот вопрос предлагают создать список всех неиспользуемых чисел и перемешать их.Возможно, я мог бы сохранить такой список в базе данных, но мы говорим 10 000 000 записей о чем-то относительно редком.

У кого-нибудь есть лучший способ?

Ответы [ 11 ]

0 голосов
/ 11 февраля 2010

Имея в базе данных только тысячи предметов, ваша оригинальная идея кажется здравой. Проверка наличия значения в отсортированном (проиндексированном) списке из нескольких десятков тысяч элементов потребует лишь нескольких выборок и сравнений данных.

Предварительная генерация списка не является хорошей идеей, потому что вы либо будете хранить гораздо больше чисел, чем необходимо, либо вам придется иметь дело с их исчерпанием.

...