Я довольно много проверил другие вопросы, и я все еще не уверен в этом вопросе.
Вот мой случай использования:
У меня есть онлайн-корзина. Иногда некоторые клиенты находят процесс заказа либо слишком утомительным, либо есть некоторые клиенты, которым онлайн-заказ не подходит, и им нужна фактическая оценка (расценка) в формате PDF, чтобы купить продукт.
Поэтому я написал модуль, который берет содержимое корзины покупок и аккуратно оформляет ее в виде оценки в формате PDF.
Теперь, поскольку в этом процессе используется только содержимое корзины, и больше ничего не используется, даже база данных, мне нужно создать уникальный номер оценочного документа, чтобы, если клиент заплатит за предложение, у него была ссылка для использования в платеже. инструкция.
Корзина покупок в настоящее время генерирует 5-значный идентификатор корзины, уникальный для каждого клиента в зависимости от его сеанса. Я взял этот 5-значный идентификатор корзины, а затем добавил к нему время UNIX, что дает мне красивое длинное число для использования в качестве номера оценочного документа.
Итак, я получаю что-то вроде этого: 363821482812537 [36382 — это идентификатор корзины, а 1482812537 — время unix на момент создания оценки PDF]
Проблема в том, что он слишком длинный и БУДЕТ проблемой, так как ссылки на банковские платежи ограничены. В идеале я хотел бы сохранить его до 10 символов или меньше.
Я решил взглянуть на CRC32, чтобы сократить сгенерированные оценочные числа, и, похоже, он способен сократить оценочное число до приемлемого количества символов.
Но может ли кто-нибудь пролить свет на то, с каким столкновением я могу столкнуться?
Несколько вещей, которые следует учитывать:
Идентификатор корзины всегда будет состоять из 5 цифр.
Время Unix всегда будет состоять из 10 цифр до 2286 года.
[Таким образом, у нас всегда будет 15 цифр, которые нужно закодировать, и не более]
Существует гарантия того, что если по какой-то причине возникает дубликат, выдается ошибка, и предоставляется возможность повторить попытку и сгенерировать оценку. Это делается путем сохранения оценки в имя файла, совпадающее с номером оценки (или, в данном случае, хэш CRC32 номера оценки), а затем сначала проверяется, существует ли имя файла с таким хэшем.
На данный момент клиентам не будет разрешено самостоятельно генерировать оценки по причинам, не важным для моего вопроса. Таким образом, только администраторы могут генерировать оценки.
Меня беспокоит простой вопрос: буду ли я очень часто сталкиваться с коллизиями с моей 15-значной хеш-кодировкой CRC32, или коллизии будут возникать довольно редко?