title: CRC-CCITT (Kermit)
body: <p>I am analyzing a feed from a GPS which uses CRC-CCITT16 (Kermit)
  for the below message</p>
  
  <p>Message From GPS Device: </p>
  
  <pre><code>(byte) 0x3,(byte) 0xfb,(byte) 0x0,(byte) 0x3,(byte) 0x13,(byte) 0x61,(byte) 0x2d,(byte) 0x5f,(byte) 0xc0,(byte) 0xa,(byte) 0x1,(byte) 0x1,(byte) 0x10,(byte) 0x55,(byte) 0xff,(byte) 0xb1,(byte) 0x59,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe4,(byte) 0x11,(byte) 0x7,(byte) 0xb8,(byte) 0x2,(byte) 0x2,(byte) 0x2,(byte) 0x77,(byte) 0x47,(byte) 0xc2,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0x23,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x20,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x6,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x55,(byte) 0xff,(byte) 0xd2,(byte) 0xfb,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe5,(byte) 0xa1,(byte) 0x7,(byte) 0xb8,(byte) 0xa,(byte) 0x25,(byte) 0x2,(byte) 0x55,(byte) 0x0,(byte) 0x0,(byte) 0x5,(byte) 0x0,(byte) 0x0,(byte) 0x20,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x55,(byte) 0xff,(byte) 0xe1,(byte) 0x14,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe5,(byte) 0xa1,(byte) 0x7,(byte) 0xb8,(byte) 0xa,(byte) 0x25,(byte) 0x0,(byte) 0x56,(byte) 0x0,(byte) 0x0,(byte) 0x8,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x20,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x12,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x55,(byte) 0xff,(byte) 0xef,(byte) 0x2d,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe5,(byte) 0xa1,(byte) 0x7,(byte) 0xb8,(byte) 0xa,(byte) 0x25,(byte) 0x1,(byte) 0xe5,(byte) 0x0,(byte) 0x0,(byte) 0x6,(byte) 0x0,(byte) 0x0,(byte) 0xe,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x20,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x12,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x55,(byte) 0xff,(byte) 0xfd,(byte) 0x46,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe5,(byte) 0xa1,(byte) 0x7,(byte) 0xb8,(byte) 0xa,(byte) 0x25,(byte) 0x0,(byte) 0x27,(byte) 0x0,(byte) 0x0,(byte) 0x9,(byte) 0x0,(byte) 0x0,(byte) 0xa,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x20,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x38,(byte) 0x55,(byte) 0xc3,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xf7,(byte) 0x99,(byte) 0x7,(byte) 0xb8,(byte) 0xf,(byte) 0x9d,(byte) 0x0,(byte) 0x0,(byte) 0x48,(byte) 0x44,(byte) 0x4,(byte) 0x0,(byte) 0x3,(byte) 0x1b,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1c,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0xe,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x38,(byte) 0xa8,(byte) 0xd7,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe3,(byte) 0x17,(byte) 0x7,(byte) 0xb8,(byte) 0x14,(byte) 0x1b,(byte) 0x0,(byte) 0xc9,(byte) 0x45,(byte) 0xb0,(byte) 0x4,(byte) 0x0,(byte) 0x5,(byte) 0x14,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1d,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0xe,(byte) 0x17,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x38,(byte) 0xb6,(byte) 0xf0,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe3,(byte) 0x17,(byte) 0x7,(byte) 0xb8,(byte) 0x14,(byte) 0x1b,(byte) 0x0,(byte) 0x0,(byte) 0x45,(byte) 0xb0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1c,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0xf,(byte) 0x17,(byte) 0x0,(byte) 0x3,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x80,(byte) 0xf5,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xea,(byte) 0x62,(byte) 0x7,(byte) 0xb8,(byte) 0x14,(byte) 0xb1,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1f,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x9,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe6,(byte) 0xde,(byte) 0x7,(byte) 0xb8,(byte) 0x13,(byte) 0x10,(byte) 0x0,(byte) 0x24,(byte) 0x0,(byte) 0x0,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1f,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x10,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x13,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe8,(byte) 0xc1,(byte) 0x7,(byte) 0xb8,(byte) 0x11,(byte) 0xe4,(byte) 0x0,(byte) 0x0,(byte) 0x30,(byte) 0x2a,(byte) 0x4,(byte) 0x0,(byte) 0x1,(byte) 0x1f,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0xe,(byte) 0x17,(byte) 0x0,(byte) 0x5,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xeb,(byte) 0x7d,(byte) 0x7,(byte) 0xb8,(byte) 0x10,(byte) 0xc9,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0x58,(byte) 0x4,(byte) 0x0,(byte) 0x2,(byte) 0x1f,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x2,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x27,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xec,(byte) 0x56,(byte) 0x7,(byte) 0xb8,(byte) 0x11,(byte) 0x3e,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0x58,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x31,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe9,(byte) 0xed,(byte) 0x7,(byte) 0xb8,(byte) 0x10,(byte) 0xfb,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0x58,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x3b,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xea,(byte) 0xc6,(byte) 0x7,(byte) 0xb8,(byte) 0xf,(byte) 0x18,(byte) 0x0,(byte) 0x7,(byte) 0x31,(byte) 0xec,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x0,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x56,(byte) 0x54,(byte) 0x81,(byte) 0x45,(byte) 0x0,(byte) 0x0,(byte) 0x2f,(byte) 0xd3,(byte) 0xe8,(byte) 0xf3,(byte) 0x7,(byte) 0xb8,(byte) 0xe,(byte) 0xe6,(byte) 0x0,(byte) 0x32,(byte) 0x31,(byte) 0xec,(byte) 0x4,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x7,(byte) 0x7,(byte) 0x5,(byte) 0x0,(byte) 0x1b,(byte) 0xff,(byte) 0x2,(byte) 0x0,(byte) 0x3,(byte) 0x0,(byte) 0x1c,(byte) 0x1,(byte) 0x20,(byte) 0x1f,(byte) 0xad,(byte) 0x0,(byte) 0x4,(byte) 0x1d,(byte) 0x0,(byte) 0x0,(byte) 0x1e,(byte) 0x0,(byte) 0x0,(byte) 0x16,(byte) 0x0,(byte) 0x11,(byte) 0x17,(byte) 0x0,(byte) 0x1,(byte) 0x2,(byte) 0x41,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x96,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0x0,(byte) 0xad,(byte) 0xa4
  </code></pre>
  
  <p>where last 2 bytes is CRC.
  
  Java Code used to calculate the CRC is:</p>
  
  <pre><code>private static int crc16(byte[] buffer, int length) {
              int CRC = 0x0;
              int carry = 0;
              int poly = 0x8408;
              for(int index = 0; index &lt; length; index++) {
                  CRC ^= (buffer[index] &amp; 0xFF);
                  for(int i = 0; i &lt; 8; i++) {
                      carry = CRC &amp; 1;
                      CRC &gt;&gt;= 1;
                      if(carry != 0) {
                          CRC ^= poly;
                      }
                  }
  
              }
              return CRC;
          }
  </code></pre>
  
  <p>On using the above code CRC calculate is 58001. But the CRC in the message is 44452.
  Can anyone help me out.I even tried other implementations for CRC calculation that too didn't work.</p>