1.0.0.2 В decodecards.ini должны быть заполнены все параметры CardPrefix = своё значение StaffCardPrefix = своё значение RegularCardPrefix = своё значение PDSCardPrefix = своё значение 1.0.0.3 Если префикс карты не попадает в значения этих параметров, то проверяется CardPrefix на пустое значение. Если CardPrefix - пустое, карта будет считаться гостевой и префикс не анализируется (так как его нет вообще) Добавлен параметр [cards] FirstSignEquallyAsLetterA = 0 Если FirstSignEquallyAsLetterA = 1, то первый символ "=" в треке преобразуется к символу "A" 1.0.0.4 Добавлен новый алгоритм декодирования CardDecodeType = LAST8 В этом случае в качестве номера карты берутся последние 8 цифровых символов трека. 1.0.0.5 Добавлен новый алгоритм декодирования CardDecodeType = LAST9 В этом случае в качестве номера карты берутся последние 8 цифровых символов трека. 1.0.0.6 Добавлен новый алгоритм декодирования CardDecodeType = MASK MASK - накладывается маска Используются параметры mask и bitmask Например, mask=**hh* - взять 3-й и 4-й символ как цифры в шестнадцатиричном формате или mask=**dd* - взять 3-й и 4-й символ как цифры в десятичном формате bitmask=$00FFFFFF - и применить к ним битовую маску 1.0.0.7 Добавлена секция [mask] В ней настраиваются маски карт в формате - ИМЯ МАСКИ=МАСКА Добввлена секция [general] с параметром usemask=1 (По умолчанию 0) - использовать секцию MASK или не использовать Если usemask=1, то секция [cards] игнорируется Если usemask=1, тогда при декодировании проверяется, какой маске соответствует считанный трек. После этого происходит обращение к секции [cards.ИМЯ МАСКИ] Извлекается параметр ExcludedPrefix - отделяемый от трека префикс, а также CardDecodeType. Применяется алгоритм декодирования и возвращается номер карты. Пример 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 1.8 Добавлено логирование 1.9 Для алгоритма декодирования типа MASK добавлен параметр MaskType Может принимать значение MaskType=ARRAYOFBYTES или 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-тичном формате 1.10 Добавлен новый алгоритм декодирования CardDecodeType = GAMEKEEPERCARD В этом случае в качестве номера карты берутся цифровые символы между вторым и третьим знаками "=" трека. 1.11. 1. Добавлен новый алгоритм декодирования CardDecodeType = REPLACECARDNO Для этого алгоритма используется дополнительный параметр NewCardNo NewCardNo - это числовая константа (integer), которая подставляется как результат декодирования. 1.12. 1. Добавлен новый алгоритм декодирования CardDecodeType = MASK2 Этог алгоритм похож на MASK, за исключением того, что алгоритм MASK перед накладыванием маски на трек (после удаления ExcludedPrefix) УДАЛЯЕТ дополнительно все символы, кроме 0-9 и A-F Алгоритм MASK2 накладывает маску на весь трек (после удаления ExcludedPrefix), НЕ модифицируя его дополнительно. Все параметры алгоритма MASK2 совпадают с соответствующими параметрами алгоритма MASK 1.13 1. Поддерживаются номера карт от 1 до 4294967295 включительно. 1.14 1. Новые параметры декодирования Amount_of_Last_Symbols_For_Exception = 0 - количество символов справа, которые нодо отрезать перед применением алгоритма декодирования ChangeByteOrder=1 - Изменить порядок следования байтов в результате. (По умолчанию 0 - не изменять) 1.15 1. Новый способ определения типа карты. Доступен, если параметр usemask=1 в секции [general] В секции [mask] необходимо задать ИМЯ МАСКИ=file://ИМЯ_ФАЙЛА Ключевое слово "file://" говорит о том, что трек будет сверяться с масками, записанными в файле ИМЯ_ФАЙЛА Пример 1 [mask] cardfile=file://testfile.txt Пример 2 содержимого файла testfile.txt 770=12345670 770=12345671 14A12345672 12345673 770=888888 770=9* Из примера видно, что маски могут быть разными. Эта доработка рекомендуется в случаях, когда нужно использовать перечисления всех карт Пример 3 содержимого файла testfile.txt (Например, перечисляем все карты персонала) 11223344 AABBCCDD 12345678 87654321 1.16 1. Новый параметр AfterDecodeTranslateFile для секций [cards.XXX] Например [cards.XXX] AfterDecodeTranslateFile=AfterDecodeTranslateFile.txt Смысл этого параметра в следующем. После того как с помощью алгоритмов декодирования извлечём истинный номер карты, то обратимся в этот файл (если он существует) и если найдётся замена для истинного номера карты, то подставится она. Пример AfterDecodeTranslateFile.txt 1654960737 = 3 4554567820 = 435 Тут, параметры (1654960737,4554567820) - это номер карты значения (3,435) - это тот номер, который вернёт функция. 1.18 1. Новый параметр DecodeTypeEx для секций [cards.XXX] Например [cards.XXX] DecodeTypeEx=0 (по умолчанию) Смысл этого параметра в следующем: Если больше 0, то срабатывает после всех алгоритмов перед AfterDecodeTranslateFile При DecodeTypeEx=1 к номеру карты применяется дополнительное декодирование WiegandEM 1.19 1. Параметр BITMASK - битовая маска 1.1. Применяется ко всем алгоритмам декодирования. Ранее применялся только к алгоритмам MASK, MASK2. Значение BITMASK по умолчанию было равно $7FFFFFFF. 1.2. BITMASK по умолчанию равен $FFFFFFFF. За исключением алгоритма ANGSTREMCARD. В алгоритме ANGSTREMCARD BITMASK по умолчанию равен $FFFFFF (для совместимости с предыдущими версиями). 1.20 1. Исправлен алгоритм декодирования CardDecodeType = GAMEKEEPERCARD В качестве номера карты берутся цифровые символы между вторым и третьим знаками "=" трека. Если знака "=" нет в треке, то анализируется символ "A" (латинская A - регистр не важен) и в качестве номера карты берутся цифровые символы между вторым и символами "A" трека. 1.21 1. В режиме декодирования MASK неправильно обрабатывался трек, в котором нет ни одного 16-ричного символа. Исправлено. 1.22 1. Новый параметр CryptoWordType для секций [cards.XXX] Например [cards.XXX] CryptoWordType=0 (по умолчанию) - тип шифрования контрольной суммы Смысл этого параметра в следующем: Если больше 0, то срабатывает после всех алгоритмов, но перед AfterDecodeTranslateFile Ожидается, что последние 3 символа - это контрольная сумма. Она отбросится, если правильная. Если неправильная, то номер карты вернет 0 case CryptoWordType of 1 - абонемент 2 - номер карты 3 - идентификатор гостя (Guests.ID) 1.23 1. Новый параметр TrackResultLog в секции [general] Если определен, то после успешного декодирования в файл, определенный этим параметром будет добавлена строка вида %TRACK%=%RESULT% 1.24 1. Поддерживаются номера карт от -9223372036854775808 до 9223372036854775807 включительно (от 1 до $FFFFFFFFFFFFFFFF). 0 - НЕТ карты 2. BITMASK по умолчанию равен $FFFFFFFFFFFFFFFF 3. Параметр DecodeTypeEx может принимать значение 2 При DecodeTypeEx=1 к номеру карты применяется дополнительное декодирование WiegandEM: номер карты анализируется в DEC-формате При DecodeTypeEx=2 к номеру карты применяется дополнительное декодирование WiegandEM: номер карты анализируется в HEX-формате 1.25 1. Расширено логирование 1.26 1. По умолчанию лог пишется в папку LOG\ 1.27 1. Новая экспортируемая функция extractcardnoexp_int64 2. Исправлены мелкие баги 1.28 1. Параметр DecodeTypeEx может принимать значение 3 При DecodeTypeEx=3 к номеру карты применяется дополнительное декодирование WiegandEM: номер карты анализируется в модифицированном HEX-формате 2. Параметр DecodeTypeEx может принимать значение 4 При DecodeTypeEx=4 к номеру карты применяется дополнительное декодирование. Трек должен быть 14 HEX-символов. Последние 6 символов и первые 8 символов меняются местами. 1.29 1. Добавлен новый алгоритм декодирования CardDecodeType = FastScript Алгоритм декодирования программируется в функции decodecard во внешнем файле, задаваемым параметром fsUnit в секции [frf]. В секции [frf] появился параметр fsUnit=fsdecodecard.upas 1.30 1. Списки карт могут быть зашифрованными. Например [mask] cardfile=file://testfile.pack pack-файл формируется сотрудником UCS на основании текстового файла, содержащего список карт, присланного заказчиком. Ответственное лицо заказчика должен хранить в тайне список карт и не предоставлять его никому, за исключением уполномоченного сотрудника UCS, который будет генерировать pack-файл. Чтобы использовать pack-файл, нужно установить параметр MaskFileIsPacked=1 в секции [cards.XXX] Пример [cards.cardfile] MaskFileIsPacked=1 По умолчанию MaskFileIsPacked=0 1.31 Обновления 1. decodecards.dll не требует gds32.dll