Open In App

Implementing Checksum using Python

Last Updated : 08 Jun, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

The checksum is a kind of error Detection method in Computer Networks. This method used by the higher layer protocols and makes use of Checksum Generator on the Sender side and Checksum Checker on the Receiver side. In this article, we will be implementing the checksum algorithm in Python.

Refer to the below articles to get detailed information about the checksum

Steps to implement the algorithm.

Step 1: Generate Checksum ( Sender Side )

  1. The message is divided into 4 sections, each of k bits.
  2. All the sections are added together to get the sum.
  3. The sum is complemented and becomes the Checksum.
  4. The checksum is sent with the data.

Step 2: Checksum Checker ( Receiver Side )

  1. The message is divided into 4 sections of k bits.
  2. All sections are added together to get the sum.
  3. The generated checksum is added to the sum of all sections.
  4. The resulting sum is complemented.

After following these steps, if the checksum of receiver side and the checker side are added and complemented and the result is equal to zero, the data is correct and is therefore accepted. Otherwise, an error is detected and the data is rejected. 

Below is the implementation of the above approach: 

Python3




# Function to find the Checksum of Sent Message
def findChecksum(SentMessage, k):
   
    # Dividing sent message in packets of k bits.
    c1 = SentMessage[0:k]
    c2 = SentMessage[k:2*k]
    c3 = SentMessage[2*k:3*k]
    c4 = SentMessage[3*k:4*k]
 
    # Calculating the binary sum of packets
    Sum = bin(int(c1, 2)+int(c2, 2)+int(c3, 2)+int(c4, 2))[2:]
 
    # Adding the overflow bits
    if(len(Sum) > k):
        x = len(Sum)-k
        Sum = bin(int(Sum[0:x], 2)+int(Sum[x:], 2))[2:]
    if(len(Sum) < k):
        Sum = '0'*(k-len(Sum))+Sum
 
    # Calculating the complement of sum
    Checksum = ''
    for i in Sum:
        if(i == '1'):
            Checksum += '0'
        else:
            Checksum += '1'
    return Checksum
 
# Function to find the Complement of binary addition of
# k bit packets of the Received Message + Checksum
def checkReceiverChecksum(ReceivedMessage, k, Checksum):
   
    # Dividing sent message in packets of k bits.
    c1 = ReceivedMessage[0:k]
    c2 = ReceivedMessage[k:2*k]
    c3 = ReceivedMessage[2*k:3*k]
    c4 = ReceivedMessage[3*k:4*k]
 
    # Calculating the binary sum of packets + checksum
    ReceiverSum = bin(int(c1, 2)+int(c2, 2)+int(Checksum, 2) +
                      int(c3, 2)+int(c4, 2)+int(Checksum, 2))[2:]
 
    # Adding the overflow bits
    if(len(ReceiverSum) > k):
        x = len(ReceiverSum)-k
        ReceiverSum = bin(int(ReceiverSum[0:x], 2)+int(ReceiverSum[x:], 2))[2:]
 
    # Calculating the complement of sum
    ReceiverChecksum = ''
    for i in ReceiverSum:
        if(i == '1'):
            ReceiverChecksum += '0'
        else:
            ReceiverChecksum += '1'
    return ReceiverChecksum
 
 
# Driver Code
SentMessage = "10010101011000111001010011101100"
k = 8
#ReceivedMessage = "10000101011000111001010011101101"
ReceivedMessage = "10010101011000111001010011101100"
# Calling the findChecksum() function
Checksum = findChecksum(SentMessage, k)
 
# Calling the checkReceiverChecksum() function
ReceiverChecksum = checkReceiverChecksum(ReceivedMessage, k, Checksum)
 
# Printing Checksum
print("SENDER SIDE CHECKSUM: ", Checksum)
print("RECEIVER SIDE CHECKSUM: ", ReceiverChecksum)
finalsum=bin(int(Checksum,2)+int(ReceiverChecksum,2))[2:]
 
# Finding the sum of checksum and received checksum
finalcomp=''
for i in finalsum:
    if(i == '1'):
        finalcomp += '0'
    else:
        finalcomp += '1'
 
# If sum = 0, No error is detected
if(int(finalcomp,2) == 0):
    print("Receiver Checksum is equal to 0. Therefore,")
    print("STATUS: ACCEPTED")
     
# Otherwise, Error is detected
else:
    print("Receiver Checksum is not equal to 0. Therefore,")
    print("STATUS: ERROR DETECTED")


Output

SENDER SIDE CHECKSUM:  10000101
RECEIVER SIDE CHECKSUM:  01111010
Receiver Checksum is equal to 0. Therefore,
STATUS: ACCEPTED


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads