WHITE HAT HACKER
Moderator
"Pfand" - делаем купоны автоматов приема тары (бутылок)
Схема будет работать в этих странах:
Германия
Австрия
Бельгия
Венгрия
Дания
Ирландия
Исландия
Латвия
Литва
Мальта
Нидерланды
Норвегия
Польша
Португалия
Румыния
Словакия
Финляндия
Хорватия
Эстония
В этих странах, более распространено в Германии, есть программа "Pfand".
При покупке бутилированных напитков, человек в магазине платит помимо самого напитка, так же и за бутылку.
Он также может получить купон для покупок в магазине, если сдаст бутылку в приёмник. Такие автоматы по закону есть в каждом продуктовом.
Пример купона, с которым далее будем работать, а так же автомат для сдачи бутылок:

Давайте ближе посмотрим на сам купон, который одолжил интернет:
Девочка сдала одну бутылку и получила купон на 25 центов, номер её купона 52854.
Это же и видно в баркоде:
22 64084029915 52854 000025
22 - Первые два байта служебные, не важно.
64084029915 - Второй блок содержит айди продуктового, где был получен чек, а так же автомат.
52854 - Номер купона необходим, чтобы кассир дважды не пробил один чек. С одним чеком можно прийти на две кассы и использовать его более одного раза.
000025 - стоимость купона в центах.
Нет какой-то бд, к которой подключены кассовые автоматы, данные сохранены лишь на самом купоне.
Шаблон данных у купонов разный, это зависит от торговой сети и модели автомата. Рассмотрим купон сложнее.

4350 0030 0000 0000 7
На купоне сумма 43.80, однако купон содержит цену о бутылках отдельно.
30 центов за все многоразвые и 43.50 евро за одноразовые.
По нулям можно понять, что максимум для одного типа бутылок - 99.99 евро, а помимо тех типов которые показаны на фотографии, существует ещё два (видимо баклажки).
В самом конце чека есть чексумма, её вычисляют по mod10.
Чтобы изменить баланс, необходимо её посчитать.
Берёте номер без контрольной цифры.
Нумеруете цифры справа налево, начиная с 1 для последней позиции перед чексуммой.
Цифры на нечётных позициях умножаете на 3, на чётных на 1, и всё суммируете.
Чек сумма будет числом, которое нужно добавить к сумме, чтобы получить кратное 10.
А теперь самые сложные чеки:

90290671 6236 224072 1375 0000 8 6
90290671 6235 224072 1125 0000 9 1
90290671 6234 224072 2475 0000 4 6
Всё как и прежде, последнее число это чексумма по mod10, однако предпоследнее неясно, что-то кастомное. Если есть предложения, будет интересно узнать. Я пробовал автоматизированно перебирать разные чексуммы, однако ничего не нашлось.
Поэтому я предлагаю пробить 10 вариаций одного и того же чека, или поменять магазин.
Забавное:
"Потенциал мошенничества с возвратом залоговой стоимости бутылок был продемонстрирован в конце 2016 года на примере розничного продавца напитков из Кёльна. 37-летний мужчина модифицировал автомат по приему возвратной тары, используя деревянный туннель и магнитный датчик, так что бутылки сканировались, но не измельчались. Это позволяло ему многократно вставлять одну и ту же бутылку и регистрировать сумму залога — по оценкам, в общей сложности почти 180 000 раз. Со временем этот метод принес ему сумму, превышающую 44 000 евро."
www.stern.de
Бот на питоне для этих дел

