Получить информацию из PDF417
Модераторы: Operator 2, Operator 4, Operator 1
Правила форума
В данном разделе сообщения оставляются по следующим правилам.
- данный раздел создан исключительно для помощи в подключении к ЕГАИС.
- участники попытавшиеся оставить сообщения не в своей теме (не относящиеся к проблеме автора) немедленно утрачивают доступ к этому разделу.
- в данном разделе задаются только конкретные технические вопросы.
- за весь офтоп и ненормативную лексику будут выдаваться предупреждения, блокирующие на произвольное время доступ на форум
В данном разделе сообщения оставляются по следующим правилам.
- данный раздел создан исключительно для помощи в подключении к ЕГАИС.
- участники попытавшиеся оставить сообщения не в своей теме (не относящиеся к проблеме автора) немедленно утрачивают доступ к этому разделу.
- в данном разделе задаются только конкретные технические вопросы.
- за весь офтоп и ненормативную лексику будут выдаваться предупреждения, блокирующие на произвольное время доступ на форум
- antonn
- Сообщений: 400
- Зарегистрирован: 12 янв 2016, 13:34
Получить информацию из PDF417
Добрый день, как получить информацию по/из акцизной марки? Например производителя. Автоматизированными средствами, конечно (например через xml аналогично другим документам УТМ).
- VBulat
- Сообщений: 94
- Зарегистрирован: 04 дек 2015, 10:47
- Откуда: Симферополь
Re: Получить информацию из PDF417
Из полезной информации пока удается извлекать только алкокод.
viewtopic.php?f=4&t=2132&start=10
viewtopic.php?f=4&t=2132&start=10
- leonidt84
- Сообщений: 52
- Зарегистрирован: 26 ноя 2015, 19:07
Re: Получить информацию из PDF417
А по алкокоду можно через QueryAP получить ProductRef и узнать производителя/импортера, вид продукции, емкость, крепость и наименование, правда через ЕГАИС, который далеко не мгновенно отвечает
- antonn
- Сообщений: 400
- Зарегистрирован: 12 янв 2016, 13:34
Re: Получить информацию из PDF417
Спасибо про наводку с алккодом, продублирую на всякий случай в своей теме код получения его из pdf.
по ссылке была на 1С, переписал на шарпе (проверил на нескольких кодах, вроде работает верно):
на delphi:
А не подскажите еще такую штуку... Мне нужно оператору/эксперту при сканировании партии по-человечески ругнуться, что отсканированная марка (бутылка) должна быть исключена для работы (например потому что она уже числится принятой на складе). Разумеется человек не сможет понять что марка "22N00001CJFID****" требует удаления, но заметил, что на самой бумажной марке есть два строковых кода, которые дублируются в самой марке с 20 символа (как раз после алккода, один на 12 символов, второй на 6). Эти два кода расположены возле марки (могу картинку вставить, если не понятно). Вопрос - эти коды уникальны для марки (да и вообще что они означают)? чтобы я мог их использовать для указания конкретной бутылки.
по ссылке была на 1С, переписал на шарпе (проверил на нескольких кодах, вроде работает верно):
Код: Выбрать все
public string GetAlcoCodeFromPDF417(string pdf417)
{
if (pdf417.Length == 68)
{
string base_sys = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string sub = pdf417.Substring(7, 12).ToUpper();
UInt64 ex = 1;
UInt64 alccode = 0;
int k;
for (int i = sub.Length; i > 0; i--)
{
k = base_sys.IndexOf(sub[i - 1]);
alccode = alccode + (UInt64)k * ex;
ex = ex * 36;
}
sub=alccode.ToString();
if (sub.Length < 19) {
sub = sub.PadLeft(19, '0');
}
return sub;
}
else {
throw new Exception("Длина не соответствует PDF417.");
}
}
на delphi:
Код: Выбрать все
function GetAlcoCodeFromPDF417(const pdf417:string): string;
var i:integer; base_sys,sub: string;
ex,alccode,k: int64;
begin
base_sys:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
sub := UpperCase(copy(pdf417,8,12));
ex:=1;
alccode:=0;
for i:=length(sub) downto 1 do begin
k:=pos(sub[i],base_sys)-1;
alccode:=alccode+ k*ex;
ex:=ex*36;
end;
result:=IntToStr(alccode);
if(length(Result)<19) then
result:=StringOfChar('0', 19 - length(Result))+Result;
end;
А не подскажите еще такую штуку... Мне нужно оператору/эксперту при сканировании партии по-человечески ругнуться, что отсканированная марка (бутылка) должна быть исключена для работы (например потому что она уже числится принятой на складе). Разумеется человек не сможет понять что марка "22N00001CJFID****" требует удаления, но заметил, что на самой бумажной марке есть два строковых кода, которые дублируются в самой марке с 20 символа (как раз после алккода, один на 12 символов, второй на 6). Эти два кода расположены возле марки (могу картинку вставить, если не понятно). Вопрос - эти коды уникальны для марки (да и вообще что они означают)? чтобы я мог их использовать для указания конкретной бутылки.
- Steel Rain
- Сообщений: 510
- Зарегистрирован: 21 дек 2015, 11:41
- antonn
- Сообщений: 400
- Зарегистрирован: 12 янв 2016, 13:34
Re: Получить информацию из PDF417
Я там и "полистал", но моя тема в профиле останется, если понадобится еще раз ее найти.
- Vodik
- Сообщений: 3
- Зарегистрирован: 09 июн 2016, 09:01
Re: Получить информацию из PDF417
Получение алкокода на c++.
string get_alco_code(const std::string& pdf417)
{
constexpr int base = 36;
const string base_sys = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
long long digit = 0;
string alco_code = pdf417.substr(3, 16);
double power = alco_code.size() - 1;
double found = 0.00;
for (int i=0; i<alco_code.size(); ++i) {
found = (double)base_sys.find(alco_code[i]);
digit += found * pow(base, power);
--power;
}
ostringstream ss;
ss << digit;
alco_code = ss.str();
while (alco_code.size() < 19)
alco_code.insert(0, 1,'0');
return alco_code;
}
string get_alco_code(const std::string& pdf417)
{
constexpr int base = 36;
const string base_sys = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
long long digit = 0;
string alco_code = pdf417.substr(3, 16);
double power = alco_code.size() - 1;
double found = 0.00;
for (int i=0; i<alco_code.size(); ++i) {
found = (double)base_sys.find(alco_code[i]);
digit += found * pow(base, power);
--power;
}
ostringstream ss;
ss << digit;
alco_code = ss.str();
while (alco_code.size() < 19)
alco_code.insert(0, 1,'0');
return alco_code;
}
- antonn
- Сообщений: 400
- Зарегистрирован: 12 янв 2016, 13:34
Re: Получить информацию из PDF417
Ну и для mssql
Код: Выбрать все
ALTER function [dbo].[EGAIS_GetAlcoFromPDF417](@PDF417 nvarchar(80)) returns nvarchar(255)
as
begin
declare @sub nvarchar(19),@base_sys nvarchar(36)
set @base_sys='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
set @sub=upper(SUBSTRING(@PDF417,8,12));
declare @i int,@k int,@s nvarchar(1),@alccode numeric(20),@ex numeric(20)
set @i=LEN(@sub);
set @alccode=0;
set @ex=1;
while @i>0 begin
set @k=CHARINDEX( SUBSTRING( @sub,@i,1),@base_sys)-1
set @alccode=@alccode+@k*@ex;
set @ex=@ex*36;
set @i=@i-1
end
set @sub=cast(@alccode as nvarchar(255))
if(LEN(@sub)<19) begin
set @sub=REPLICATE('0',19-len(@sub))+@sub;
end
return @sub;
end
- Евгений_Б
- Сообщений: 88
- Зарегистрирован: 09 ноя 2015, 01:43
- Откуда: Курган
Re: Получить информацию из PDF417
Добавлю вариант dll на c
Код: Выбрать все
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> /* sprintf, NULL */
#include <stdlib.h> /* strtoull */
extern "C" __declspec(dllexport) int Conv36to10(char* cNum36, char* cRes)
{
char * pEnd;
char buffer[50];
int n;
unsigned long long int ulli1;
ulli1 = strtoull(cNum36, &pEnd, 36);
n=sprintf(cRes, "%llu", ulli1);
return n;
}
Разработка ПО для оптовой и розничной торговли , ЕГАИС http://vdm45.ru/
- antonn
- Сообщений: 400
- Зарегистрирован: 12 янв 2016, 13:34
Re: Получить информацию из PDF417
Есть марка 45380149022008810078407811130010014618708259322627241511709568836749 и 45380149022008810078407811130010002437813446535872913510995632603702, выше приведенный код выделяет из марки АлкКод 1184804097210768967. Но такой отсутствует в ЕГАИС, а вот запрос через личный кабинет указывает что алккод для такой марки должен быть 038014902200881007. Он еще и не 19 символов... Правда марка древняя, 2008 год, но вроде запрета продажи на такие нет?
Попробуйте у себя в системах выделить из марки алккод, получается ли у вас 038014902200881007?
Попробуйте у себя в системах выделить из марки алккод, получается ли у вас 038014902200881007?
Вернуться в «Вопросы по подключению к системе ЕГАИС Опт и Розница»
Кто сейчас на форуме
Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 5 гостей