Руководство поставило задачу, распознавать штрихкод полиса единого образца для продукта 1С: Медицина. Поликлиника, версии 2.1.4.
Данные штрихкоды имеют тип PDF417.
Так как под рукой сканера не было, зато был планшет, решено было сделать сначала некую демонстрационную вещь именно на мобильном устройстве.
Смысла использовать библиотеки распознавания, предлагаемые фондами обязательного медицинского страхования не видел, зачем, когда можно сделать что-то своё.
Поизучав формат кодирования данных в штрихкоде, наткнулся на вполне содержательную статью:
http://myshinobi.ru/dekodirovanie-rasshifrovka-shtrih-koda-polisa-oms-chast-1/
Для тестирования и сверки результатов пользовался этим он-лайн сервисом, другие сервисы упорно не хотели ничего хоть более-менее схожего выдавать.
Оставалось получить сами данные, желательно двоичные, а 1с всегда возвращает лишь строку.
Для этого использовался метод "ПолучитьДвоичныеДанныеИзСтроки".
Дальше уже дело техники.
Обнаружилось что тип штрихкода 010 не распознается, из за не прозрачной логики производимых манипуляций.... в общем на форумах по данной тематике не мало "лестных" отзывов о тех, кто придумал это кодирование.
Также по типу 010 оказалось что можно читать ОГРН и ОКАТО страховой организации, чего в статье из первого поста не наблюдалось.
В официальной утилите ФФОМСа отсутствие даты представлялось как 01.01.1900, решил сделать также.
Из хотелок возникло:
1. Всё такие читать двоичные данные из буфера двоичных данных, а не разбивкой на массив, как в первой версии;
2. Поддержать тип штрихкода 010, с распознанием ОГРН и ОКАТО;
3. Добавить проверку на контрольный разряд номера полиса;
4. Получать цифровую подпись. Hex строка 65 байт, двоичные данные из неё можно получить методом "ПолучитьДвоичныеДанныеИзHexСтроки".
Обращаю внимание, что в данной конфигурации использован метод "ЧислоИзДвоичнойСтроки", который был реализован в версии 8.3.10.2168. Если необходимо использовать на более старых версиях, то надо лишь заменить способ перевода из двоичной системы в десятичную, благо реализаций подобного подно.
1. Добавить проверку ЭЦП. Так как в мобильном госты не работают в менеджере криптографии, когда это будет воплощено, не понятно.
2. Перенести на управляемое приложение.
К публикации прилагаю демонстрационные apk(arm, x86), для проверки работоспособности.
И саму конфигурацию мобильного приложения с алгоритмом декодирования.
В данном приложении можно как отсканировать один штрихкод, так и сканировать несколько. Данные последнего отсканированного полиса попадут в поля формы, если сканировалось несколько штрихкодов, то они будут помещены в таблицу формы.
Приложении только демонстрирует возможности сканирования и распознавания полиса омс единого образца. Дальше эти данные никуда не идут, как с ними работать, решать вам.