您的位置:首页 > 游戏 > 手游 > 动漫制作专业名人_家电维修企业网站源码_百度搜索页_今天时政新闻热点是什么

动漫制作专业名人_家电维修企业网站源码_百度搜索页_今天时政新闻热点是什么

2025/2/24 12:12:00 来源:https://blog.csdn.net/ceffans/article/details/145611292  浏览:    关键词:动漫制作专业名人_家电维修企业网站源码_百度搜索页_今天时政新闻热点是什么
动漫制作专业名人_家电维修企业网站源码_百度搜索页_今天时政新闻热点是什么

在Zint中BARCODE_CODE39、BARCODE_EXCODE39是 Code 3 of 9(Code 39)条形码的不同变体。

BARCODE_CODE39码:标准39码

  • 字符集:支持44个字符,包括数字(0-9)、大写字母(A-Z)和7个特殊字符(-、.、空格、$、/、+、%)。
  • 结构:每个字符由9个元素组成,包含5条和4空,其中3条是宽的,其他元素是窄的。起始和终止字符为“*”。
  • 应用:广泛应用于物流、制造、医疗和资产管理等领域,适合编码长度较短的字符串。
    标准的39码不需要校验码,但是如果需要的话可通过设置option_2的值添加modulo-43校验码。
    文档中如是说:
    The standard does not require a check digit but a modulo-43 check digit can be added if desired by setting --vers=1 (API option_2 = 1). To add a check digit but not show it in the Human Readable Text, set --vers=2 (API option_2 = 2).
    校验码计算规则:Code 39 支持可选的 Modulo 43 校验位,用于提高数据准确性。
  • 为每个字符分配一个权重值(0 到 42)。
  • 将所有字符的权重值相加,得到总和。
  • 校验位是总和对 43 取模的结果,对应的字符即为校验位。
//字符权重对照
0-9: 0-9
A-Z: 10-35
-: 36
.: 37
空格: 38
$: 39
/: 40
+: 41
%: 42

BARCODE_EXCODE39码:扩展39码

  • 字符集:支持128个ASCII字符,包括标准Code 39支持的44个字符以及其他字符。它通过将标准Code 39字符组合的方式来表示额外的字符,例如小写字母和控制字符。
  • 结构:与标准Code 39相同,依然使用9个元素(5条和4空)来表示一个字符。
  • 应用:适用于需要编码更多字符的应用场景,如包括小写字母、特殊字符和控制字符的字符串。
    Extended Code 39码不需要校验码,但是如果需要的话可通过设置option_2的值添加modulo-43校验码。
    校验码计算规则:扩展39码支持所有的ASCII码,校验码计算方法跟标准39码一样。权重值为各字符的ASCII码值。

标准Code 39适用于编码长度较短且不需要复杂字符的字符串,Extended Code 39适用于需要编码更多字符和更复杂字符串的场景。

以下即为生成代码:

struct zint_symbol* symbol;
symbol = ZBarcode_Create();
symbol->symbology = BARCODE_CODE39;   //码制
symbol->input_mode = DATA_MODE; //数据编码格式
//symbol->option_2 = 1;   //1 校验std::string strContent = "123456";
CRect rcCode(0,0,200,50);
int nRet = ZBarcode_Encode_and_Buffer_Vector(symbol, (unsigned char*)strContent.c_str(), strContent.size(), 0);
if (nRet == 0)
{//successZBarcode_Print(symbol, 0);std::vector<CRect> vecBlackRect;if (symbol->vector){struct zint_vector_rect* rect = symbol->vector->rectangles;while (rect){CRect rcTmp;rcTmp.left = rect->x;rcTmp.top = rect->y;rcTmp.right = rcTmp.left + rect->width;rcTmp.bottom = rcTmp.top + rect->height;vecBlackRect.push_back(rcTmp);rect = rect->next;        }    }double nDrawUint = (double)rcCode.Width() / symbol->width;double nUint = (double)symbol->bitmap_width / symbol->width;std::vector<CRect> vecDrawBlack;  //绘制条码条的真实区域for (int i = 0; i < vecBlackRect.size(); i++){CRect rcTmp(vecBlackRect[i]);rcTmp.left = rcTmp.left / nUint * nDrawUint;rcTmp.right = rcTmp.right / nUint * nDrawUint;rcTmp.bottom = rcTmp.top + rcCode.Height();vecDrawBlack.push_back(rcTmp);   }//绘制条码//可选择是否绘制条码背景色{COLORREF clrBkgnd = GETCOLOR(L"RGB(255,255,255)");CAutoRefPtr<IBrush> brush, oldbrush;pRT->CreateSolidColorBrush(clrBkgnd, &brush);pRT->SelectObject(brush, (IRenderObj**)&oldbrush);pRT->FillRectangle(&rcCode);pRT->SelectObject(oldbrush, NULL);    }CAutoRefPtr<IPath> path;GETRENDERFACTORY->CreatePath(&path);for (int i = 0; i < vecDrawBlack.size(); i++){CRect rcBlack;rcBlack.left += vecDrawBlack[i].left + rcCode.left;rcBlack.top += vecDrawBlack[i].top + rcCode.top;rcBlack.right = rcBlack.left + vecDrawBlack[i].Width();rcBlack.bottom = rcBlack.top + vecDrawBlack[i].Height();path->addRect(rcBlack);  }COLORREF clrFrgnd = GETCOLOR(L"RGB(0,0,0)"); //可自定义条码前景色CAutoRefPtr<IBrush> brush, oldbrush;pRT->CreateSolidColorBrush(clrFrgnd, &brush);pRT->SelectObject(brush, (IRenderObj**)&oldbrush);pRT->FillPath(path);pRT->SelectObject(oldbrush, NULL);//绘制文本(文本绘制可以选择绘制在底部还是顶部,自行计算文本位置然后进行绘制)SIZE szContent;pRT->MeasureText(m_sstrContent, m_sstrContent.GetLength(), &szContent); //文本整体的长度CRect rcText(rcCode);rcText.top = rcCode.bottom;rcText.bottom = rcText.top + szContent.cy;pRT->DrawText(m_sstrContent, -1, (LPRECT)rcText, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
}
else
{//failed//可查看errtxt值查看失败描述
}
ZBarcode_Delete(symbol);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com