// EAN_UPC.cpp: implementation of the CEAN_UPC class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "EAN_UPC.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CEAN_UPC::CEAN_UPC()
{
code[0][0]="0001101"; code[0][1]="0100111"; code[0][2]="1110010";
code[1][0]="0011001"; code[1][1]="0110011"; code[1][2]="1100110";
code[2][0]="0010011"; code[2][1]="0011011"; code[2][2]="1101100";
code[3][0]="0111101"; code[3][1]="0100001"; code[3][2]="1000010";
code[4][0]="0100011"; code[4][1]="0011101"; code[4][2]="1011100";
code[5][0]="0110001"; code[5][1]="0111001"; code[5][2]="1001110";
code[6][0]="0101111"; code[6][1]="0000101"; code[6][2]="1010000";
code[7][0]="0111011"; code[7][1]="0010001"; code[7][2]="1000100";
code[8][0]="0110111"; code[8][1]="0001001"; code[8][2]="1001000";
code[9][0]="0001011"; code[9][1]="0010111"; code[9][2]="1110100";
set[0]="000000";
set[1]="001011";
set[2]="001101";
set[3]="001110";
set[4]="010011";
set[5]="011001";
set[6]="011100";
set[7]="010101";
set[8]="010110";
set[9]="011010";
start="101";
middle="01010";
//end="101";
}
CEAN_UPC::~CEAN_UPC()
{
}
CString CEAN_UPC::CalcBarcodeModel_EAN13(CString In_String)
{
CString BarModel="101";
int length;
CString nchar;
int i,nch,prev,prev_set;
length=In_String.GetLength();
if (length!=12) AfxMessageBox("输入长度不对!");
else
{
prev=atoi(In_String.Left(1));
for(i=1;i<12;i++)
{
nchar=In_String.GetAt(i);
nch=atoi(nchar);
if (i<7)
{
prev_set=atoi(set[prev].Mid(i-1,1) );
BarModel+=code[nch][prev_set];
}
else
{
if (i==7) BarModel+=middle;
BarModel+=code[nch][2];
}
}
////////calc the check
int check_ji,check_ou,check;
check_ji=check_ou=0;
for (i=0;i<12;i++)
{
nchar=In_String.GetAt(i);
check_ji+=atoi(nchar);
i++;
nchar=In_String.GetAt(i);
check_ou+=atoi(nchar);
}
check=10-(check_ou*3+check_ji)%10;
BarModel+=code[check][2];///////add check
BarModel+=start; ///////start=end infact is add ended;
}///////else end for length==12
return BarModel;
}
void CEAN_UPC::Draw_EAN(int posx, int posy, int pen_Width, int line_high, CString In_String,CString ntype,CDC *pDC)
{ // "EAN13"
CPen pen_black; // "EAN8"
CPen pen_white;
int m,length,abc;
// int posx,posy;
COLORREF m_color;
CString lines,barModel;
// pDC->SetMapMode(MM_TWIPS|MM_ISOTROPIC);
m_color=0;
pen_black.CreatePen(PS_SOLID,pen_Width,m_color);
m_color=0x00ffffff;
pen_white.CreatePen(PS_SOLID,pen_Width,m_color);
if (ntype=="EAN13") barModel=CalcBarcodeModel_EAN13(In_String);
if (ntype=="EAN8") barModel=CalcBarcodeModel_EAN8(In_String);
abc=0;
int add_high=0;
length=barModel.GetLength();
for(m=0;m<length;m++)
{
lines=barModel.GetAt(m);
// int theline = atoi(lines);
if (lines=="1")
pDC->SelectObject(&pen_black);
else
pDC->SelectObject(&pen_white);
// for (n=0;n<theline;n++)
// {
if (ntype=="EAN13")
{
if ( (m<3) || ( m>44 && m<50) || (m>91) ) add_high=15;
else add_high=0;
}
if (ntype=="EAN8")
{
if ( (m<3) || (m>30 && m<36) || (m>63) ) add_high=15;
else add_high=0;
}
pDC->MoveTo((posx+abc*pen_Width),posy);
pDC->LineTo((posx+abc*pen_Width),posy+line_high+add_high);
abc+=1;
// } /////for n end
} /////for m end
//////////////////////dis the numbers
In_String+=CalcCheck(In_String);
pDC->TextOut(posx,posy+line_high,In_String);
pen_black.DeleteObject();
pen_white.DeleteObject();
}
CString CEAN_UPC::CalcCheck(CString In_String)
{
CString result, nchar;
int check_ji,check_ou,check,length;
check_ji=check_ou=0;
length=In_String.GetLength();
for (int i=length;i>0;i--)
{
nchar=In_String.GetAt(i-1);
check_ou+=atoi(nchar);
i--;
if (i==0) nchar=In_String.GetAt(i);
else nchar=In_String.GetAt(i-1);
check_ji+=atoi(nchar);
}
check=10-(check_ou*3+check_ji)%10;
result.Format("%d",check);
return result;
}
CString CEAN_UPC::CalcBarcodeModel_EAN8(CString In_String)
{
CString BarModel="101";
CString nchar;
int nch;
int i;
In_String+=CalcCheck(In_String);
for (i=0;i<8;i++)
{
nchar=In_String.GetAt(i);
nch=atoi(nchar);
if (i<4)
{
BarModel+=code[nch][0];
}
else
{
if (i==4) BarModel+=middle;
BarModel+=code[nch][1];
}
}
BarModel+=start; ///////start=end infact is add ended;
return BarModel;
}
没有合适的资源?快使用搜索试试~ 我知道了~
code_ean.rar_ean
共3个文件
cpp:1个
h:1个
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 31 浏览量
2022-09-23
23:26:14
上传
评论
收藏 2KB RAR 举报
温馨提示
ean码的演示源程序,可显示图像
资源推荐
资源详情
资源评论
收起资源包目录
code_ean.rar (3个子文件)
www.pudn.com.txt 218B
code_ean
EAN_UPC.cpp 5KB
EAN_UPC.h 1KB
共 3 条
- 1
资源评论
JaniceLu
- 粉丝: 78
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功