Страница 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
				Спасибо