⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 barcode.c

📁 将输入的货号转化为压缩的BCD格式.如果长度不满14,则以右对齐
💻 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 + -