此算法实现将给定的条形码编码转换成黑白条的二进制代码,利用此二进制代码可以打印出条形码.例如条形码编码"9787115159342"转换为黑白条二进制代码为"20201110110001001001000100110010110011011000102020110011010011101110100100001010111001101100202"(为了区分警戒条和有效编码,将警戒条用2表示),打印输出条形码图案时遇到2打印长条,遇到1打印短条,遇到0则空出,这样输出的即为条码图案.
调试环境:VC++ 6.0 Win32 Console Application
#include "stdafx.h"
#include "string.h"
#include "stdio.h"
char Ji_ou[10][6] = {
1,1,1,1,1,1,
1,1,0,1,0,0,
1,1,0,0,1,0,
1,1,0,0,0,1,
1,0,1,1,0,0,
1,0,0,1,1,0,
1,0,0,0,1,1,
1,0,1,0,1,0,
1,0,1,0,0,1,
1,0,0,1,0,1
}; //奇偶性编码表
char Left[10][2][8] =
{
"0100111","0001101",
"0110011","0011001",
"0011011","0010011",
"0100001","0111101",
"0011101","0100011",
"0111001","0110001",
"0000101","0101111",
"0010001","0111011",
"0001001","0110111",
"0010111","0001011"
}; //左侧编码表
char Right[10][8] =
{
"1110010",
"1100110",
"1101100",
"1000010",
"1011100",
"1001110",
"1010000",
"1000100",
"1001000",
"1110100"
}; //右手编码表
void Code(char num[],char code[]) //编码
{
int i;
strcpy(code,"202"); //左警戒条
for(i=1;i<7;i++) //左边编码
strcat(code,Left[num-'0'][Ji_ou[num[0]-'0']]);
strcat(code,"02020"); //中间警戒条
for(i=7;i<13;i++) //右边编码
strcat(code,Right[num-'0']);
strcat(code,"202"); //右警戒条
}
int CheckSum(char num[],int flag) //检测效验和
{
int sum=0;
for(int i=0;i<12;i++)
sum += (num-'0') * (i%2==0 ? 1 : 3);
if((sum + num[12] -'0') % 10 == 0)
return 1;
else
{
if(flag) //修正效验位
num[12]=(10000-sum) % 10 + '0';
return 0;
}
}
int main(int argc, char* argv[])
{
char num[15]="9787115159342";
char code[100]="NOT SOLVED!";
if(!CheckSum(num,1))
printf("WARNING:CHECKSUM ERROR! System has restored it!/n");
Code(num,code);
printf("The num is %s/n",num);
printf("The binary code is %s/n",code);
return 0;
}
EAN-13条形码打印算法
最新推荐文章于 2022-10-23 17:33:52 发布
这篇博客介绍了一个算法,该算法将EAN-13条形码编码转换为黑白条的二进制表示,以便于打印条形码。通过在VC++ 6.0环境下调试,程序首先根据奇偶性编码表、左侧编码表和右侧编码表生成条形码的二进制代码,并检查效验和进行校正。
5262

被折叠的 条评论
为什么被折叠?



