Универсальные модули перекодировки карт FIX_LEN и RNCARDS
Общая информация
Модуль предназначен для преобразования форматов карт, отличных от стандартных и реализован в виде дополнительной библиотеки для кассового клиента R-Keeper v6
Есть несколько вариантов реализации модуля:
- версия для DOS-кассы
- версия для WIN-кассы
- компилируемый аналог FIX_LEN с возможностью хранить настройки в виде ресурсов (RNCARDS.DLL)
Примечание: Версии модуля для DOS и WIN кассы не являются взаимозаменяемыми, модуль RNCARDS.DLL можно использовать для обоих типов кассы.
Лицензирование
Использование модулей не требует дополнительного лицензирования.
Модуль FIX_LEN
Ссылка на дистрибутив ftp://ftp.ucs.ru/r-keeper/Tools/FIX_LEN
Для использования библиотеки (или библиотек) необходимо скопировать ее в подкаталог EXTENS основного рабочего каталога кассового клиента (как правило, RKCLIENT).
Для создания нескольких правил перекодировки библиотека может быть переименована и размещена в директории EXTENS под разными именами - альтернативным решение может быть использование одной копии FIX_LEN версии 4.00 и множественных секций (см. ниже)
Описание параметров
Библиотека FIX_LEN поддерживает следующие параметры:
- MaxLen - максимальная длина карты. По умолчанию MaxLen=0, при этом после перекодировки параметр MaxLen принимает значение, равное длине маски length(Mask)
- MinLen - минимальная длина карты. По умолчанию MinLen=0, при этом после перекодировки MaxLen принимает значение, равное длине маски length(Mask)
- Mask - маска для выделения результирующего номера из общего формата карты. Может состоять из числовых символов (0-9), группового символа "*" (звездочка) и символа "N". Числовые символы представляют сами себя, т.е. цифры от 0 до 9, и используются для точного соответствия считанного с карты номера указанной маске. При использовании группового символа "*" на позиции маски может находиться любой символ (не обязательно числовой). Символ "N" играет ключевую роль - все символы, выделенные из формата карты, соответствующие позиции символа "N" в маске, формируют результирующий номер карты. Если длина формата карты превышает длину параметра Mask (но меньше значения MaxLen), значение параметра Mask дополняется справа символами "*". Если длина формата карты меньше длины параметра Mask (но больше MinLen), значение параметра Mask обрезается справа до длины формата карты. Результирующий номер образуется конкатенацией выделенных из общего формата (по символу "N") номеров левой и правой маски (конкатенация - объединение строк, например, результат конкатенации строк "ABC123" и "456DEF" является строка "ABC123456DEF", более подробно см. примеры применения FIX_LEN)
- RightMask - аналогичен параметру Mask, за исключением того, что маска дополняется или обрезается слева (в зависимотси от параметров MaxLen и MinLen)
- AddCode - значение, которое будет прибавляться к результирующему номеру после выделения маски (арифметическая операция сложения). Значение по умолчанию - 0. Максимальное значение 2147483647 (LongInt)
- Card - указывает, в какой формат, поддерживаемый системой R-Keeper v6, преобразовать выделенный по маске результирущий номер. По умолчанию имеет значение "0".
Может принимать следующие значения:- 0 - преобразовать в формат персональных дисконтно-платежная карт (778=<код ресторана>=<номер карты>)
- 1 - преобразовать в формат неперсональной дисконтой карты (777=<код ресторана>=<тип скидки>=<срок действия>), срок действия неперсональной дисконтной карты устанавливается автоматически равным 2080 году
- 2 - преобразовать в формат гостиничной карты (770=<код ресторана>=<номер карты>)
- 3 - преобразовать в формат карты на входе (771=<код ресторана>=<номер карты>)
- 4 - преобразовать в формат карты неплательщика (99<код неплательщика>), с версии FIX_LEN 2.03 и выше
- 5 - преобразовывать в формат новых гостиничных карт (760=<код ресторана>=<номер карты>), с версии FIX_LEN 2.04 и выше
- ForDigits - определяет, сколько цифр кода корпорации передавать кассовому серверу после преобразования. При значении ON (Fix_Len_ForDigits = ON) кассовый сервер будет всегда получать 8-ми значный код ресторана. Это требуется при перекодировке в формат гостиничных карт (см. параметр Card = 2), т.к. на данный момент кассовый сервер принимает гостиничные карты только с 8-ми значным кодом ресторана
- СreditCard - расширенная поддержка кредитных карт (с версии FIX_LEN 2.0 и выше). По умолчанию значение OFF. При значении ON библиотека дополнительно выполняет след. функции:
- выделяет номер кредитной карты из общего формата карты
- производит проверку контрольной суммы по правилам кредитных карт
- выделенный номер кредитной карты используется для дальнейшей обработки с помощью вышеорисанных параметров
- Log - включение (ON) записи результатов работы модуля в лог-файл (FIX_LEN.LOG), с версии 2.05.
Пример лог-файла :
Enter card:1000030000313928 Cardnum after mask: 300 Converted to 760=99999999=300
Формат параметров
Параметры библиотеки FIX_LEN задаются в конфигурационном файле RKEEPER6.INI:
<имя библиотеки без расширения>_<имя параметра1> = <значение параметра1> <имя библиотеки без расширения>_<имя параметра2> = <значение параметра2> ....................................................................... <имя библиотеки без расширения>_<имя параметраN> = <значение параметраN>
Например:
FIX_LEN_Mask = 778=108900001=NNNN FIX_LEN_AddCode = 100000
Либо, если библиотека переименова, например в FIX_A.DLL:
FIX_A_Mask = 778=108900001=NNNN FIX_A_AddCode = 100000
С версии FIX_LEN 2.0 и выше параметры можно объединять в секции [ ]:
[<имя библиотеки без расширения>] <имя параметра1>=<значение параметра1> <имя параметра2>=<значение параметра2> ...................................... <имя параметраN>=<значение параметраN>
Например
[FIX_LEN] Mask = 778=108900001=NNNN AddCode = 100000
Либо, если библиотека переименова, например в FIX_A.DLL:
[FIX_A] Mask = 778=108900001=NNNN AddCode = 100000
Примечание: С версии FIX_LEN 2.0 поддерживаются форматы произвольной длины.
С версии FIX_LEN 4.0 и выше можно использовать множественные секции, параметры которых применяются для одной копии библиотеки:
<имя библиотеки без расширения>(1)] <имя параметра1>=<значение параметра1> <имя параметра2>=<значение параметра2> ...................... <имя параметраN>=<значение параметраN> [<имя библиотеки без расширения>(2)] <имя параметра1>=<значение параметра1> <имя параметра2>=<значение параметра2> ...................... <имя параметраN>=<значение параметраN .................................. [<имя библиотеки без расширения>(N)] <имя параметра1>=<значение параметра1> <имя параметра2>=<значение параметра2> ...................... <имя параметраN>=<значение параметраN>
Например:
[FIX_LEN(1)] Mask = 778=108900001=NNNN AddCode = 100000 [FIX_LEN(2)] Mask = 778=108900001=NNNNNN [FIX_LEN(3)] Mask = 778=108900001=93NNNN
Либо, если библиотека переименова, например в FIX_A.DLL:
[FIX_A(1)] Mask = 778=108900001=NNNN AddCode = 100000 [FIX_A(2)] Mask = 778=108900001=NNNNNN [FIX_A(3)] Mask = 778=108900001=93NNNN
Windows-касса (RK6WIN)
Для использования на WIN-кассе (RK6WIN) необходима специальная (адаптированная) версия библиотеки - ссылка на дистрибутив ftp://ftp.ucs.ru/r-keeper/Tools/FIX_LEN/RK6WIN.
В дистрибутиве находится библиотека WFIX_LEN.DLL - такое название сделано для различия с DOS-версией библиотеки, но как и DOS-версия данная библиотека поддерживает переименовывание (т.е. можно переименовать в стандартное параметрам стандартной библиотеки FIX_LEN (на основе версии 5.00).
Проверка перекодировки
Протестировать работоспособность библиотеки с заданными параметрами можно с помощью утилиты TSTFXLEN.EXE.
Примечание: Утилита TSTFXLEN.EXE работает только с DOS-версией библиотеки FIX_LEN
Для проверки необходимо:
- записать в корень рабочего каталога RKCLIENT утилиту тестирования TSTFXLEN.EXE и библиотеку перекодировки FIX_LEN.DLL
- в конфигурационном файле RKEEPER6.INI задать необходимые параметры для модуля FIX_LEN
- запустить в командной строке утилиту TSTFXLEN.EXE, указав в качестве параметра номер карты, перекодировку которого необходимо перекодировать:
TSTFXLEN.EXE<пробел><перекодируемый формат карты>
Примечание: Утилита TSTFXLEN.EXE всегда возвращает вместо реального кода ресторана значение 00000000 (восемь нулей).
Модуль RNCARDS
Ссылка на дистрибутив ftp://ftp.ucs.ru/r-keeper/Tools/FIX_LEN/RNCARDS
Модуль RNCARDS.DLL является полным аналогом FIX_LEN (на основе версии 5.00), за тем отличием, что хранит параметры внутри библиотеки в виде ресурса (в отличии от модуля FIX_LEN, который использует для этого конфигурационный файл RKEEPER6.INI).
Для использования библиотеки (или библиотек) необходимо скопировать ее в подкаталог EXTENS основного рабочего каталога кассового клиента (как правило, RKCLIENT или RK6WIN).
Особенности модуля
- поддерживает все возможности и параметры стандартного модуля FIX_LEN версии 5.00
- перед использованием библиотеки требуется компиляция
- за счет хранения параметров внутри библиотеки упрощается задача распространения модуля по рабочим объектам (например, в сетевых ресторанах)
- может использоваться как для DOS-кассы, так и для WIN-кассы (без адаптации)
Настройка модуля
Для настройки модуля используется конфигурационный файл RKEEPER6.INI, параметры задаются в секциях [0] ...[N]:
[0] About=<Info about RNCARDS module> <имя параметра1>=<значение параметра1> <имя параметра2>=<значение параметра2> [1] <имя параметра1>=<значение параметра1> <имя параметра2>=<значение параметра2> ... <имя параметраN>=<значение параметраN> ...... [N] <имя параметра1>=<значение параметра1> <имя параметра2>=<значение параметра2> ... <имя параметраN>=<значение параметраN>
- где:
- [0] - секция с общими параметрами ForDigits, Log, About (будут применены для всех перекодировок)
- [1] ... [N] - секции с параметрами перекодировки, как отмечалось выше, параметры полностью идентичныпараметрам модуля FIX_LEN
Например:
[0] Log=ON About=UCS Test Decoder [1] Сard=0 Mask=566NNNNN***** AddCode=120000 MinLen=13 MaxLen=13
Примечание: В параметр About секции [0] рекомендуется поместить информацию о назначении перекодировщика - это строка будет показана в справке.
Примечение: Включение параметра Log=ON приводит к формированию лог-файл RNCARDS.Log.
Компиляция модуля
Важно! Компиляция модуля RNCARDS возможна только в 32-х разрядной (x86) версии ОС Windows!
Для компиляции модуля используется утилита BRC.EXE (Borland Resource Compiler) и набор файлов, необходимый для работы BRC.EXE.
Компиляция выполняется запуском командного файла RES.BAT (поставляется в дистрибутиве):
echo stringtable>ini.rc echo BEGIN>>ini.rc echo >>ini.rc 1 " copy ini.rc+rkeeper6.ini ini.rc echo >>ini.rc " echo END >>ini.rc brc -k -t ini.rc rncards.dll
После успешного завершения компиляции на выходе получается рабочая библиотека RNCARDS.DLL.
Распространяется библиотека аналогично FIX_LEN.DLL, поддерживается переименовывание библиотеки.
Примеры использования FIX_LEN
Неперсональные дисконтные карты
Исходные данные: у заказчика от предыдущей системы остались дисконтные карты со следующей записью на второй дорожке:
- от 050001 до 059999 - использовались как карты с 5% скидкой. Номера от 1 до 9999
- от 100001 до 109999 - использовались как карты с 10% скидкой. Номера от 1 до 9999
Цель : без установки системы ПДС использовать существующие карты как неперсональные дисконтные
Решение: в приложении "Редактор" необходимо создать две скидки 5% и 10%, в параметрах которых в поле "Тип магнитной карты" указать 5 и 10 соответственно. Далее прописать в RKEEPER6.INI на рабочей станции:
FIX_LEN_Mask = NN**** FIX_LEN_Card = 1 FIX_LEN_MinLen = 6 FIX_LEN_MaxLen = 6
Заметим, что в данном случае перекодировщик "выделяет" из общего формата не номер карты, а идентификатор скидки (первых две цифры), т.к. понятие "номер карты" для неперсональных дисконтных карт не применимо.
Мы использовали параметр Card = 1, который дает команду преобразовать выделенный номер в формат неперсональной дисконтной карты. Также мы использовали два вспомогательных параметра MinLen и MaxLen для дополнительного контроля обслуживаемых карт - в нашем случае могут обслуживаться карты только с шестизначным номером. Это сделано с той целью, что существующий формат довольно простой и есть вероятность обслуживания "не своих" карт.
Например, на кассе обслуживается карта с номером 053256. Т.к. длина считанного номера соответствует указаному в параметрах MinLen и MaxLen значению (6), происходит перекодировка и преобразоване номера. После чего кассовый сервер получит на вход последовательность, которая соответствует неперсональной дисконтной карте и назначит скидку 5% (т.к. "выделенный" идентификатор скидки 05)
Сеть ресторанов с разными корпоративными кодами
Исходные данные: сеть из 4-х ресторанов, в каждом ресторане используются собственные карты (с диапазоном номеров 1.. 9999), причем номера карт в каждом ресторане пересекаются с остальными. Коды ресторанов: 108900001, 122000001, 121950001 и 121950002, т.е. не принадлежат к одной корпорации
Цель: создание единой базы данных карт ПДС для возможности принятия всех карт в любом ресторане сети.
Решение: т.к. каждому ресторану присвоен свой некорпоративный код, необходимо использовать четыре копии библиотеки FIX_LEN.DLL на каждой кассе. Для этого скопируем библиотеку под разными именами, например FIX_LEN1.DLL, FIX_LEN2.DLL, FIX_LEN3.DLL и FIX_LEN4.DLL , в директорию EXTENS на кассу. Т.к. номера карт из разных ресторанов могут пересекаться, необходимо различать их в общей базе - для этого используем параметр AddCode, который добавляет к "выделенному" номеру определенное число.
Примечание: Перекодировщик карт FIX_LEN следует использовать только в том случае, если коды ресторанов имеют разный код корпорации (первых пять цифр общего кода ресторана). Если ресторанам изначально присваивался одинаковый корпоративный код, то необходимо воспользоваться библиотекой ALLREST.DLL
В результате мы должны прописать в RKEEPER6.INI на каждой кассе:
FIX_LEN1_Mask = 778=108900001=NNNN FIX_LEN1_AddCode = 100000 FIX_LEN2_Mask = 778=122000001=NNNN FIX_LEN2_AddCode = 200000 FIX_LEN3_Mask = 778=121950001=NNNN FIX_LEN3_AddCode = 300000 FIX_LEN4_Mask = 778=121950002=NNNN FIX_LEN4_AddCode = 400000
либо, при использовании INIFILE.DLL версии 2.0 и выше:
[FIX_LEN1] Mask = 778=108900001=NNNN AddCode = 100000 [FIX_LEN2] Mask = 778=122000001=NNNN AddCode = 200000 [FIX_LEN3] Mask = 778=121950001=NNNN AddCode = 300000 [FIX_LEN4] Mask = 778=121950002=NNNN AddCode = 400000
При таких настройках карты должны создаваться в системе ПДС по следующему принципу:
- 10NNNN - для карт первого ресторана
- 20NNNN - для карт второго ресторана
- 30NNNN - для карт третьего ресторана
- 40NNNN - для карт четвертого ресторана
- где NNNN - реальный номер карты.
Например, есть карты со следующими номерами: 1456 (из первого ресторана), 2874 (из второго), 1456 (из третьего) и 2874 (из четвертого). Тогда эти карты должны быть созданы в системе ПДС со следующими номерами: 101456, 202874, 301456, 402874 соответственно
Сеть ресторанов с одинаковыми корпоративными кодами
Исходные данные: сеть из 4-х ресторанов, где первый ресторан имеет код 5214.0001 (код восьмизначный, т.к. кассовая версия более ранняя), остальные рестораны имеют следующие коды: 10889.0001, 10889.0002 и 10889.0004 соответственно. На картах закодирована последовательность: 778=108890000=NNNN
Примечание: Формат 778=CCCCC0000=NNNN ( CCCCC - код корпорации, далее четыре нуля ) прописывается в том случае, если карты планируется использовать в сети ресторанов с одинаковым кодом корпорации (первые пять цифр в общем коде ресторана).
Цель: возможность использовать карты ПДС в первом ресторане до обновления версии кассовой программы
Решение: в первом ресторане используем перекодировщик карт FIX_LEN.DLL. На кассовой станции в RKEEPER6.INI прописываем:
FIX_LEN_Mask = 778=108890000=NNNN
Поддержка международных студенческих карт ISIC
Исходные данные: сеть ресторанов SUBWAY решила принимать карты ISIC и предоставлять по ним скидку. Формат карты ISIC следующий (информация со второй дорожки): 123 456 789 012 234 (пробелы указаны для удобства чтения), где первые 12 цифр - номер карты, последние три цифры - проверочные. При этом первые шесть цифр номера представляют префикс номера, который определяет принадлежность карты к стране (для России используются следующие префиксы: 207218, 207220, 207222, 207500, 207501, 207900)
Цель: использовать российские карты ISIC как дисконтные.
Решение: т.к. кол-во международных карты ISIC очень велико, было принято решение использовать их как неперсональные дисконтные, т.е. без привязки к какому либо номеру карты. Для этого прописываем в RKEEPER6.INI на кассовой станции:
FIX_LEN_Mask = 207NN********** (в маске всего 15 символов, из которых последние 10 - символ "*" {звездочка}) FIX_LEN_Card = 1
Указанная маска позволяет ограничить обслуживание только тех карт, которые начинаются с цифры 207 (т.е. российских карт). Следующие две цифры после 207 мы будем использовать для "выделения" идентификатора скидки (тип магнитной карты). Т.к. в префиксах для российских карт после 207 следуют разные цифры (21, 22, 50 и 90), то необходимо в приложении "Редактор" создать четыре скидки с одинаковым названием и величиной скидки, но указать разные типы магнитных карт - 21, 22, 50 и 90
Поддержка карт "Resto Discount"
Основные положения
- Ресторан должен иметь подписанный договор с компанией-владельцем системы “Resto Discount”.
- В договоре должен быть зафиксирован размер скидки, предоставляемой по картам “Resto Discount” в данном ресторане.
- Карты “Resto Discount” принимаются как НЕПЕРСОНАЛЬНЫЕ дисконтные карты. Использование данных карт в системе R-Keeper ПДС – ЗАПРЕЩЕНО!
Карты Resto имеют следующий формат записи на второй дорожке магнитной полосы:
56279450=01=73599=31122007
где:
- 56279450 - идентификатор принадлежности карт к системе Resto. Одинаков на всех выпущенных картах.
- 01 - тип скидки (тип магнитной карты, указанный в свойствах скидки). При настройке величину скидки согласовать с представителем ресторана. Основание - подписанный договор между рестораном и Resto.
- 73599 - номер карты.
- 31122007 - срок действия карты.
Примечание: Записи [номер карты] и [срок действия карты] на данный момент не используются. Предполагается использование этих записей после внедрения системы учета Resto (статистика) на основе модуля Farcards.
Библиотека FIX_LEN.DLL копируется на рабочие станции в подкаталог EXTENS текущего рабочего каталога RKCLIENT, например C:\RKCLIENT\EXTENS.
Настройки в RKEEPER6.INI следующие:
FIX_LEN_MASK = 56279450*NN*************** (пятнадцать символов "*") FIX_LEN_CARD = 1
Данные настройки позволяет идентифицировать карты Resto как неперсональные дисконтные карты R-Keeper v6.