Как использовать:
Отправляйте боту баркод картинкой. Есть возможность написать текущий баланс, чтобы бот его подсветил.
Делать это нужно лишь для того, чтобы определить номер чека (существует чтобы на одной кассе не пробили трижды) и номер магазина (нужен чтобы кое-кто не прошелся по всем магазинам на самообсулживании с одним чеком. Магазины принимают чеки лишь со своими номерами).
Далее, если в конце есть чексумма(Внимание! Не во всех чеках она есть!), убирай её, после редактируй баланс чека на желаемый.
отправляй в формате.
/checksum строка
Бот вернёт строку с чексуммой. Отправляйте её обратно и получайте готовый баркод
Рекомендации:
Используйте кассы самообслуживания.
Сперва сканируйте товары, а только потом скидочные купоны.
Не оставляйте сдачи на чеке, есть вероятность того, что автомат её не вернёт и будет вызван кассир, чего вы не хотите.
Помимо разных амазоновских карт берите ещё какой-то товар, который оплатите наличкой чтобы точно закрыть сдачу. Если вы ввели наличку, сдачу получите без проблем.
Внутри самих магазинов вы можете найти похожие автоматы, например, для приёма мелочи. Они работают схожим образом.
Нет нужды ходить за чеками сдавая монеты или бутылки каждый раз. Можете поменять номер чека на какой-то невероятный, до которого обычные покупатели дойдут очень не скоро, лучше даже с конца начать.
Схема будет работать в этих странах:
Германия
Австрия
Бельгия
Венгрия
Дания
Ирландия
Исландия
Латвия
Литва
Мальта
Нидерланды
Норвегия
Польша
Португалия
Румыния
Словакия
Финляндия
Хорватия
Эстония
В этих странах, более распространено в Германии, есть программа "Pfand".
При покупке бутилированных напитков, человек в магазине платит помимо самого напитка, так же и за бутылку.
Он также может получить купон для покупок в магазине, если сдаст бутылку в приёмник. Такие автоматы по закону есть в каждом продуктовом.
Пример купона, с которым далее будем работать, а так же автомат для сдачи бутылок:

Давайте ближе посмотрим на сам купон, который одолжил интернет:
Девочка сдала одну бутылку и получила купон на 25 центов, номер её купона 52854.
Это же и видно в баркоде:
22 64084029915 52854 000025
22 - Первые два байта служебные, не важно.
64084029915 - Второй блок содержит айди продуктового, где был получен чек, а так же автомат.
52854 - Номер купона необходим, чтобы кассир дважды не пробил один чек. С одним чеком можно прийти на две кассы и использовать его более одного раза.
000025 - стоимость купона в центах.
Нет какой-то бд, к которой подключены кассовые автоматы, данные сохранены лишь на самом купоне.
Шаблон данных у купонов разный, это зависит от торговой сети и модели автомата. Рассмотрим купон сложнее.

4350 0030 0000 0000 7
На купоне сумма 43.80, однако купон содержит цену о бутылках отдельно.
30 центов за все многоразвые и 43.50 евро за одноразовые.
По нулям можно понять, что максимум для одного типа бутылок - 99.99 евро, а помимо тех типов которые показаны на фотографии, существует ещё два (видимо баклажки).
В самом конце чека есть чексумма, её вычисляют по mod10.
Чтобы изменить баланс, необходимо её посчитать.
Берёте номер без контрольной цифры.
Нумеруете цифры справа налево, начиная с 1 для последней позиции перед чексуммой.
Цифры на нечётных позициях умножаете на 3, на чётных на 1, и всё суммируете.
Чек сумма будет числом, которое нужно добавить к сумме, чтобы получить кратное 10.
А теперь самые сложные чеки:

