Страница 1 из 2

Чтение медполиса на киоске

Добавлено: 08 Август 2019, 3:31
Андрей
Взялся вот за реализацию инфокиоска, а сам не имел дела ни с сенсорными киосками, ни со считывателями. Не знаю, что выйдет из всей этой затеи...
Вот скажем такой вопрос - как считать полис с ШК ?
Сам то ШК полиса не понял - что это ? Вроде и не одномерный и не QR ?
Polis.jpg

Взял сканер с поддержкой 2D, начал тренироваться. Для контроля платежку энергосбыта параллельно сканирую. При работе как родное USB устройство, платежка нормально считывается, только кодировка не русская (как это поправить ?) При считывании полиса читается строка кракозябр. Ежели переключаюсь на эмуляцию COM устройства, дело становится хуже: из платежки считывается только начало, а при попытке считать полис вообще происходит хрень какая то - система нервно реагирует, открывая несколько левых окон, включая режим поиска и т.д.

Запросить информацию из страховой копании о структуре ? А что спросить то ?

И еще вопрос - это у меня сейчас ручное устройство, а в киоске как сканер включать в нужный момент ?
Есть еще устройство считывания смарт-карт, но что то он вообще не читает этого полиса... может и не должен ? С чипом он или нет ?

Чтение медполиса на киоске

Добавлено: 08 Август 2019, 4:46
Игорь Столяров
Насколько я вижу по смутному изображению Вашего кода - он в формате PDF-417.
А значит полученная со сканера строка будет в кодировке UTF8, и после считывания её нужно конвертировать в ANSI.

Чтение медполиса на киоске

Добавлено: 08 Август 2019, 10:29
Андрей
Игорь Столяров писал(а):
08 Август 2019, 4:46
Насколько я вижу по смутному изображению Вашего кода - он в формате PDF-417.
А значит полученная со сканера строка будет в кодировке UTF8, и после считывания её нужно конвертировать в ANSI.
Перекодирование, это типа как у Kreator нашел кусок кода

Код: Выделить всё

