Тайный смысл номеров заказов в ресторанах быстрого питания

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

Задача

Сделать генерацию номеров заказов. Казалось бы, легче задачи не придумаешь 😒😒😒

Берем ноль и начинаем прибавлять к нему единичку, чисел на всех хватит: ты — будешь первым, следующий — будешь вторым и так далее. Но как говорил один мудрый человек: «Программисты пишут код, а инженеры делают жизнь проще». Так что соберем требования, которым должен соответствовать наш сгенерированный номер.

Требования

🤯 Простота и понятность

Номер заказа должен быть коротким, легко запоминаться и произноситься. Не должно существовать двух похожих номеров.

🍒 Уникальность

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

⏰ Предсказуемость

Ожидая в зале и смотря на монитор с номерами заказов клиент должен иметь примерное представление, как скоро его заказ будет готов. Например, если мой номер 5, а сейчас выдают 3-й и 4-й заказы, значит мой уже на подходе.

Также, это отдаленно напоминает геймификацию: клиент пытается разгадать тайный смысл номеров заказов и время ожидание для него пролетает незаметно.

В будущем это поможет нам рассчитывать примерное время ожидания заказа и положительно скажется на пользовательском опыте.

Существующие решения

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

🍔 Бургер Кинг

Тайный смысл номеров заказов в ресторанах быстрого питания

Двойные дефисы это конечно странно, однако основная идея понятна — буквы обозначают источник заказа: мобильное приложение или терминал (какой от этого толк — не ясно), цифры идут последовательно от 01 до 99.

В целом неплохо, установленные требования более-менее выполняются, однако буквы можно было бы локализовать. Также подряд идущие числа 12, 13, …, 15 звучат очень схоже и тут могут возникнуть недопонимания.

🤡 Макдональдс

Тайный смысл номеров заказов в ресторанах быстрого питания

Решили не запариваться и вообще выкинули буквы, вместо них добавили бесполезный ноль. Надеюсь, третья цифра измениться, когда 100 человек в течение 5 минут сделают заказы в одном ресторане?

🍕 Додо

Тайный смысл номеров заказов в ресторанах быстрого питания

Снова подряд идущие числа без букв и имена. Критерий «Простота и понятность» явно страдает. Клиенту нужно обязательно указывать либо говорить своё имя. Выдающему заказы работнику нужно правильно это имя произносить.

Решения

Выбор формата

Одна буква и 2 цифры были признаны идеальным сочетанием: это привычно для клиентов, легко запомнить, и в то же время, достаточно много вариантов, чтобы не повторяться. Такая комбинация, после исключения букв

«Ё», «Й», «Щ» — похожи на своих соседей и легко перепутать,

«З», «О» — похожи на цифры

«Ъ», «Ь» — похожи друг на друга и длинные в произношении

дает нам 26 * 10 * 10 = 2600 вариантов номеров, что будет достаточно даже при большом потоке клиентов. Плюс на этом критерий о простоте и понятности можно считать закрытым.

Решение № 1. Рандом

💡 Идея: генерируем случайное число от 0 до 2599. После деления на 100, получим частное и остаток. Частное — это индекс буквы в нашем усеченном алфавите, а остаток — это двузначное число.

👨‍🏫 Например: случайное число = 12, частное = 0, остаток = 12. Получается номер заказа А-12.

🔬 Соответствие критериям:

✅ Простота и понятность

⛔ Уникальность — нет гарантии, что 2 случайных числа случайно не совпадут

⛔ Предсказуемость

Решение № 2. На основе текущего времени

💡 Идея: берем текущий timestamp и находим остаток от деления на 2600, получаем число от 0 до 2599. Далее следуем алгоритму из первого решения.

🔬 Соответствие критериям:

✅ Простота и понятность

⛔ Уникальность — если учитывать timestamp в секундах, то есть небольшой шанс, что 2 заказа будут сделаны в одну секунду и, следовательно, иметь одинаковый номер. Также через каждые 2600 секунд, номера заказов могут повторяться.

⛔ Предсказуемость

Решение № 3. Счётчик

💡 Идея: увеличиваем значение счётчика на 1 при каждом заказе. Обнуляем счётчик, когда тот дойдет до 2600. Далее следуем алгоритму из первого решения.

🔬 Соответствие критериям:

✅ Простота и понятность — с оговоркой, что теперь числа 12, 13, …, 15 следуют друг за другом

✅ Уникальность

✅ Предсказуемость

Решение № 4. Счётчик (улучшенный)

💡 Идея: выбираем число, которое будет являться шагом для изменения числа, главное чтобы оно не имело общих делителей с числом 100, то есть не делилось на 2 и 5. Увеличиваем значение счётчика на 1 при каждом заказе. Обнуляем счётчик, когда тот дойдет до 2600. Букву получаем путем нахождения остатка при делении счетчика на размер алфавита (26). А число рассчитываем путем умножения счетчика на выбранный шаг и нахождение остатка при делении полученного значения на 100, чтобы результат не превышал 99.

👨‍🏫 Например: значение счётчика = 27, остаток от деления на 26 = 1. Получается буква Б. Выбранный шаг = 9, 27 * 9 = 243, остаток от деления на 100 = 43. Номер заказа — Б-43. Далее увеличиваем счетчик до 28, остаток от деления на 26 = 2. Получается буква В. Выбранный шаг = 9, 28 * 9 = 252, остаток от деления на 100 = 52. Номер заказа — В-52.

🔬 Соответствие критериям:

✅ Простота и понятность — теперь числа 12, 13, …, 15 не встречаются в заказах идущих друг за другом

✅ Уникальность

✅ Предсказуемость — буквы сменяются при каждом новом заказе, числа идут с выбранным шагом.

Заключение

У каждого ресторана свой скрытый смысл и метод генерации номеров для заказов. Мы выбрали 4-й описанный мною способ, так как он максимально близко соответствует нашим критериям.

Пишите в комментариях свои замечания и идеи по этому поводу, буду рад обсудить 🤗

Какой номер заказа лучше? 
A-12
012
12 %name%
11
14 комментариев

Автор, без обид, но это серьёзная заявка на новый мем, и заодно живое доказательство другого нетленного хита: «Если бы программисты строили дома» 😉


p.s.
«А-12» понятнее, чем «012»? Серьёзно? 🙂

2

«Если бы программисты строили дома» (спойлер — программисты рас***дяи) — отличный мем, забавный и жизненный. А тут скорее статья, которой мне не хватало для решения этой задачи, поэтому пришлось самому её написать. Плюс может кто-то скажет: "Ты что дурак, что так сложно, лучше сделать вот так...". Так что не совсем понял что тут мемного?

решение #0
-порядковый номер заказа за этот день с момента открытия кассы. совпадает с номером чека в смене.

2

Специально для Вас добавил опрос 😄

Неочень название соотносится с текстом. Название прототкрытие тайны, а текст про то какой способ выбрать...

2

Да дайте уже самим номер заказа выбирать, и лояльность поднимите
Любимое число человек назовет, ему приятно
Или кассир может такой тебе номер сделать что так приятно будет!
А ещё лучше без номеров

1

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