Подключение считывателя карт для интеграции с CRM

 

 

 

 

Описание подключения считывателя к Shelter 2

Модель считывателя : Z-2 USB

Подключен по USB
Тип карты Mifare
Необходимо скачать и установить программу
PuTTY (предварительно необходимо установить драйвера для считывателя с оф.сайта производителя)
После запуска программы перейти во вкладку Serial и указать COM-порт и скорость : 

После нажатия Open откроется окно, необходимо приложить карту к считывателю, должна появиться такая строка (пример) :

Трек, который мы будем декодировать : B2C124CB
Для декодирования необходимо скачать и разархивировать утилиту 
TcpCardReader 
из базовой поставки ПО Абонемент (версия на момент написания манула 1.26.0.2). Далее необходимо настроить TcpCardReader.ini, в моем случае настройки выглядят так :

[application]
AutoStart = 1                                                                             
;Автоматически стартовать программу после запуска
AutoHide = 1                                                                             
;Сворачивать программу после запуска
[setup]
COMPORTCOUNT=1                                                               
;Количество подключений к СОМ портам.
[TCP]
PORT=7760
IP=0.0.0.0                                                                                 
;TCP порт и адрес сетевого интерфейса, к которому будет производиться подключение клиентов
[READER1]
COMPORT=7
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1     
;Настройки первого подключения к сом порту. Номер и параметры СОМ порта.
Prefix=;                                                                                     
;Строка, которая передаётся клиентам перед первым прочтенным символом. В данном примере добавится символ: «точка с запятой»
Postfix=?                                                                                   
;Строка, которая передаётся клиентам после последнего прочтенного символа. В данном примере добавится символ: «Вопросительный знак»
useDecodeCards=1                                                                 
;0 - не использовать декодирование decodecards.dll,  1 - использовать декодирование  decodecards.dll
StartTermChars=M                                                                     
;Используется, если useDecodeCards=1 Признак начала трека для декодирования
FinishTermChars=?#13;#10;#0;                                               
;Используется, если useDecodeCards=1 Признак конца трека для декодирования
[LOG]
level=30
debuglevel=30 
showlog=1                                                                         
;Уровни логирования. Используются значения от 0 до 30
[TCPCARDREADER]
Prefix=;                                                                                     
;Строка, которая передаётся клиентам перед первым прочтенным символом. В данном примере «точка с запятой»  появится перед треком карты (что служит указателем начала для decodecards.dll)
Postfix=?                                                                                 
;Строка, которая передаётся клиентам после последнего прочтенного символа. В данном примере  «Вопросительный знак» появится после трека карты (что служит указателем конца для decodecards.dll)
 
