Полезная информация, прямо не относящаяся к данному форуму и если админ решит удалить, то так тому и быть!
Ниже приведенная информация носит исключительно справочный характер и предназначена исключительно для пользователей kkmserver
Мне лично не понятно зачем надо было " и ' использовать, но да ладно, им там виднее ......
пример на javascript
function f_NUMtoMRZ(n) //n=цена в копейках
{
var st="",b=80,tn=0,r=0;
var BS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"+'"'+"%&'*+-./_,:;=<>?";
while (n!=0)
{
r=n % b;
n=Math.floor(n/b);
st=BS[r]+st;
}
return st;
}
function f_MRZtoNUM(n) //Из 80-й системы счисления в МРЦ
{
var e=1,k=0,st=0,b=80;
var BS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"+'"'+"%&'*+-./_,:;=<>?";
var i=n.length-1;
while (i>-1)
{
k=BS.indexOf(n);
st=st+k*e;
e=e*b;
i--;
}
return st/100;
}
И еще для справки....
Код маркировки на сигаретах состоит из четырех групп кодов:
GTIN - 14 символов, тот же ШК дополненный нулями
USN - 7 символов уникальный серийный номер
MRZ - 4 символа это МРЦ в 80 системе дополненная A до 4-х символов
KOD - 4 символа код проверки
Честный ЗНАК 80-я система счисления МРЦ Табачная продукция
Re: Честный ЗНАК 80-я система счисления МРЦ Табачная продукция
они там в маркировке закодировали цену в 80-ричной системе??? "месье знает толк..."
контакт для связи - telegram @zmiulan
- saratovout
- Сообщения: 260
- Зарегистрирован: 08 авг 2019, 23:52
- Откуда: Boston
- Контактная информация:
Re: Честный ЗНАК 80-я система счисления МРЦ Табачная продукция
Вы просто не догадываетесь о их далеко идущих планах по МРЦ.
good films make your life better..
Re: Честный ЗНАК 80-я система счисления МРЦ Табачная продукция
Ммм.... туплю... О чем речь?
Re: Честный ЗНАК 80-я система счисления МРЦ Табачная продукция
Я тут дописал функцию к своему проекту, основанному на вашем расширении, по продаже сигарет (табачная продукция), путем сканирования маркировки на пачке. Для удобства ведения базы товаров ШК и цена берется прямо из маркировки с пачки в виде МРЦ, для дальнейшего использования в чеке. При осмысливании особенностей маркировки сигарет я столкнулся с трудностями в поиске описания ключа основания 80-ричной системы маркировки, и потому решил поделиться тут, может кому то это сэкономит время .
И еще немного информации для справки))))
В принципе не смотря на всю сложность со считыванием маркировки с сигарет, в виде размера маркировки, спайки пленки в местах размещения маркировки, бликов от пленки, двойная пленка на блоках и считывании через две пленки по 10 маркировок, хочу отметить что даже весьма бюджетная модель 2д сканера HH400 за 3 т.р. вполне хорошо справляется со своей задачей, при условии активации режима цветного сканирования и при условии считывания на расстоянии 10-20 см под углом 50-30 гр. в диагональных направлениях квадрата маркировки, желательно в торец шва спайки пленки
Re: Честный ЗНАК 80-я система счисления МРЦ Табачная продукция
Спасибо добрый человек. Воспользовался вашим решением. Выложу тоже мои наброски в php. Скрипт простой - определяет что передали в форму в поле input text, и если это штрих код, то определяет его три вариации - что это штрих код ean с пачки, или matrix code с пачки или с блока.
Мое решение работает со сканером как включение в клавиатуру (не com) и переводит текст если включена русская раскладка клавиатуры.
На выходе получаем массив -
[vid] - 1 это ean, 2 это matrix пачки, 3 это matrix блока
[sh] - штрих-код (gtin)
[csh] чистый штрих-код (gtin), с убранными первыми нулями (для хранения в бд)
[serial] - серийный номер для отправки через кассу в ОФД в купе с gtin из второго поля массива
[mrc] - мрц в рублях
[codе] - проверочный код. ХЗ зачем нужен
Мое решение работает со сканером как включение в клавиатуру (не com) и переводит текст если включена русская раскладка клавиатуры.
Код: Выделить всё
<form action="testing.php" method="post">
<input type="text" name="sh" id="sh"><input type="submit" value="Отправить">
</form>
<script>
document.getElementById("sh").focus();
</script>
<?php
if (!empty($_POST['sh'])) print_r(getcode($_POST['sh']));
function getcode($sh)
{
$qr=array();
$sh=translatematrix($sh);
//определяем по длине что к нам попало - штрихкод, датаматрикс пачка или датаматрикс блок
if (strlen($sh)<15)
{
//это простой штрихкод
$qr['vid']="1";
$barcode=str_replace(" ","",$barcode);
$barcode = preg_replace("~\D+~","",$barcode);
$qr['sh']=$sh;
$qr['csh']=$sh;
}
if (strlen($sh)==29)
{
//это датаматрикс пачки
$qr['vid']="2";
$qr['sh']=substr($sh,0,14);
$len = mb_strlen($qr['sh']);
for ($k = 0; $k < $len; $k++)
{
$char= mb_substr($qr['sh'], $k, 1);
if ($char>'0') {$qr['csh']=substr($qr['sh'],$k);break;}
}
$qr['serial']=substr($sh,14,7);
$qr['mrc']=strtomrc(substr($sh,21,4));
$qr['code']=substr($sh,25,4);
}
if (strlen($sh)==55)
{
//это датаматрикс блока
$qr['vid']="3";
$qr['sh']=substr($sh,2,14);
$len = mb_strlen($qr['sh']);
for ($k = 0; $k < $len; $k++)
{
$char= mb_substr($qr['sh'], $k, 1);
if ($char>'0') {$qr['csh']=substr($qr['sh'],$k);break;}
}
$qr['serial']=substr($sh,14);
}
return $qr;
}
function strtomrc($n) //Из 80-й системы счисления в МРЦ
{
$e=1;$k=0;$st=0;$b=80;
$BS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"%&'*+-./_,:;=<>?";
$i=strlen($n)-1;
while ($i>-1)
{
$k=strpos($BS,$n[$i]);
$st=$st+$k*$e;
$e=$e*$b;
$i--;
}
return $st/100;
}
function translatematrix($str)
{
$word="";
$len = mb_strlen($str);
$chars = array();
$alltranslate=false;
for ($k = 0; $k < $len; $k++)
{
$char= mb_substr($str, $k, 1);
$nchar=$char;
if (ord($char)>128 || $alltranslate==true) {$nchar=setenglish($char);$alltranslate=true;}
//echo $char." ".ord($char)." ".$nchar."<br>";
$word.=$nchar;
}
return $word;
}
function setenglish($str)
{
$tr = array(
"ф"=>"a","Ф"=>"A","ы"=>"s","Ы"=>"S",
"в"=>"d","В"=>"D","а"=>"f","А"=>"F","п"=>"g",
"П"=>"G","р"=>"h","Р"=>"H","о"=>"J","О"=>"J",
"л"=>"k","Л"=>"K","д"=>"l","Д"=>"L","ж"=>";",
"Ж"=>":","э"=>"'","Э"=>"\"",
"я"=>"z","Я"=>"Z","ч"=>"x","Ч"=>"X",
"с"=>"c","С"=>"C","м"=>"v","М"=>"V",
"и"=>"b","И"=>"B","т"=>"n","Т"=>"N",
"ь"=>"m","Ь"=>"M","б"=>",","Б"=>"<",
"ю"=>".","Ю"=>">","."=>"/",","=>"?",
"й"=>"q","Й"=>"Q","ц"=>"w","Ц"=>"W",
"у"=>"e","У"=>"E","к"=>"r","К"=>"R",
"е"=>"t","Е"=>"T","н"=>"y","Н"=>"Y",
"г"=>"u","Г"=>"U","ш"=>"i","Ш"=>"I",
"щ"=>"o","Щ"=>"O","з"=>"p","З"=>"P",
"х"=>"[","Х"=>"{","ъ"=>"]","Ъ"=>"}",
);
return strtr($str,$tr);
}
?>
На выходе получаем массив -
[vid] - 1 это ean, 2 это matrix пачки, 3 это matrix блока
[sh] - штрих-код (gtin)
[csh] чистый штрих-код (gtin), с убранными первыми нулями (для хранения в бд)
[serial] - серийный номер для отправки через кассу в ОФД в купе с gtin из второго поля массива
[mrc] - мрц в рублях
[codе] - проверочный код. ХЗ зачем нужен