Страница 1 из 1
Формирование штрих-кода льготного рецепта
Добавлено: 08 Июнь 2015, 4:45
yuriy
Добрый день
Помогите пожалуйста решить проблему
Для печать штрих-кода необходимо в соответствии с алгоритмом
Перевести все данные включаемые в штрих-код в битовую последовательность
например:
ОГРН ЛПУ 1022402655159 необходимо перевести в битовую последовательность длиной 50 бит
Источник финансирования 1 в битовую последовательность длиной 2 бита
и так далее
Если кто делал это подскажите пожалуйста как это можно сделать?
Стандартными средствами или сторонними шаблонами или библиотеками?
Clarion 5.5
Формирование штрих-кода льготного рецепта
Добавлено: 08 Июнь 2015, 7:20
Admin
Очень интересен код который 24 байта в 50 бит закодирует

Может все таки ID нужно кодировать а не название?
О каком штрихкоде идет речь, агоритм какой?
И вообще немного задачу опишите.
Формирование штрих-кода льготного рецепта
Добавлено: 08 Июнь 2015, 7:35
yuriy
Кодировать надо только цифры конечно
Необходимо печатать из программы на Clarione бланк льготного рецепта
в нем есть штрих-код в PDF-417
Описание алгоритма формирования во вложенном файле
Как напечатать и закодировать в base64 я знаю не получается создать правильную по битам последовательность
Формирование штрих-кода льготного рецепта
Добавлено: 08 Июнь 2015, 9:58
Admin
Ну если двоичный вид то наверное...
Код: Выделить всё
PROGRAM
MAP
IntToBin(LONG N, LONG Extend),STRING
END
CODE
! N число для преобразования в биты
! Extend - расширить число до Extend бит (дописать нули в начало)
MESSAGE(IntToBin(32768,50))
IntToBin FUNCTION(LONG N, LONG Extend)!,STRING
Result STRING(1024)
P LONG
CODE
P = N
Result = ''
LOOP WHILE P > 0
Result = P % 2 & CLIP(Result)
P = P / 2
END
Result = ALL('0', Extend-LEN(CLIP(Result))) & CLIP(Result)
RETURN CLIP(Result)
Формирование штрих-кода льготного рецепта
Добавлено: 08 Июнь 2015, 10:41
kreator
Вот здесь внешняя библиотека для формирования pdf-417 -
http://forum.clarionlife.net/phpbb/view ... f=1&t=2969. Всё делает сама.
Формирование штрих-кода льготного рецепта
Добавлено: 08 Июнь 2015, 11:12
yuriy
Спасибо буду бороться дальше
Формирование штрих-кода льготного рецепта
Добавлено: 09 Июнь 2015, 5:41
yuriy
Добрый день
Предложенные варианты не совсем подходят т. к.
в переменную LONG для преобразования можно записать только 10 цифр
а код ОГРН и СНИЛС содержат 13 и 11 цифр
если согласно алгоритма преобразовать дозировку из символов в код ASCII то получается очень длинное число
например гранулы пролонг.п/о кш/раств.1000мг N50
получается 208 179 209 128 208 176 208 189 209 131 208 187 209 139 32 208 191 209 128 208 190 208 187 208 190 208 189 208 179 46 208 191 47 208 190 32 208 186 209 136 47 209 128 208 176 209 129 209 130 208 178 46 49 48 48 48 208 188 208 179 32 78 53 48
Если в функции IntToBin(LONG N , LONG Extend),STRING заменить на IntToBin(DECIMAL N, DECIMAL Extend),STRING
то при компиляции выходит ошибка invalid dta type for value parameter
Формирование штрих-кода льготного рецепта
Добавлено: 09 Июнь 2015, 7:01
Admin
Да. Чисто под LONG написал.
Для STRING и соответственно больших чисел нужно по другому писать.
Гуглить string to bin и разбираться.
Формирование штрих-кода льготного рецепта
Добавлено: 09 Июнь 2015, 7:12
Admin
На самом деле нужно функцию BSHIFT для строки.
Но в Clarion она работает только с LONG.
Формирование штрих-кода льготного рецепта
Добавлено: 09 Июнь 2015, 8:58
AlesDales
Добрый день.
Может это из другой оперы, но могу поделиться – совсем недавно занимался штрих-кодом pdf 417 и тоже из области медицины (штрих код на бумажных полисах обязательного медицинского страхования).
По спецификации shtrih.pdf СНИЛС - 37 бит. В строку включаются только цифры СНИЛС.
Если делать по аналогии с полисом, то СНИЛС – например 166-378-589 22 (последние две цифры это его контрольная сумма) преобразовывается в большое число 16637858922 которое в шестнадцатеричном виде выглядит как 03 DF B1 94 6A соответственно занимает всего 5 байт и если проверить 1111011111101100011001010001101010 – 34 бита.
Буквы в полисе, ф.и.о. например, вообще кодируются 6 битными сегментами по специальной таблице.
Формирование штрих-кода льготного рецепта
Добавлено: 09 Июнь 2015, 10:20
yuriy
AlesDales писал(а):Добрый день.
Может это из другой оперы, но могу поделиться – совсем недавно занимался штрих-кодом pdf 417 и тоже из области медицины (штрих код на бумажных полисах обязательного медицинского страхования).
По спецификации shtrih.pdf СНИЛС - 37 бит. В строку включаются только цифры СНИЛС.
Если делать по аналогии с полисом, то СНИЛС – например 166-378-589 22 (последние две цифры это его контрольная сумма) преобразовывается в большое число 16637858922 которое в шестнадцатеричном виде выглядит как 03 DF B1 94 6A соответственно занимает всего 5 байт и если проверить 1111011111101100011001010001101010 – 34 бита.
Буквы в полисе, ф.и.о. например, вообще кодируются 6 битными сегментами по специальной таблице.
Если не трудно пришлите исходники можно в личку.
Спасибо за помощь
Формирование штрих-кода льготного рецепта
Добавлено: 09 Июнь 2015, 17:38
yuriy
Admin писал(а):На самом деле нужно функцию BSHIFT для строки.
Но в Clarion она работает только с LONG.
Если не затруднит объясните пожалуйста, как с помощью функции BSHIFT получить из числа определённое количество бит
Например число 456789 перевести в двоичный вид длинной 25 бит дополнив слева 0 до необходимого размера.
Формирование штрих-кода льготного рецепта
Добавлено: 10 Июнь 2015, 2:30
Admin
yuriy писал(а): Если не затруднит объясните пожалуйста, как с помощью функции BSHIFT получить из числа определённое количество бит
Например число 456789 перевести в двоичный вид длинной 25 бит дополнив слева 0 до необходимого размера.
Ну вот вам пример с BSHIFT
Код: Выделить всё
PROGRAM
MAP
IntToBin(LONG N, LONG Extend),STRING
END
LOC:Str STRING(10)
S LONG
CODE
! N число для преобразования в биты
! Extend - до скольки бит расширить число
MESSAGE(IntToBin(456789,25),,,,,0)
IntToBin FUNCTION(LONG N, LONG Extend)!,STRING
Result STRING(1024)
P LONG
CODE
P = N
LOOP WHILE P > 0
Result = P % 2 & CLIP(Result)
P = BSHIFT(P, -1)
END
Result = ALL('0', Extend-LEN(CLIP(Result))) & CLIP(Result)
RETURN CLIP(Result)
Формирование штрих-кода льготного рецепта
Добавлено: 10 Июнь 2015, 3:04
Admin
Код: Выделить всё
S LONG(33)
CODE
MESSAGE(BSHIFT(S, -1))
S = S / 2 ! аналогично BSHIFT(S, -1) с учетом того что дробная часть в LONG отбрасывается
MESSAGE(S)
Формирование штрих-кода льготного рецепта
Добавлено: 10 Июнь 2015, 3:43
yuriy
Спасибо