Примеры настроек decodecards.dll

Тут будет структурная схема 

Декодирование треков карт с использованием FastScript (fsdecodecard.upas)

 

Назначение 

С версии decodecards.dll 1.29 доступен новый способ декодирования (выдержка из version.txt):
1. Добавлен новый алгоритм декодирования
  CardDecodeType = FastScript
  Алгоритм декодирования программируется в функции decodecard во внешнем файле, задаваемым параметром fsUnit в секции [frf].
  В секции [frf] появился параметр
    fsUnit=fsdecodecard.upas
Таким образом, появилась возможность максимально тонкой настройки принципов декодирования как для Абонемент-TCPCardReader так и для gkhostconnect-GKHOST.
 
Содержимое файла fsdecodecard.upas (болванка из поставки):
function fsUnitVersion:integer;
begin
  result := 1;
end;

function DecodeCard(Track:string; var Code:integer):string;
begin
  Result := Track;
end;

begin

end.
Т.е. при считывании идентификатора, для его декодирования будет вызвана функция DecodeCard() из данного файла.
 
Входные параметры функции:
Track - полный трек полученный от считывателя (типа string),
Code - код типа идентификатора (типа integer, подлежит изменению в теле функции);
Выходные параметры функции:
Result - номер идентификатора представленный строкой, после получения должен безошибочно конвертироваться в Int64 (типа string).
 
В файле скрипта доступны все функции доступные в печатных формах абонемента, что позволяет облегчить написание и отладку скрипта.
Пример печатной формы для тестирования разрабатываемого скрипта см. в приложениях к статье.
 
 

Пример

