Создание MCR-алгоритмов извлечения номера карты_купона из считанного трека (идентификатора)
Последнее изменение статьи 06.11.2025 17:49
Для корректного извлечения номера карты лояльности или номера купона из переданного кассе трека (идентификатора) в виде некой последовательности символов, считанной устройством чтения (кардридером, сканером штрих-кодов, видеокамерой смартфона и т.п.) с предъявленной владельцем пластиковой карты или QR-кода, или RFID-метки в браслете, или введенного вручную кассиром, необходимо создать MCRалгоритм(ы). Для каждого типа идентификатора свой MCR-алгоритм.
MCR-алгоритм представляет собой процесс обработки считанного на кассе трека (последовательность символов, записанная на магнитную полосу карты или зашитая в QR-код или введенная вручную кассиром и т.п.) с целью извлечения из этой последовательности символов только тех из них, которые позволяют выделить и однозначно определить номер карты/купона, указанный в БД системы лояльности.
Создадим для примера два MCR-алгоритма:
- MCR-алгоритм, извлекающий номер карты из трека пластиковой карты, записанного на магнитную полосу, и содержащего последовательность *778=12885=ХХХХХХ{*}, где последние 6 символов представляют собой номер карты/купона, который мы должны извлечь в результате применения к заказу этой карты/купона, путем ее прокатывания по считывателю магнитных карт, имеющемуся на моноблоке кассира.

В справочнике «MCR алгоритмы» менеджерской r_k создайте новый алгоритм, задайте ему свойства (выделено красным на скриншоте). Откройте содержимое свойства «Скрипт» и внестие туда представленный ниже код. Первую и последнюю строку кода оставьте как есть в вашей менеджерской r_k, а все что между 1ой и последней строкой представленного ниже кода, скопируйте и вставьте в свой скрипт, точно так же между 1-ой и последней строкой, чтобы у вас в итоге получился аналогичный скрипт, отличающийся только названием функции, т.е. вместо MCR2623055 у вас будет свое наименование, которое было сформировано автоматически при создании скрипта.function MCR2623055(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
На входе: 778=128850087=000016 На выходе: 000016} begin
Result:= pos('778=12885', Parameter)>0; if Result then begin
delete(Parameter, 1, pos('=', Parameter)); delete(Parameter, 1, pos('=', Parameter)); Parameter:= copy(Parameter, 1, 6); end; end;
Теперь, при применении карты с магнитной полосой к столу путем ее считывания на кардридере моноблока кассы, при условии, что трек карты с магнитной полосы содержит последовательность 778=12885=ХХХХХХ, касса отправит запрос в модуль Farcards с номером карты, состоящим из последних 6-ти символов из этого трека (у нас в примере это символы ХХХХХХ, вместо которых в реальном треке содержатся какие-то цифры). - MCR-алгоритм, извлекающий номер карты из трека, считанного сканером штрих-кодов из предъявленного *QR-кода{*}.
По аналогии с п.1 в справочнике «MCR алгоритмы» менеджерской r_k создайте новый алгоритм, задайте ему свойства (выделено красным на скриншоте).
Откройте содержимое свойства «Скрипт» и внестие туда представленный ниже код.function MCR1943316(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
Возвращает True только если в bar-коде содержатся цифры, иначе - False} var
i: integer;
begin
Result:= true;
for i:= 1 to Length(Parameter) do
if (pos(Parameter[i],'0123456789')<=0) then Result:= false; end;
Теперь, если в открытом столе отсканировать сканером штрих-кодов, подключенным к кассе, предъявленный гостем QR-код с зашитым в нем номером карты/купона, то касса отправит запрос в модуль Farcards с номером карты, считанным из QR-кода.