Hamming code Implementation in Java - GeeksforGeeks

11 Jun, 2020
Pre-requisite: Hamming code
Hamming code is a set of error-correction codes that can be used to detect and correct the errors that can occur when the data is moved or stored from the sender to the receiver. It is a technique developed by R.W. Hamming for error correction.
Examples:
Input: 
message bit = 0101
r1 r2 m1 r4 m2 m3 m4
      0     1  0  1
Output:
Generated codeword :
r1 r2 m1 r4 m2 m3 m4
0  1  0  0  1  0  1

Explanation:
Initially r1, r2, r4 is set to '0'.
r1 = xor of all bits position 
    which has '1' in its 0th-bit position
r2 = xor of all bits
    which has '1' in its 1st-bit position
r3 = xor of all bits
    which has '1' in its 2nd-bit position

Below is the implementation of the Hamming Code:
// Java code to implement Hamming Codeclass HammingCode {      // print elements of array    static void print(int ar[])    {        for (int i = 1; i < ar.length; i++) {            System.out.print(ar[i]);        }        System.out.println();    }      // calculating value of redundant bits    static int[] calculation(int[] ar, int r)    {        for (int i = 0; i < r; i++) {            int x = (int)Math.pow(2, i);            for (int j = 1; j < ar.length; j++) {                if (((j >> i) & 1) == 1) {                    if (x != j)                        ar[x] = ar[x] ^ ar[j];                }            }            System.out.println("r" + x + " = "                               + ar[x]);        }          return ar;    }      static int[] generateCode(String str, int M, int r)    {        int[] ar = new int[r + M + 1];        int j = 0;        for (int i = 1; i < ar.length; i++) {            if ((Math.ceil(Math.log(i) / Math.log(2))                 - Math.floor(Math.log(i) / Math.log(2)))                == 0) {                  // if i == 2^n for n in (0, 1, 2, .....)                // then ar[i]=0                // codeword[i] = 0 ----                // redundant bits are initialized                // with value 0                ar[i] = 0;            }            else {                  // codeword[i] = dataword[j]                ar[i] = (int)(str.charAt(j) - '0');                j++;            }        }        return ar;    }      // Driver code    public static void main(String[] args)    {          // input message        String str = "0101";        int M = str.length();        int r = 1;          while (Math.pow(2, r) < (M + r + 1)) {            // r is number of redundant bits            r++;        }        int[] ar = generateCode(str, M, r);          System.out.println("Generated hamming code ");        ar = calculation(ar, r);        print(ar);    }}
Generated hamming code 
r1 = 0
r2 = 1
r4 = 0
0100101

Akanksha_Rai
cryptography
Computer Networks
Java Programs
cryptography
Computer Networks
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Advanced Encryption Standard (AES)
Intrusion Detection System (IDS)
Introduction and IPv4 Datagram Header
Block Cipher modes of Operation
Stop and Wait ARQ
Initializing a List in Java
Convert a String to Character array in Java
Java Programming Examples
How to Iterate HashMap in Java?
Implementing a Linked List in Java using Class