Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

BARCLASS.CPP

Вузький | INTERLEAVED 2 OF 5 | Загальний огляд | MaxiCode та PDF417 | QR-код та Data Matrix | Microsoft Tag та Aztec Code | ПОСТАНОВКА задачі | Хід роботи | Література | UNIT1.H |


#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

mybiblioteka.su - 2015-2024 год. (0.023 сек.)