📄 barcode.c
字号:
#include "PublHead.h"
// 检测是否为不是全0的数字串
static BOOL ChkBatNoOrBarCode(String * ascbuf,U8 length)
{
if(IsALLSrc((U8 *)ascbuf,'0',length) == TRUE)
{
return(FALSE);
}
for( ; length ; length--)
{
if(isdigit(*ascbuf) == 0)
{
return(FALSE);
}
ascbuf++;
}
return(TRUE);
}
// 把Asc串整理成BCD格式的条码或货号,长度不足自动补0
static BOOL TrimRBatchNoOrBarCode(U8 * batorbar,String * ascbuf,U8 length,U8 codlen)
{
U8 i,maxlen;
U8 tmpbuf[0x100];
maxlen = codlen * 2;
if(length > maxlen)
{
return(FALSE);
}
memset(tmpbuf,'0',maxlen); //补货号前导0
memcpy(tmpbuf+maxlen-length,ascbuf,length); //复制货号数据到tmpbuf
for(i=0 ; i<codlen ; i++)
{
batorbar[i] = ((tmpbuf[2*i] & 0x0f) * 0x10) + (tmpbuf[2*i+1] & 0x0f);
}
return(TRUE);
}
//[函数] 将输入的货号转化为压缩的BCD格式
// 如果长度不满14,则以右对齐
//[输入] batchNo 输出的货号
// ascbuf 要转化的货号
// length 输入货号的长度
//[输出] 成功或者失败
extern BOOL ParsePluBatchNo(U8 * batchNo,String * ascbuf,U8 length)
{
if(ChkBatNoOrBarCode(ascbuf,length) == FALSE)
{
return(FALSE);
}
return(TrimRBatchNoOrBarCode(batchNo,ascbuf,length,LEN_BATCHNO));
}
//[函数] 分解13码
// 有效的13码以'2'开头
//[输入] 无
//[输出] 无
//[返回] 成功或者失败
static BOOL Allot13Code(String * InputBuf)
{
U8 i;
U16 sum;
sum = InputBuf[0] & 0x0f;
for(i=0 ; i<6 ; i++)
{
sum += ((InputBuf[i*2+1] & 0x0f) * 3 + (InputBuf[i*2+2] & 0x0f));
}
if((sum % 10) != 0)
{
return(FALSE);
}
if(InputBuf[0] != '2')
{ //不是内部码,是通用条码,直接返回
return(TRUE);
}
//解析店内码
//...... 预留店内码解析接口
//...... 预留店内码解析接口
return(TRUE);
}
//[函数] 将输入的条码转化为压缩的BCD格式
// 如果长度不满14,则以右对齐
//[输入] barcode 输出的条码
// ascbuf 要转化的条码
// length 输入条码的长度
//[输出] 成功或者失败
extern BOOL ParsePluBarcode(U8 * barcode,String * ascbuf,U8 length)
{
if(ChkBatNoOrBarCode(ascbuf,length) == FALSE)
{
return(FALSE);
}
if(length == 13)
{ //如果是13码,分解13码 初始化条码数据,批次,折扣
if(Allot13Code(ascbuf) == FALSE)
{
return(FALSE);
}
}
return(TrimRBatchNoOrBarCode(barcode,ascbuf,length,LEN_BARCODE));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -