SOUI基于Zint生成EAN碼

EAN碼廣泛應用與歐洲的零售業。包括EAN-2、EAN-5、EAN-8和EAN-12碼。分別編碼 2、5、7 或 12 位數字。此外,可以使用 + 字符將 EAN-2 和 EAN-5 附加符號添加到 EAN-8 和 EAN-13 符號中,就像 UPC 符號一樣。
EAN-8校驗碼計算:

  • 從左往右奇數位的數相加乘以3得出C1
  • 偶數位的數相加得出C2
  • C1+C2得出CC
  • 找到比CC大的最小10的倍數為CX
  • CX-CC的值即為校驗碼
    EAN-13校驗碼計算跟EAN-8計算規則一樣。

例如:7432365
C1 = (5+3+3+7)*3; C1=54;
C2 =6+2+4; C2=12;
CC=C1+C2; CC=66;
CC=70;
校驗碼即為CX-CC; 70-66=4;

EAN碼默認生成校驗碼文檔中是這樣描述的:
All of the EAN symbols include check digits which are added by Zint. If you are encoding an EAN-8 or EAN-13 symbol and your data already includes the check digit then you can use symbology BARCODE_EANX_CHK (14) which takes an 8 or 13-digit input and validates the check digit before encoding
下邊我們一起來看看EAN-8跟EAN-13碼生成相關的代碼:

std::string strContent = "1234567";
CRect rcCode(0,0,200,50);struct zint_symbol* symbol;
symbol = ZBarcode_Create();
symbol->symbology = BARCODE_EANX;  //BARCODE_EANX_CHK
symbol->input_mode = DATA_MODE; //數據編碼格式
int nRet = ZBarcode_Encode_and_Buffer_Vector(symbol, (unsigned char*)strContent.c_str(), strContent.size(), 0);
if (nRet == 0)
{ZBarcode_Print(symbol, 0);//拿到繪制的所有黑色條int nMinLen = 500;int nMaxLen = 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);if (rect->height > nMaxLen) nMaxLen = rect->height;if (rect->height < nMinLen) nMinLen = rect->height;rect = rect->next;}}//計算在rcCode中繪制每個單位的寬跟標準的寬,主要繪制的時間用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;if (rcTmp.Height() == nMaxLen){//長條  //實際繪制的rc的top跟bottom即為rcCode的top跟bottom   }else{//短條//此處如果要區分文本位置則需要特殊處理//如果文本在上邊則繪制的rc的top為rcCode的top加上文本高度或者自定義的一個高度。rc的bottom為rcCode的bottom//如果文本在下邊則繪制的rc的top為rcCode的top。rc的bottom為rcCode的bottom減去文本高度或者自定義的一個高度       }            }//拿到計算出的真實繪制區域然后再進行單個繪制或者以路徑的方式繪制//TODO://文本的繪制//EAN-8碼的文本分成了2部分,在繪制時分別繪制即可//TODO:
}

EAN-13碼的繪制基本與EAN-8相同,也是分出長短條再分別繪制。不同的地方在于再繪制EAN-13碼時文本時分成3部分的(參考UPC-E碼)。
對于EAN-2、EAN-5碼以及組合碼都可做相似的處理。
EAN-2、EAN-5碼可作為EAN-8、EAN-13碼的補充碼出現。
比如:1234567+12(EAN8+EAN2)該數據在生成時是會生成一個EAN-8碼跟EAN-2碼在繪制時分開繪制即可。

另外在實際使用中如果傳入的數據匹配不到對應的位數Zint會通過在數據前邊添加0的方式來處理。
比如:傳入1,位數達不到兩位Zint會自動補個0使數據變為01然后再按EAN-2碼格式編碼;
傳入123456,位數不夠七位會自動補全成0123456然后再處理;
對于組合碼也同樣:123456+1位數不夠,會自動補全成0123456+01然后在處理;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72343.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QT實現簡約美觀的動畫Checkbox

*最終效果: * 一共三個文件: main.cpp , FancyCheckbox.h , FancyCheckbox.cpp main.cpp #include <QApplication> #include "FancyCheckbox.h" #include <QGridLayout> int main(int argc, char *argv[]) {QApplication a(argc, argv);QWidget* w new…

arm | lrzsz移植記錄

1 我的使用場景 開發板無網絡, 無奈只得用U盤拷貝文件 文件不大, 每次都插拔U盤, 很繁瑣 原來的環境不支持rz等命令 就需要移植這個命令來使用 下載地址 https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 2 編譯腳本 # 主要內容在這里 configure_for_arm(){mkdir -p $PA…

Hadoop之01:HDFS分布式文件系統

HDFS分布式文件系統 1.目標 理解分布式思想學會使用HDFS的常用命令掌握如何使用java api操作HDFS能獨立描述HDFS三大組件namenode、secondarynamenode、datanode的作用理解并獨立描述HDFS讀寫流程HDFS如何解決大量小文件存儲問題 2. HDFS 2.1 HDFS是什么 HDFS是Hadoop中的一…

矩陣 trick 系列 題解

1.AT_dp_r Walk&#xff08;矩陣圖論&#xff09; 題意 一個有向圖有 n n n 個節點&#xff0c;編號 1 1 1 至 n n n。 給出一個二維數組 A 1... n , 1... n A_{1...n,1...n} A1...n,1...n?&#xff0c;若 A i , j 1 A_{i,j}1 Ai,j?1 說明節點 i i i 到節點 j j j …

使用AoT讓.NetFramework4.7.2程序調用.Net8編寫的庫

1、創建.Net8的庫&#xff0c;雙擊解決方案中的項目&#xff0c;修改如下&#xff0c;啟用AoT&#xff1a; <Project Sdk"Microsoft.NET.Sdk"><PropertyGroup><OutputType>Library</OutputType><PublishAot>true</PublishAot>&…

Goby 漏洞安全通告| Ollama /api/tags 未授權訪問漏洞(CNVD-2025-04094)

漏洞名稱&#xff1a;Ollama /api/tags 未授權訪問漏洞&#xff08;CNVD-2025-04094&#xff09; English Name&#xff1a;Ollama /api/tags Unauthorized Access Vulnerability (CNVD-2025-04094) CVSS core: 6.5 風險等級&#xff1a; 中風險 漏洞描述&#xff1a; O…

端到端自動駕駛——cnn網絡搭建

論文參考&#xff1a;https://arxiv.org/abs/1604.07316 demo 今天主要來看一個如何通過圖像直接到控制的自動駕駛端到端的項目&#xff0c;首先需要配置好我的仿真環境&#xff0c;下載軟件udacity&#xff1a; https://d17h27t6h515a5.cloudfront.net/topher/2016/November…

藍橋杯試題:二分查找

一、問題描述 給定 n 個數形成的一個序列 a&#xff0c;現定義如果一個連續子序列包含序列 a 中所有不同元素&#xff0c;則該連續子序列便為藍橋序列&#xff0c;現在問你&#xff0c;該藍橋序列長度最短為多少&#xff1f; 例如 1 2 2 2 3 2 2 1&#xff0c;包含 3 個不同的…

網絡空間安全(7)攻防環境搭建

一、搭建前的準備 硬件資源&#xff1a;至少需要兩臺計算機&#xff0c;一臺作為攻擊機&#xff0c;用于執行攻擊操作&#xff1b;另一臺作為靶機&#xff0c;作為被攻擊的目標。 軟件資源&#xff1a; 操作系統&#xff1a;如Windows、Linux等&#xff0c;用于安裝在攻擊機和…

DeepSpeek服務器繁忙?這幾種替代方案幫你流暢使用!(附本地部署教程)

作者&#xff1a;后端小肥腸 目錄 1. 前言 2. 解決方案 2.1. 納米AI搜索&#xff08;第三方平臺&#xff09; 2.2. Github&#xff08;第三方平臺&#xff09; 2.3. 硅基流動&#xff08;第三方API&#xff09; 3. 本地部署詳細步驟 3.1. 運行配置需求 3.2. 部署教程 4…