Пример скрипта декодирования для считывателя штрихкодов подключечённого к контроллеру UCS, для работы со штрихкодами абонементов, возвращающего контрольный символ штрихкода в виде "<контрольный_символ>F":
(обсуждалoсь в задаче #144157)
function fsUnitVersion:integer;
begin
  result := 1;
end;

function DecodeCard(Track:string; var Code:integer):string;
var                                         //Объявление локальных переменных
i,summa,ltt:integer;
ttr:string;                        
symbolz:array of string;                                                          
begin

ttr:=trim(Track);                          //Обрезание трека, в случае попадания пробелов в начало или конец
ltt:=Length(trim(Track));                  //Получение длины обрезанного трека
 

  if(Uppercase(Track)='F5012345678900')    //Проверка на совпадение со спец штрихкодом - картой полного доступа
  then 
  begin
  result:='5012345678900';                 //Возвращается номер карты полного доступа прописанный в gkhostconnect
  Exit;
  end;            
  if(not (Uppercase(Copy(ttr,ltt,1))='F'))  //Если последний символ полученного трека не "F", т.е. штрихкод считался без контрольного символа Code39
  then
   begin              
     if (Copy(ttr,ltt-2,3)=MDCHECKSUM(Copy(ttr,1,ltt-3),1)) //Сравниваем предпологаемую контрольную сумму абонемента с имеющейся в треке
     then result:=Copy(ttr,1,ltt-3)                         //Если совпадают, то возвращаем номер абонемента
     else result:=track;                                    //Если не совпадают, то возвращаем номер как есть (например, если штрихкод - идентификатор специалиста)  
   end               
  else                                      //Если последний символ полученного трека - "F", то сравниваем предпоследний с контрольным символом согласно гост на штрихкод Code39
   begin
      symbolz:=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','-','.',' ','$','/','+','%'];   //Таблица контрольных символов Code39
      i:=1; summa:=0;                 
      while (i<ltt-1) do                   //высчитываем данные для получения контрольного символа
      begin
        summa:=summa+strtoint(Copy(ttr,i,1));
        inc(i);                                
      end;
   if (Uppercase(Copy(ttr,ltt-1,1))=symbolz[(summa mod 43)])   //Производим сравнение символа полученного в треке и высчитанного контрольного символа
   then
   begin               
     if (Copy(ttr,ltt-4,3)=MDCHECKSUM(Copy(ttr,1,ltt-5),1))    //Если совпадают, сравниваем контрольную сумму абонемента
     then
     result:=Copy(ttr,1,ltt-5)                                //Если действительно, данный штрихкод -номер абонемента с контрольной суммой абонемента и с контрольным символом Code39, возвращаем номер абонемента
     else
     result:=Copy(ttr,1,ltt-2)                                //Иначе возвращаем номер как есть, без контрольного символа Code39 (например, если штрихкод - идентификатор специалиста)
   end                  
   else             
   result:='0';                                              //Если контрольный символ не совпадает с рассчитаным по госту, возвращаем пустой трек (пресекаем дальнейшую обработку)                         
   end;
   
end;

begin

end.
 
ВложениеРазмер
Печатная форма для отладки разрабатываемого скрипта декодирования1.63 КБ

Из номера E565A21256805F получаем 21256805 (Matrix-III,Z-2 USB)

Задача декодировать E565A21256805F на Matrix-III RD-ALL или Z-2 USB  и получить 21256805

TcpCardReader

TcpCardReader.ini

[TCP]
PORT=7760
IP=0.0.0.0

[READER1]
COMPORT=9
COMPORTPARAMS=baud=4800 data=8 parity=N stop=1

Prefix=;
Postfix=?
 
decodecards.ini
[general]
usemask=1

[mask]
  card_em = E*

[cards.Card_em]
code=2
CardDecodeType = MASK
mask=*****dddddddd*

 

abonementmanager (папка exe)

decodecards.ini
[general] 
usemask=1 

[mask] 
card=* 

[cards] 

[cards.Card] 
CardDecodeType = mask 
mask=dddddddd 
code=2
abonementmanager.ini
[TCPCardReader]
  PORT=7760
  HOST=127.0.0.1

  UseTCPCardReader=1

 

Настройка decodecards для взаимодействия с Модулем управления турникетами GkHostConnect (с использованием карт Em-marine и считывателей IronLogic Matrix-III RD-ALL (IronLogic Z-2 USB))

TcpCardReader

Например, из трека полученного с кардридера: Em-Marine[5605] 185,05453 получить идентификатор 18505453.

TcpCardReader.ini

[TCP]
PORT=7760
IP=0.0.0.0

[READER1]
COMPORT=3
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1
;Параметр Prefix задаёт строку, которая передаётся клиентам перед первым прочтенным символом
Prefix=;
;Параметр Postfix задаёт строку, которая передаётся клиентам после последнего прочтенного символа
Postfix=?

;Использовать decodecards.dll
useDecodeCards=1
StartTermChars=M
FinishTermChars=#13;#10;#0;
 
decodecards.ini
[mask]
card = arine[*

[cards.Card]
ExcludedPrefix=arine[
code=2
CardDecodeType = LAST8

Abonementmanager (папка exe)

decodecards.ini
[general] 
usemask=1 

[mask] 
card=* 

[cards] 

[cards.Card] 
CardDecodeType = mask 
mask=dddddddd 
code=2
abonementmanager.ini
[TCPCardReader]
  PORT=7760
  HOST=127.0.0.1

  UseTCPCardReader=1

GkHostConnect

decodecards.ini
[general]
usemask=1
TrackResultLog=

[mask]
card = e*

[cards.Card]
ExcludedPrefix=e
code=2
CardDecodeType = MASK
mask=****dddddddd*

 

 

Настройка decodecards для взаимодействия с Модулем управления турникетами GkHostConnect (с использованием карт Mifare и считывателей IronLogic Matrix-III RD-ALL (IronLogic Z-2 USB))

TcpCardReader

 

Например, преобразовываем трек полученный с считывателя: Mifare [40CD941F] 205,37919 1K (0004,08) в следующий вид: 1087214623 (значение из квадратных скобок в десятичном представлении)

TcpCardReader.ini

[TCP]
PORT=7760
IP=0.0.0.0

[READER1]
COMPORT=3
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1
;Параметр Prefix задаёт строку, которая передаётся клиентам перед первым прочтенным символом
Prefix=;
;Параметр Postfix задаёт строку, которая передаётся клиентам после последнего прочтенного символа
Postfix=?

;Использовать decodecards.dll
useDecodeCards=1

StartTermChars=#$5D
FinishTermChars=?#13;#10;#0;
 
decodecards.ini
[mask]
card = *

[cards.Card]
code=2

Abonementmanager (папка exe)

decodecards.ini
[general] 
usemask=1 

[mask] 
card=* 

[cards] 

[cards.Card] 
code=2
abonementmanager.ini
[TCPCardReader]
  PORT=7760
  HOST=127.0.0.1

  UseTCPCardReader=1

GkHostConnect

decodecards.ini

 

[general]
usemask=1
TrackResultLog=

[mask]
card = *

[cards.Card]
code=2
CardDecodeType = MASK
mask=hhhhhhhh*