Hamming code Implementation in Java

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:

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java code to implement Hamming Code
class 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 intialized
                // 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);
    }
}

chevron_right


Output:

Generated hamming code 
r1 = 0
r2 = 1
r4 = 0
0100101


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.