# Implementation of Cyclic Redundancy Check Algorithm in C++

```#include <iostream.h>
#include <conio.h>

void main()
{
int i,j,k,l;

//Get Frame
int fs;
cout<<"\n Enter Frame size: ";
cin>>fs;

int f[20];

cout<<"\n Enter Frame:";
for(i=0;i<fs;i++)
{
cin>>f[i];
}

//Get Generator
int gs;
cout<<"\n Enter Generator size: ";
cin>>gs;

int g[20];

cout<<"\n Enter Generator:";
for(i=0;i<gs;i++)
{
cin>>g[i];
}

cout<<"\n Sender Side:";
cout<<"\n Frame: ";
for(i=0;i<fs;i++)
{
cout<<f[i];
}
cout<<"\n Generator :";
for(i=0;i<gs;i++)
{
cout<<g[i];
}

//Append 0's
int rs=gs-1;
cout<<"\n Number of 0's to be appended: "<<rs;
for (i=fs;i<fs+rs;i++)
{
f[i]=0;
}

int temp[20];
for(i=0;i<20;i++)
{
temp[i]=f[i];
}

cout<<"\n Message after appending 0's :";
for(i=0; i<fs+rs;i++)
{
cout<<temp[i];
}

//Division
for(i=0;i<fs;i++)
{
j=0;
k=i;
//check whether it is divisible or not
if (temp[k]>=g[j])
{
for(j=0,k=i;j<gs;j++,k++)
{
if((temp[k]==1 && g[j]==1) || (temp[k]==0 && g[j]==0))
{
temp[k]=0;
}
else
{
temp[k]=1;
}
}
}
}

//CRC
int crc[15];
for(i=0,j=fs;i<rs;i++,j++)
{
crc[i]=temp[j];
}

cout<<"\n CRC bits: ";
for(i=0;i<rs;i++)
{
cout<<crc[i];
}

cout<<"\n Transmitted Frame: ";
int tf[15];
for(i=0;i<fs;i++)
{
tf[i]=f[i];
}
for(i=fs,j=0;i<fs+rs;i++,j++)
{
tf[i]=crc[j];
}
for(i=0;i<fs+rs;i++)
{
cout<<tf[i];
}

for(i=0;i<fs+rs;i++)
{
cout<<tf[i];
}

for(i=0;i<fs+rs;i++)
{
temp[i]=tf[i];
}

//Division
for(i=0;i<fs+rs;i++)
{
j=0;
k=i;
if (temp[k]>=g[j])
{
for(j=0,k=i;j<gs;j++,k++)
{
if((temp[k]==1 && g[j]==1) || (temp[k]==0 && g[j]==0))
{
temp[k]=0;
}
else
{
temp[k]=1;
}
}
}
}

cout<<"\n Reaminder: ";
int rrem[15];
for (i=fs,j=0;i<fs+rs;i++,j++)
{
rrem[j]= temp[i];
}
for(i=0;i<rs;i++)
{
cout<<rrem[i];
}

int flag=0;
for(i=0;i<rs;i++)
{
if(rrem[i]!=0)
{
flag=1;
}
}

if(flag==0)
{
cout<<"\n Since Remainder Is 0 Hence Message Transmitted From Sender To Receriver Is Correct";
}
else
{
cout<<"\n Since Remainder Is Not 0 Hence Message Transmitted From Sender To Receriver Contains Error";
}
getch();
}

/* OUTPUT

Enter Frame size: 6

Enter Frame:1
0
0
1
0
0

Enter Generator size: 4

Enter Generator:1
1
0
1

Sender Side:
Frame: 100100
Generator :1101
Number of 0's to be appended: 3
Message after appending 0's :100100000
CRC bits: 001
Transmitted Frame: 100100001
Reaminder: 000
Since Remainder Is 0 Hence Message Transmitted From Sender To Receriver Is Corr
ect

*/
```

## 6 thoughts on “Implementation of Cyclic Redundancy Check Algorithm in C++”

1. Kishore says:

There is a mistake in the code. In the receiver side program, while dividing the received message by the generator the for loop i limit should be fs only. Otherwise the crc bits will also be divided by the generator even though they are smaller in size when compared to the generator. So it produces a wrong result.

1. Pranav says:

U r getting it wrong way receiving side while dividing with generator it should be divided till last element so it can verified that remainder is 0/not

2. Pranav says:

Sorry bro u r right,as we r comparing further 3 elements

3. Vishwa says:

No it’s wrong actually you are wasting your time in the internet

1. venkateshwaran says: