|
#include "Barclass.h"
short Tabl[10][7]=
{ {0,0,0,1,0,0,1},
{0,0,1,0,0,0,1},
{0,0,1,0,1,1,1},
{0,0,1,1,0,1,1},
{0,0,1,1,1,0,1},
{0,1,0,0,1,1,1},
{0,1,0,1,0,1,1},
{0,1,0,1,1,0,1},
{0,1,1,0,0,1,1},
{0,1,1,0,1,0,1}};
short CheckTabl[56][6]=
{
{1,1,1,1,1,1}, //*
{0,0,0,0,0,0},
{1,0,0,0,0,0},
{0,1,0,0,0,0},//1
{0,0,1,0,0,0},
{0,0,0,1,0,0},
{1,1,1,1,1,1}, //*
{1,1,1,1,1,1}, //*
{0,0,0,0,1,0},
{0,0,0,0,0,1},
{1,1,0,0,0,0},//2
{1,0,1,0,0,0},
{1,0,0,1,0,0},
{1,1,1,1,1,1}, //*
{1,1,1,1,1,1}, //*
{1,0,0,0,1,0},
{1,0,0,0,0,1},
{0,1,1,0,0,0},//3
{0,1,0,1,0,0},
{0,1,0,0,1,0},
{1,1,1,1,1,1}, //*
{1,1,1,1,1,1}, //*
{0,1,0,0,0,1},
{0,0,1,1,0,0},
{0,0,1,0,1,0},//4
{0,0,1,0,0,1},
{0,0,0,1,1,0},
{1,1,1,1,1,1}, //*
{1,1,1,1,1,1}, //*
{0,0,0,1,0,1},
{0,0,0,0,1,1},
{1,1,1,0,0,0},//5
{1,1,0,1,0,0},
{1,1,0,0,1,0},
{1,1,1,1,1,1}, //*
{1,1,1,1,1,1}, //*
{1,1,0,0,0,1},
{1,0,1,1,0,0},
{1,0,1,0,1,0},//6
{1,0,1,0,0,1},
{1,0,0,1,1,0},
{1,1,1,1,1,1}, //*
{1,1,1,1,1,1}, //*
{1,0,0,1,0,1},
{1,0,0,0,1,1},
{0,1,1,1,0,0},//7
{0,1,1,0,1,0},
{0,1,1,0,0,1},
{1,1,1,1,1,1}, //*
{1,1,1,1,1,1}, //*
{0,1,0,1,1,0},
{0,1,0,1,0,1},
{0,1,0,0,1,1},//8
{0,0,1,1,1,0},
{0,0,1,1,0,1},
{1,1,1,1,1,1}, //*
};
//-----------------------------------
void TBarCode::SetUp(char* Text)
{
for(int i=0;i<7;i++) MyCode[i]=Text[i];
}
//------------------------------------
TBarCode::TBarCode()
{
Pausa=500;
}
//------------------------------------
void TBarCode::Test()
{
// SetCountErr();
CheckSum();
CreatBitCode();
GenError();
}
//-----------------------------------
void TBarCode::CheckSum() //+
{
for(int i=0;i<7;i++) CodeInt[i]=MyCode[i]-48;
CodeInt[7]=(CodeInt[0]+CodeInt[2]+CodeInt[4]+CodeInt[6]+3*(CodeInt[1]+CodeInt[3]+CodeInt[5]))%10;
MyCode[7]=CodeInt[7]+48;
}
//------------------------------------
void TBarCode::CreatBitCode()
{
unsigned int s;
short TmpMas[6];
for(int i=0;i<8;i++)
{
for(int j=0;j<7;j++)
{
MasBit[i*7+j]=Tabl[(CodeInt[i])][j];
};
};
for(int i=0;i<6;i++)
{
s=0;
for(int j=0;j<56;j++)
{
if(CheckTabl[j][i]==0)
{
s+=MasBit[j];
};
};
TmpMas[i]=s%2;
};
MasBit[56]=0;
MasBit[57]=1;
MasBit[58]=TmpMas[0];
MasBit[59]=TmpMas[1];
MasBit[60]=0;
MasBit[61]=1;
MasBit[62]=TmpMas[2];
MasBit[63]=TmpMas[3];
MasBit[64]=0;
MasBit[65]=1;
MasBit[66]=TmpMas[4];
MasBit[67]=TmpMas[5];
MasBit[68]=0;
MasBit[69]=1;
MasBit[70]=0;
for(int i=0;i<71;i++) ErrBit[i]=MasBit[i];
}
// T CodeInt[8] 8-ьш чэрўэх ўшёыю
// чс¦ы№°шью щюую эр юфшэшЎ¦
// T Ёрч¦ ъ•ю ўшёыю фюё уыю 99999999 яютхЁЄр¦Є№ё чэрўхээ true.
bool TBarCode::Next()
{
if(CodeInt[6]!=9) { CodeInt[6]++; MyCode[6]++;}
else
{
if(CodeInt[5]!=9) { CodeInt[5]++; MyCode[5]++; }
else
{
if(CodeInt[4]!=9) {CodeInt[4]++;MyCode[4]++;}
else
{
if(CodeInt[3]!=9) {CodeInt[3]++;MyCode[3]++;}
else
{
if(CodeInt[2]!=9) {CodeInt[2]++;MyCode[2]++;}
else
{
if(CodeInt[1]!=9) {CodeInt[1]++;MyCode[1]++;}
else
{
if(CodeInt[0]!=9) {CodeInt[0]++;MyCode[0]++;}
else return(false);
CodeInt[1]=0;
MyCode[1]='0';
};
CodeInt[2]=0;
MyCode[2]='0';
};
CodeInt[3]=0;
MyCode[3]='0';
};
CodeInt[4]=0;
MyCode[4]='0';
};
CodeInt[5]=0;
MyCode[5]='0';
};
CodeInt[6]=0;
MyCode[6]='0';
};
return(true);
}
//------------------------------------
void TBarCode::SetCountErr(int Err) { CountErr=Err; }
//--------------------------------------------------
double TBarCode::GetCountErr(int TypeErr)
{
switch (TypeErr) {
case 0: return(CountGenErr);break;
case 1: return(FatalErr);break;
case 2: return(NotFatal);break;
case 3: return(WarnErr);break;
default: return(0);
}
}
//--------------------------------------------------
void TBarCode::GenError()
{
int f1,f2;
if(CountErr==1)
{
f1=1;
do
{
if(ErrBit[f1]==0) ErrBit[f1]=1;
else if(ErrBit[f1]==1) ErrBit[f1]=0;
Control();
if(ErrBit[f1]==0) ErrBit[f1]=1;
else if(ErrBit[f1]==1) ErrBit[f1]=0;
f1++;
} while(f1<72);
};
if(CountErr==2)
{
f1=1;
do
{
f2=f1+1;
do
{
if(ErrBit[f1]==0) ErrBit[f1]=1;
else if(ErrBit[f1]==1) ErrBit[f1]=0;
if(ErrBit[f2]==0) ErrBit[f2]=1;
else if(ErrBit[f2]==1) ErrBit[f2]=0;
Control();
if(ErrBit[f1]==0) ErrBit[f1]=1;
else if(ErrBit[f1]==1) ErrBit[f1]=0;
if(ErrBit[f2]==0) ErrBit[f2]=1;
else if(ErrBit[f2]==1) ErrBit[f2]=0;
f2++;
} while(f2<72);
f1++;
} while(f1<71);
};
}
//----------------------------------------------------
void TBarCode::Info() //+
{
}
//-----------------------------------
void TBarCode::Control()
{
unsigned char ErrCode[8];
short TmpMas[6];
short i,j,s;
short Check[6]={1,1,1,1,1,1};
char TestCod[8];
char Test[71];
char TestTab[7];
CountGenErr++;
for(i=0;i<71;i++)
Test[i]=ErrBit[i];
for(i=0;i<8;i++)
{
Test[i*7]=0; //
Test[i*7+6]=1; //
}; //
Test[56]=0; //
Test[57]=1; //
Test[60]=0; //
Test[61]=1; //
Test[64]=0; //
Test[65]=1; //
Test[68]=0; //
Test[69]=1; //
Test[70]=0; //
for(i=0;i<6;i++) //
{
s=0;
for(j=0;j<56;j++)
{
if(CheckTabl[j][i]==0)
{
s+=Test[j];
};
};
TmpMas[i]=s%2;
};
for(j=0;j<3;j++)
{
if(TmpMas[j*2]!=Test[58+j*4]) Check[j*2]=0;
if(TmpMas[j*2+1]!=Test[59+j*4]) Check[j*2+1]=0;
};
short n=0;
for(i=0;i<6;i++)
{
if(Check[i]==0)
{
n++;
};
};
if(n>1) n=0;
else n=1;
switch (n)
{
case 0:
{
for(i=0;i<56;i++)
{
short eq=1;
for(j=0;j<6;j++)
{
if(Check[j]!=CheckTabl[i][j]) //
{
eq=0;
break;
};
};
if(eq==1)
{
if(Test[i]==1) Test[i]=0;
else Test[i]=1;
break;
};
};
};
case 1: //
{
for(i=0;i<8;i++)
{
for(j=0;j<7;j++)
{
TestTab[j]=Test[i*7+j];
};
short eq2;
for(j=0;j<10;j++)
{
short eq=1;
eq2=0;
for(s=0;s<7;s++)
{
if(TestTab[s]!=Tabl[j][s])
{
eq=0;
break;
};
};
if(eq==1)
{
TestCod[i]=j;
eq2=1;
break;
}
};
if(eq2==0)
{
FatalErr++;
return;
}
};
short t;
t=(TestCod[0]+TestCod[2]+TestCod[4]+TestCod[6]+3*(TestCod[1]+TestCod[3]+TestCod[5]))%10;
if(t!=TestCod[7])
{
FatalErr++;
return;
};
for(i=0;i<8;i++)
{
if(TestCod[i]!=CodeInt[i])
{
for(j=0;j<8;j++) ErrCode[j]=TestCod[j]+48;
WarnErr++;
// info();
return;
};
};
NotFatal++;
return;
};
};
}
Дата добавления: 2015-07-21; просмотров: 44 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
UNIT1.CPP | | | MOONBUG.BPR |