prisma+supabase報錯無法查詢數據

解決方案&#xff0c;在DATABASE_URL后面增加?pgbouncertrue

c語言中return 數字代表的含義

return 數字的含義&#xff1a;表示函數返回一個整數值&#xff0c;通常用于向調用者&#xff08;如操作系統或其他程序&#xff09;傳遞程序的執行狀態或結果。 核心規則&#xff1a; return 0&#xff1a; 含義&#xff1a;表示程序或函數正常結束。 示例&#xff1a; int m…

Spark內存迭代計算

一、寬窄依賴 窄依賴&#xff1a;父RDD的一個分區數據全部發往子RDD的一個分區 寬依賴&#xff1a;父RDD的一個分區數據發往子RDD的多個分區&#xff0c;也稱為shuffle 二、Spark是如何進行內存計算的&#xff1f;DAG的作用&#xff1f;Stage階段劃分的作用&#xff1f; &a…

Linux知識-第一天

Linux的目錄機構為一個樹型結構 其沒有盤符這個概念&#xff0c;只有一個根目錄&#xff0c;所有文件均在其之下 在Linux系統中&#xff0c;路徑之間的層級關系 使用 / 開頭表示根目錄&#xff0c;后面的表示層級關系 Linux命令入門 Linux命令基礎 Linux命令通用格式 comman…

QT實現單個控制點在曲線上的貝塞爾曲線

最終效果: 一共三個文件 main.cpp #include <QApplication> #include "SplineBoard.h" int main(int argc,char** argv) {QApplication a(argc, argv);SplineBoard b;b.setWindowTitle("標準的貝塞爾曲線");b.show();SplineBoard b2(0.0001);b2.sh…

繪制思維導圖畫布選型

在實現思維導圖/知識圖譜的繪制時&#xff0c;選擇合適的「畫布」技術方案至關重要。以下是不同技術路線的對比分析和推薦方案&#xff1a; 一、技術方案對比 技術類型實現方式優點缺點適用場景普通DOM元素使用<div>CSS布局&#x1f539; 開發簡單&#x1f539; 天然支持…

運維Splunk面試題及參考答案

目錄 通過轉發器導入數據的優勢有哪些(如帶寬控制、負載均衡等) 描述 Universal Forwarder 與 Heavy Forwarder 的差異 如何配置轉發器實現數據的過濾與預處理 轉發器的本地緩存機制如何保證數據可靠性 如何通過部署服務器統一管理多個轉發器的配置 什么是 “查找表(L…

年后寒假總結及計劃安排

年后寒假總結 年后主要學習了微服務&#xff0c;nacos (服務注冊中心)&#xff0c;feign&#xff08;遠程調用&#xff09;&#xff0c;網關&#xff0c;雙token&#xff08;相較于之前更加規范&#xff0c;更加符合企業級&#xff09;&#xff0c;配置管理 &#xff0c;mybati…

word中交叉引用多篇參考文獻格式[1-2]或[1-4]操作

劃重點 更改左域名&#xff0c;輸入 \#"[0" 更改中間域名&#xff0c;輸入\#"" 更改右域名&#xff0c;輸入 \#"0]" 1.[2-3]格式 首先點擊交叉引用&#xff0c;引用參考文獻 右擊鼠標&#xff0c;點擊切換域代碼&#xff0c;對于左域名 刪除 * …

【銀河麒麟高級服務器操作系統】服務器測試業務耗時問題分析及處理全流程分享

更多銀河麒麟操作系統產品及技術討論&#xff0c;歡迎加入銀河麒麟操作系統官方論壇 https://forum.kylinos.cn 了解更多銀河麒麟操作系統全新產品&#xff0c;請點擊訪問 麒麟軟件產品專區&#xff1a;https://product.kylinos.cn 開發者專區&#xff1a;https://developer…