LOC:TempString = 'Кларион велик' 
len# = len(clip(LOC:TempString))
LOC:String1 &= new(cstring(len# * 2))
LOC:String2 &= new(cstring(len# * 2))
i# = MultiByteToWideChar(CP_ACP, 0, address(LOC:TempString), len#, address(LOC:String2), len#*2)
if i#
  i# = WideCharToMultiByte(CP_UTF8, 0, address(LOC:String2), i#, address(LOC:String1), len#*2, 0, 0)
  LOC:QRCode = GetQRCode(LOC:String1)
end  
?
Смущает, что в этой получееной строке кракозябр не вижу главного - так называемого ЕНП (единого номера полиса) - 16 разр. числа, он то должен без перекодировки виден ?

Чтение медполиса на киоске

Добавлено: 08 Август 2019, 11:02
Игорь Столяров
Андрей писал(а):
08 Август 2019, 10:29
Перекодирование, это типа как у Kreator нашел кусок кода
1. Наоборот. Указанный пример перекодирует ANSI строку в UTF8 для генерации из неё QRCode. :)

2. Абсолютно верно, числа и латинские символы должны быть видны в UTF8 и без перекодировки.
Здесь нужно смотреть документацию, что именно и в каком виде закодировано в замыленном Вами коде.
Иногда бывает, например, ещё и кодировка в BASE64 - тогда будет потоковая строка латино-цифровых символов,
или информация в строке может быть упакована в ZIP формат или зашифрована ключом с ЭЦП и т.д.

Чтение медполиса на киоске

Добавлено: 08 Август 2019, 11:26
kreator
Я как раз с инфокиосками и считывателями работал. Надо начать с простого. Где-то тут была либа для создания кода в PDF-417. Самому посоздавать и посчитывать. Числа в UTF8 не надо перекодировать. Впрочем как и латиницу. Есть ещё вариант, что сама информация в коде зашифрована. Но это маловероятно.
Вообще, со считывателем (в т.ч. с бесконтактным) я начинал работать так. Подключал его как клавиатуру (обычно в драйвере есть такая опция, некоторые устройства на автомате как клавиатуры встают). В Винворде пытался считывать инфу и смотрел, на что похоже.
Работа "через клавиатуру" проще. Но есть нюансы. Через com вроде тоже проблем нет, непонятно поведение Вашей проги. Надо смотреть Com-класс, или что там у Вас.
Как включать сканер? Не скажу. Имел дело с постоянно работающими. В определённый момент начинаем слушать порт и всё. С "клавиатурным" отдельный разговор. На некоторых устройствах есть такое, в определённый момент начинает мигать считыватель денег, или карточек. Но считыватель штрих-кода работает всегда. Могу ошибаться. В принципе, в com-порт можно писать. И наверняка есть команды, которые приводят эти устройства в рабочее состояние.

Чтение медполиса на киоске

Добавлено: 08 Август 2019, 15:19
gopstop2007
kreator писал(а):
08 Август 2019, 11:26
Подключал его как клавиатуру
может поможет https://habr.com/ru/company/scanport/blog/351374/

Чтение медполиса на киоске

Добавлено: 08 Август 2019, 18:02
kreator
gopstop2007 писал(а):
08 Август 2019, 15:19
kreator писал(а):
08 Август 2019, 11:26
Подключал его как клавиатуру
может поможет https://habr.com/ru/company/scanport/blog/351374/
Наверняка с оборудованием ТС определился. Мой опыт - Киоск со стационарным сканером штрих-кодов (USB с эмуляцией com-порта) и с нестационарным бесконтактным считывателем магнитных карт (USB с эмуляцией клавиатуры). Так решил заказчик. Почему? ХЗ. Бесконтактный считыватель автоматически встаёт как клавиатура. Боюсь даже изменить в драйвере это нельзя. Решение заказчика. Зато теперь есть опыт работы и с com-портом и с клавой.

Чтение медполиса на киоске

Добавлено: 08 Август 2019, 18:17
Дед Пахом
kreator писал(а):
08 Август 2019, 18:02
Зато теперь есть опыт работы и с com-портом и с клавой.
И для резюме сгодится: "имею опыт работы с клавиатурой".

Чтение медполиса на киоске

Добавлено: 09 Август 2019, 1:43
Андрей
А это, что то не понял...
В хелпе есть функция TOANSI... Она чтоль не работает еще ?
Зачем в хелпе тогда людей путать... хм...

Чтение медполиса на киоске

Добавлено: 09 Август 2019, 6:23
Игорь Столяров
Андрей писал(а):
09 Август 2019, 1:43
В хелпе есть функция TOANSI... Она чтоль не работает еще ?
Работает. Но редко используется УЖЕ.
Потому, что полное название функции CONVERTOEMTOANSI и предназначена она для смены кодировки DOS на Windows(-1251).
Лет, этак 15-20 назад постоянно ею гоняли данные из старых файлов обмена … :)

Чтение медполиса на киоске

Добавлено: 09 Август 2019, 10:54
kreator
Нет, Игорь, это не то. Это похоже новые функции. TOANSI и TOUNICODE. Именно для конвертации в Юникод и обратно. Андрей, попробуйте, результат расскажите. Может, действительно, больше не надо заниматься проктостоматологией.

Чтение медполиса на киоске

Добавлено: 09 Август 2019, 11:02
Дед Пахом
kreator писал(а):
09 Август 2019, 10:54
Это похоже новые функции. TOANSI и TOUNICODE.
Пока они есть только в хелпе.

Чтение медполиса на киоске

Добавлено: 09 Август 2019, 11:05
kreator
В десятке их нет.
Дед Пахом писал(а):
09 Август 2019, 11:02
Пока они есть только в хелпе.
Следовало ожидать!

Чтение медполиса на киоске

Добавлено: 14 Август 2019, 9:21
Андрей
Отступился пока от сканера, странный какой то ШК - сканер начинает получает какие то управляющие символы что ли - начинают окна новые открываться и прочая самостоятельная жизни при попытке чтения....
Подключился к считывателю, раздобыл пластиковый полис с чипом (то что было у меня оказывается "сервисная карта" - просто аналог бумажки). Прверяю этот полис на таком же считывателе в МИС (мед. инф. система) в регистратуре Advanced Card Systems ACR 38U, думаю весьма популярном. Там все работает, начинает мигать зел. светодиодом, идентификация пациента происходит. У меня что-то не читает - должен ли так же считавать напрямую в текстовом редакторе, ка и сканер ШК ? Драйвер что ли криво встает - в руководстве есть по настройке
ACR38.jpg
однако у меня нет никакой закладки "Reader". Как перевести его в режим эмуляции клавиатуры ? Отключил режим цифровой подписи, однако все равно "Не удается проверить цифровую подпись" в драйвере - или это не критично ?

Чтение медполиса на киоске

Добавлено: 14 Август 2019, 10:40
kreator
Если не встаёт как клавиатура, читайте через порт. Можно же узнать что считывается? Не важно, сканер ли, считыватель ли.
Мне непонятно, окна в Вашей программе открываются? Или Винда так работает?