Далее необходимо открыть decodecards.ini. В секции [mask] добавить следующий параметр : card_mif = ifare*
После чего добавляем секцию :
 
 
[cards.card_mif ]
excludedprefix=ifare[
CardDecodeType=MASK
mask=hhhhhhhh
code=2
bitmask=$FFFFFFFF

 

Сохраняем файл и запускаем TcpCardReader.exe от имени администратора. В окне с программой проверить наличие информации, что утилита заняла COM-порт : 
 
IdTCPServer1.Active := true
Занят COM7 hComPort=820 ComModeStr=baud=9600 data=8 parity=N stop=1
После чего можно прикладывать карту, в окне с программой мы должны увидеть уже обработанный трек-номер :
 

 

 

2999002315 - искомый трек.

Следующим шагом будет настройка считывания карты в Shelter 2. Необходимо запустить Shelter и перейти в настройки :

Ввести пароль для входа в настройки (ucs-shelter) и перейти в системные настройки. Необходимая секция для настроек :

 

Тип считывателя 4

;TCP/IP

Порт считывателя 7760

;Значение из TcpCardReader.ini

StartChar ;

 

StopChar ?

 

IP 127.0.0.1

;IP адрес ПК, где запущен TcpCardReader

 

Далее необходимо перейти в настройки декодирования карты :

 

В появившемся окне нажать кнопку "Добавить" и настроить по аналогии со скриншотом :

После чего необходимо нажать "Сохранить", в каталоге с Shelter появится файл cards.ini
Если в карточке поселения считать эту карту, то в логе увидим следующую запись : 

11768 293172/256964 KB     18.04.2018 14:27:34.341         ;2999002315?
11768 293172/256964 KB     18.04.2018 14:27:34.341         Check Mask "*"
11768 293172/256964 KB     18.04.2018 14:27:34.341         Mask "*" ok
11768 293172/256964 KB     18.04.2018 14:27:34.341         Exclude Prefix ";" (2999002315?)
11768 293172/256964 KB     18.04.2018 14:27:34.341         Exclude Postfix "?" (2999002315)
11768 293172/256964 KB     18.04.2018 14:27:34.341         CardDecodeType ""
11768 293172/256964 KB     18.04.2018 14:27:34.341         AIdent 2999002315
11768 293172/256964 KB     18.04.2018 14:27:34.341         ATypeIdent 2

В логе видно, что трек обработался корректно.

 

Тип карты Mifare 

После считывания карты в PuTTY :

Настройки для TcpCardReader.ini :

[application]
AutoStart = 1
AutoHide = 0
[TCP]
PORT=7760
IP=0.0.0.0
[READER1]
COMPORT=7
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1
;Параметр Prefix задаёт строку, которая передаётся клиентам перед первым прочтенным символом
Prefix=;
;Параметр Postfix задаёт строку, которая передаётся клиентам после последнего прочтенного символа
Postfix=?
;Использовать decodecards.dll
useDecodeCards=1
StartTermChars=i
FinishTermChars=?#13;#10;#0;
;Файл логирования треков
TrackLogFile=
ConvertTrackLog=0
IncludeTypeStartTermChar=0
IncludeStartTermChar=0
NeedCheckAndReopenCom=1

В decodecards.ini В секции [mask] добавить следующий параметр : card_em = ne* и добавляем следующую секцию : 

[cards.card_em]
ExcludedPrefix=ne[
code=2
CardDecodeType = MASK
mask=****dddddddd
DecodeTypeEx = 0

Запускаем TcpCardReader.exe и прикладывем карту. Результат считывания карты :
 

Далее настраиваем подключения к Shelter, как было описано ранее. После считывания карты в логе Shelter увидим следующую запись :

9480  285512/247024 KB     18.04.2018 16:23:36.326         ;18036625?
9480  285512/247024 KB     18.04.2018 16:23:36.326         Check Mask "*"
9480  285516/247024 KB     18.04.2018 16:23:36.326         Mask "*" ok
9480  285516/247024 KB     18.04.2018 16:23:36.327         Exclude Prefix ";" (18036625?)
9480  285516/247024 KB     18.04.2018 16:23:36.327         Exclude Postfix "?" (18036625)
9480  285516/247024 KB     18.04.2018 16:23:36.327         CardDecodeType ""
9480  285516/247024 KB     18.04.2018 16:23:36.327         AIdent 18036625
9480  285516/247024 KB     18.04.2018 16:23:36.327         ATypeIdent 2

 

Настройки DECODECARDS.INI

               БЕЗ ИСПОЛЬЗОВАНИЯ USEMASK (USEMASK=0) - ПО УМОЛЧАНИЮ.

               СТАРЫЙ, НЕ РЕКОМЕНДУЕТСЯ К ИСПОЛЬЗОВАНИЮ.

                         [cards]

                         ;В этой секции прописываются префиксы для карт. Типы карты определяется прификсом.

               Существуют 4 типа карт: CardPrefix, RegularCardPrefix, StaffCardPrefix, PDSCardPrefix.  НЕ ДОЛЖНЫ СОВПАДАТЬ МЕЖДУ СОБОЙ!!!

               CardPrefix   - обменная гостевая, действующая на территории комплекса. может быть пустым.

               Пример:

                            CardPrefix   =
                            ; CardPrefix   =770a87121234a
                            ; CardPrefix   =770A199999999A
                            ; CardPrefix   =750

               RegularCardPrefix - постоянная карта клиента. RegularCardPrefix не может быть пустым.

               Пример:

                            RegularCardPrefix=10
                            ;RegularCardPrefix=йцукен - Если не используется

               StaffCardPrefix - постоянная карта сотрудника. StaffCardPrefix не может быть пустым. Если не используется, то следует написать, например

               Пример:

                            ; StaffCardPrefix        =  770=00260001=
                              StaffCardPrefix        =  778=87121234=
                              StaffCardPrefix        = 778=201050001
                            ; StaffCardPrefix =фывапр - Если не используется

               PDSCardPrefix -карта ПДС. PDSCardPrefix не может быть пустым. Если не используется, то следует написать , например

                            PDSCardPrefix   = 811876
                            ; PDSCardPrefix =ячсмит - Если не используется

               FirstSignEquallyAsLetterA = 0 - Интерпретировать первый встретившийся символ "=" в треке как символ "A". Используется FirstSignEquallyAsLetterA = 1 для совместного использования GKHOST и инфотерминалов TimeKeeper.

                         [cards.Card]

                              CardDecodeType - алгоритм извлечения истинного номера карты
                              ANGSTREMCARD- для карт E-Marine со считывателем СРЧ-125
                              ANGSTREMBRASLET- для карт E-Marine со считывателем СРЧ-2M
                              LAST8 - последние 8 цифр
                              LAST9 - последние 9 цифр
                              MASK - накладывается маска. Исползуется параметры mask и bitmask

               Например,

                                    mask=**hh* - взять 3-й и 4-й символ как цифры в 16-м формате
                                    mask=**dd* - взять 3-й и 4-й символ как цифры в 10-м формате
                                    bitmask=$00FFFFFF - и применить к ним битовую маску
                                    MaskType= - (пусто-по умолчанию)
                                    MaskType=ARRAYOFBYTES - то анализируется параметр mask. Значения должны быть типа "с".

               Например, mask = *cccc*
             Это значит, что при декодировании из трека возьмём 2-5 символы, представим каждый символ в 16-ричном формате. Объединим 16-ричные представления символов и применим к ним маску bitmask.
               Пример. Со считывателя пришёл трек "Пупкин". Если mask =*cccc*, то для обработки берём часть "упки".
               Представляем в 16-ричном виде
                              у - F3
                              п - EF
                              к - EA
                              и - E8
               Объединяем. Получаем F3EFEAE8 . Накладываем маску  bitmask=$7FFFFFFF -> Получили  73EFEAE8 - в 16-ричном формате или 1945103080 - в 10-тичном формате
               code=2 - идентификатор карты в базе. ПАРАМЕТРЫ CODE ДЛЯ ВСЕХ ТИПОВ КАРТ ДОЛЖНЫ БЫТЬ РАЗЛИЧНЫМИ.

 

                          [cards.RegularCard]

                         Аналогично [cards.Card]

                         [cards.StaffCard]

                         Аналогично [cards.Card]

                         [cards.PDSCard]

                         Аналогично [cards.Card]

             

               ИСПОЛЬЗОВАНИЕ USEMASK=1

              Добавлена секция [mask]. В ней настраиваются маски карт в формате - ИМЯ МАСКИ=МАСКА

              Добввлена секция [general] с параметром

                         usemask=0 – не использовать секцию MASK (по умолчанию)

                         usemask=1 – использовать секцию MASK

              Если usemask=1, то

                      1. Секция [cards] игнорируется;

                      2. При декодировании проверяется, какой маске соответствует считанный трек.

              После этого происходит обращение к секции [cards.ИМЯ МАСКИ] Извлекается параметр  CardDecodeType и  ExcludedPrefix - отделяемый от трека префикс, применяется алгоритм декодирования и возвращается номер карты.

                            Пример 1.

              Трек равен 778=12345678=1234567 . Он удовлетворяет маске card2.

              Отрезаем от трека ExcludedPrefix. Получили 1234567.

              К этому числу не применяем никакой алгоритм декодирования, так как CardDecodeType не заполнен. В результате получаем 1234567 - истинный номер карты.

                            Пример 2.

              Трек равен 05987654321 . Он удовлетворяет маске card. Отрезаем от трека ExcludedPrefix.

              Получили 987654321. К этому числу  применяем алгоритм декодирования MASK. Согласно алгоритму декодирования берем 5 первых символов в 10-чном формате. В результате получаем 98765 - истинный номер карты.

                            [general]
                                usemask=1
                            [mask]
                                card = 05*
                                card2= 778=12345678=*
                            [cards.Card2]
                                ExcludedPrefix=778=12345678=
                                code=2
                            [cards.Card]
                                ExcludedPrefix=05
                                code=2
                                CardDecodeType = MASK
                                mask=ddddd
                                bitmask=$FFFFFFFF

 

           Далее будут рассмотренны примеру декодирования разных карт на разных прошивках и разных считывателей.

IRON LOGIC Z-2

       Все прошивки взяты с официального сайта производителя IronLogic https://ironlogic.ru

              ПРИМЕР 1. Заводская прошивка для Z-2 USB. Версия: 230. Карта ISBC MIFARE Classic 1K

              В putty  возвращается трэк:

                            Mifare[23D9C4C5] 196,55587 1K (0004,08)
                            No card

             Если необходимо получить искомое значение 19655587, то в TcpCardReader.ini указать:

                            Prefix=;
                            Postfix=?
                            useDecodeCards=1
                            StartTermChars=]
                            FinishTermChars=

             А в decodecards.ini:

                            [general]
                            usemask=1
                            TrackResultLog=
                            [mask]
                            card_mif=*
                            [cards.card_mif]
                            excludedprefix=
                            CardDecodeType=MASK
                            mask=dddddddd
                            code=2
                            bitmask=$FFFFFFFF

             В результате в TcpCardReader будет следующий результат:

             Если необходимо получить искомое значение 601474245, что соответствует 23D9C4C5, то в TcpCardReader.ini указать:

                           
                            Prefix=;
                            Postfix=?
                            useDecodeCards=1
                            StartTermChars=[
                            FinishTermChars=]
                           

             А в decodecards.ini:

                            [general]
                            usemask=1
                            TrackResultLog=
                            [mask]
                            card_mif=*
                            [cards.card_mif]
                            excludedprefix=
                            CardDecodeType=MASK
                            mask=hhhhhhhh
                            code=2
                            bitmask=$FFFFFFFF

             В результате в TcpCardReader будет следующий результат:

 

             ПРИМЕР 2. Прошивка для Z-2 USB. Читает только карты 13,56 МГц: Mifare. Прошивка актуальна для карт двойного стандарта (в один и тот же пластик вплавляют EM-Marine и Mifare), позволяет читать мультиформатному считывателю только один формат карт. Карта ISBC MIFARE Classic 1K.

             В putty  возвращается трэк:

             Mifare[23D9C4C5] 217,50373 1K (0004,08)

             No card

             Настраивается по аналогии, как и в пример 1.

 

             ПРИМЕР 3. Прошивка для Z-2 USB. Вывод в COM-порт код карты  в формате, аналогичном Z-2 USB MF (для карт mifare). Версия: 240. Карта ISBC MIFARE Classic 1K.

             В putty  возвращается трэк:

                          Mifare[23D9C4C5] 1K (0004,08) 196,55587
                         No card

             Если необходимо получить искомое значение 19655587, то в TcpCardReader.ini указать:

                          Prefix=;
                          Postfix=?
                          useDecodeCards=1
                          StartTermChars=]
                          FinishTermChars=

             А в decodecards.ini:

                          [general]
                          usemask=1
                          TrackResultLog=
                          [mask]
                          card_mif=*
                          [cards.card_mif]
                          excludedprefix=
                          CardDecodeType=LAST8
                          code=2

             В результате в TcpCardReader будет следующий результат:

             Если необходимо получить искомое значение 601474245, что соответствует 23D9C4C5, то в TcpCardReader.ini указать:

                         
                          Prefix=;
                          Postfix=?
                          useDecodeCards=1
                          StartTermChars=[
                          FinishTermChars=]
                         

             А в decodecards.ini:

                          [general]
                          usemask=1
                          TrackResultLog=
                          [mask]
                          card_mif=*
                          [cards.card_mif]
                          excludedprefix=
                          CardDecodeType=MASK
                          mask=hhhhhhhh
                          code=2
                          bitmask=$FFFFFFFF

             В результате в TcpCardReader будет следующий результат:

 

             ПРИМЕР 4. Прошивка для Z-2 USB. Вывод номера карты в формате W24(8цифр), без запятой между ними, без подавления первых нулей, без NoCard, перевод строки есть. (Десятиричный формат без nocard). Версия: 10.51.54.8. Карта ISBC MIFARE Classic 1K.

             В putty  возвращается трэк:

                          21750373

             В TcpCardReader.ini не используем декодирование:

                         
                          Prefix=;
                          Postfix=?
                          useDecodeCards=0
                          StartTermChars=
                          FinishTermChars=
                         

             В результате в TcpCardReader и shelter будет следующий результат:

 

             ПРИМЕР 5. Для карт ISBC MIFARE Ultralight EV1 (7-байтный UID) настраивается по аналогии с рассмотренными примерами, за исключением следующих моментов:

                 В putty  возвращается трэк:

                          Mifare[04DE4CDAA34084] UL (0144,00) 218,19678
                         No card

        Если необходимо получить искомое значение 1370321573855364, что соответствует 04DE4CDAA34084, то  TcpCardReader.ini и decodecards.ini настраивается по аналогии с рассмотренными примерами, но (ВАЖНО!!!) данное число  (1370321573855364) не входит в диапазон integer и при прикреплении идентификатора будет возвращаться ошибка.

              Чтобы ошибки не было необходимо получать искомое значение 21819678, либо настраивать decodecards.ini следующим образом:

                            [general]
                            usemask=1
                            TrackResultLog=
                            [mask]
                            card_mif=*
                            [cards.card_mif]
                            excludedprefix=
                            CardDecodeType=MASK
                            mask=*hhhhhhh*****
                            code=2
                            bitmask=$FFFFFFFF

             В результате в TcpCardReader и shelter будет следующий результат:

 

           Для считывателя Matrix-III RD-ALL настраивается аналогично, т.к возвращаемые трэки будут одинаковые.

                    

 

Подключение HID-устройства (считывателя) с использованием утилиты TcpCardReader

        Начиная с версии 1.27.0.1 утилиты TcpCardReader добавлена поддержка HID-устройств.
           Поставка включает в себя следующий набор файлов:
                   KeyScan.dll    
                   KeyScan.ini
           Содержание файла KeyScan.ini:
                   [buffer]
                   ; минимальное количество символов в коде, полученном от сканера
                   MinBufferSize=6
                   ; Таймаут в миллисекундах между символами, приходящими со сканера
                   CharInterval=50

       Для использования подключенного HID-устройства (В нашем случае использовался сканер штрих-кодов) необходимо в секции [READER] файла конфигурации tcpcardreader.ini прописать isKBReader=1.
       После запуска TcpCardReader в области считывания должна появится надпись «Занят KBReader», что свидетельствует о подключении библиотеки KeyScan.dll, которая взаимодействует с HID устройством.

       При считывании штрих-кода TcpCardReader  получит трэк 46204837.

    После получения трэка в TcpCardReader его можно обработать выше перечисленными способами.

 

     Данный мануал является ознакомительным, в некоторых случаях алгоритм обработки карты будет различаться.