90290671 6236 224072 1375 0000 8 6
90290671 6235 224072 1125 0000 9 1
90290671 6234 224072 2475 0000 4 6
Всё как и прежде, последнее число это чексумма по mod10, однако предпоследнее неясно, что-то кастомное. Если есть предложения, будет интересно узнать. Я пробовал автоматизированно перебирать разные чексуммы, однако ничего не нашлось.
Поэтому я предлагаю пробить 10 вариаций одного и того же чека, или поменять магазин.
Забавное:
"Потенциал мошенничества с возвратом залоговой стоимости бутылок был продемонстрирован в конце 2016 года на примере розничного продавца напитков из Кёльна. 37-летний мужчина модифицировал автомат по приему возвратной тары, используя деревянный туннель и магнитный датчик, так что бутылки сканировались, но не измельчались. Это позволяло ему многократно вставлять одну и ту же бутылку и регистрировать сумму залога — по оценкам, в общей сложности почти 180 000 раз. Со временем этот метод принес ему сумму, превышающую 44 000 евро."
Mann ergaunert über 44.000 Euro Pfand - mit nur einer Flasche
Weil er es schaffte, den Pfandautomaten zu manipulieren, ergaunerte ein Getränkehändler über 44.000 Euro - mit nur einer einzigen Flasche.
Бот на питоне для этих дел
Python:
from io import BytesIO
from PIL import Image
from pyzbar.pyzbar import decode
import barcode
from barcode.writer import ImageWriter
from telegram import BotCommand
from telegram.ext import Application, MessageHandler, CommandHandler, filters
TOKEN = "токен бота"
def add_checksum(s):
return s + str((10 - sum(int(d) * (3 if i % 2 == 0 else 1) for i, d in enumerate(s[::-1])) % 10) % 10)
def md(s):
for ch in r"_*[]()~`>#+-=|{}.!":
s = s.replace(ch, "\\" + ch)
return s
async def checksum(u, c):
s = " ".join(c.args).strip()
await u.message.reply_text(add_checksum(s))
async def h(u, c):
if u.message.photo:
cap = (u.message.caption or "").strip()
f = await c.bot.get_file(u.message.photo[-1].file_id)
d = decode(Image.open(BytesIO(await f.download_as_bytearray())))
s = d[0].data.decode() if d else "Баркод не обнаружен"
if cap and cap in s:
s = s.replace(cap, f"__*{md(cap)}*__")
await u.message.reply_photo(u.message.photo[-1].file_id, caption=s, parse_mode="MarkdownV2")
else:
s = u.message.text.strip()
b = BytesIO()
barcode.get("code128", s, writer=ImageWriter()).write(b, {"write_text": False})
b.seek(0)
await u.message.reply_photo(b, caption=s, parse_mode="MarkdownV2")
async def post_init(app):
await app.bot.set_my_commands([BotCommand("checksum", "Добавить чексумму")])
app = Application.builder().token(TOKEN).post_init(post_init).build()
app.add_handler(CommandHandler("checksum", checksum))
app.add_handler(MessageHandler(filters.PHOTO | (filters.TEXT & ~filters.COMMAND), h))
app.run_polling()

Как использовать:
Отправляйте боту баркод картинкой. Есть возможность написать текущий баланс, чтобы бот его подсветил.
Делать это нужно лишь для того, чтобы определить номер чека (существует чтобы на одной кассе не пробили трижды) и номер магазина (нужен чтобы кое-кто не прошелся по всем магазинам на самообсулживании с одним чеком. Магазины принимают чеки лишь со своими номерами).
Далее, если в конце есть чексумма(Внимание! Не во всех чеках она есть!), убирай её, после редактируй баланс чека на желаемый.
отправляй в формате.
/checksum строка
Бот вернёт строку с чексуммой. Отправляйте её обратно и получайте готовый баркод
Рекомендации:
Используйте кассы самообслуживания.
Сперва сканируйте товары, а только потом скидочные купоны.
Не оставляйте сдачи на чеке, есть вероятность того, что автомат её не вернёт и будет вызван кассир, чего вы не хотите.
Помимо разных амазоновских карт берите ещё какой-то товар, который оплатите наличкой чтобы точно закрыть сдачу. Если вы ввели наличку, сдачу получите без проблем.
Внутри самих магазинов вы можете найти похожие автоматы, например, для приёма мелочи. Они работают схожим образом.
Нет нужды ходить за чеками сдавая монеты или бутылки каждый раз. Можете поменять номер чека на какой-то невероятный, до которого обычные покупатели дойдут очень не скоро, лучше даже с конца начать.