Java, CRC (type 8005, x16+x15+x2+1)

Source: Internet
Author: User
Tags 0xc0

/**
* CRC16 Related calculations
CRC-16 x16+x15+x2+1 8005 IBM SDLC
* Encode:utf-8
*
* @author TRB
* @date 2014-12-25
*/
public class CRC16 {
Static byte[] Crc16_tab_h = {(byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, ( BYTE) 0x41, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x00, (byte) 0xC1 , (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (by TE) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (byte) 0 X01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (byte) 0xC0, (byte) 0x80, (Byte) 0x41, (Byte) 0x01, (byte) 0xC0,
(byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (byte ) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (byte) 0x0 1, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (b Yte) 0x80, (Byte) 0x41, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (byte) 0x40, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (byte) 0x01, (byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (byt e) 0x80, (Byte) 0x41, (Byte) 0x00, (byte) 0xC1,
(byte) 0x81, (Byte) 0x40, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (byte ) 0x41, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (byte) 0x0 0, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (b Yte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (byte) 0x01, (byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (byt e) 0x81, (Byte) 0x40, (Byte) 0x01, (byte) 0xC0,
(byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (byte ) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (byte) 0x0 1, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (b Yte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (byte) 0x40, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (byte) 0x01, (byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x00, (Byte) 0xC1, (byt e) 0x81, (Byte) 0x40, (Byte) 0x01, (byte) 0xC0,
(byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (Byte) 0x40, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (byte ) 0x41, (Byte) 0x01, (Byte) 0xC0, (Byte) 0x80, (Byte) 0x41, (Byte) 0x00, (Byte) 0xC1, (Byte) 0x81, (byte) 0x40};

Static byte[] crc16_tab_l = {(byte) 0x00, (Byte) 0xC0, (Byte) 0xC1, (Byte) 0x01, (Byte) 0xC3, (Byte) 0x03, (Byte) 0x02, ( BYTE) 0xC2, (Byte) 0xC6, (Byte) 0x06, (Byte) 0x07, (Byte) 0xC7, (Byte) 0x05, (Byte) 0xC5, (Byte) 0xc4, (Byte) 0x04, (byte) 0xCC, (Byte) 0x0C, (Byte) 0x0D, (Byte) 0xCD, (Byte) 0x0F, (Byte) 0xCF, (Byte) 0xCE, (Byte) 0x0E, (Byte) 0x0A, (byte) 0xCA , (Byte) 0xCB, (Byte) 0x0B, (Byte) 0xc9, (Byte) 0x09, (Byte) 0x08, (Byte) 0xC8, (Byte) 0xd8, (Byte) 0x18, (Byte) 0x19, (by TE) 0xd9, (Byte) 0x1B, (Byte) 0xDB, (Byte) 0xDA, (Byte) 0x1A, (Byte) 0x1E, (Byte) 0xDE, (Byte) 0xDF, (Byte) 0x1F, (byte) 0 XDD, (Byte) 0x1D, (Byte) 0x1C, (Byte) 0xDC, (Byte) 0x14, (Byte) 0xd4, (Byte) 0xd5, (Byte) 0x15, (Byte) 0xD7, (byte) 0x17, (byte) 0x16, (Byte) 0xd6, (Byte) 0xd2, (byte) 0x12,
(byte) 0x13, (Byte) 0xd3, (Byte) 0x11, (Byte) 0xD1, (Byte) 0xD0, (Byte) 0x10, (Byte) 0xF0, (Byte) 0x30, (Byte) 0x31, (byte ) 0xF1, (Byte) 0x33, (Byte) 0xf3, (Byte) 0xF2, (Byte) 0x32, (Byte) 0x36, (Byte) 0xf6, (Byte) 0xf7, (Byte) 0x37, (byte) 0xF 5, (Byte) 0x35, (Byte) 0x34, (Byte) 0xf4, (Byte) 0x3C, (Byte) 0xFC, (Byte) 0xFD, (Byte) 0x3d, (Byte) 0xFF, (Byte) 0x3F, (b Yte) 0x3e, (Byte) 0xFE, (Byte) 0xFA, (Byte) 0x3A, (Byte) 0x3B, (Byte) 0xFB, (Byte) 0x39, (Byte) 0xf9, (Byte) 0xF8, (byte) 0x38, (Byte) 0x28, (Byte) 0xe8, (Byte) 0xe9, (Byte) 0x29, (Byte) 0xEB, (Byte) 0x2B, (Byte) 0x2A, (Byte) 0xEA, (byte) 0xEE, (byte) 0x2e, (Byte) 0x2F, (Byte) 0xEF, (Byte) 0x2D, (Byte) 0xED, (Byte) 0xEC, (Byte) 0x2C, (Byte) 0xE4, (Byte) 0x24, (byt e) 0x25, (Byte) 0xe5, (Byte) 0x27, (byte) 0xE7,
(byte) 0xe6, (Byte) 0x26, (Byte) 0x22, (Byte) 0xe2, (Byte) 0xe3, (Byte) 0x23, (Byte) 0xe1, (Byte) 0x21, (Byte) 0x20, (byte ) 0xE0, (Byte) 0xA0, (Byte) 0x60, (Byte) 0x61, (Byte) 0xa1, (Byte) 0x63, (Byte) 0xa3, (Byte) 0xa2, (Byte) 0x62, (byte) 0x6 6, (Byte) 0xa6, (Byte) 0xa7, (Byte) 0x67, (Byte) 0xa5, (Byte) 0x65, (Byte) 0x64, (Byte) 0xa4, (Byte) 0x6c, (Byte) 0xAC, (b Yte) 0xAD, (Byte) 0x6d, (Byte) 0xAF, (Byte) 0x6F, (Byte) 0x6e, (Byte) 0xAE, (Byte) 0xAA, (Byte) 0x6A, (Byte) 0x6b, (byte) 0xAB, (Byte) 0x69, (Byte) 0xa9, (Byte) 0xa8, (Byte) 0x68, (Byte) 0x78, (Byte) 0xb8, (Byte) 0xb9, (Byte) 0x79, (byte) 0xBB, (byte) 0x7B, (Byte) 0x7A, (Byte) 0xBA, (Byte) 0xBE, (Byte) 0x7E, (Byte) 0x7F, (Byte) 0xBF, (Byte) 0x7d, (Byte) 0xBD, (byt e) 0xBC, (Byte) 0x7C, (Byte) 0xb4, (byte) 0x74,
(byte) 0x75, (Byte) 0xb5, (Byte) 0x77, (Byte) 0xb7, (Byte) 0xb6, (Byte) 0x76, (Byte) 0x72, (Byte) 0xb2, (Byte) 0xb3, (byte ) 0x73, (Byte) 0xb1, (Byte) 0x71, (Byte) 0x70, (Byte) 0xb0, (Byte) 0x50, (Byte) 0x90, (Byte) 0x91, (Byte) 0x51, (byte) 0x9 3, (Byte) 0x53, (Byte) 0x52, (Byte) 0x92, (Byte) 0x96, (Byte) 0x56, (Byte) 0x57, (Byte) 0x97, (Byte) 0x55, (Byte) 0x95, (b Yte) 0x94, (Byte) 0x54, (Byte) 0x9c, (Byte) 0x5C, (Byte) 0x5d, (Byte) 0x9d, (Byte) 0x5f, (Byte) 0x9F, (Byte) 0x9E, (byte) 0x5E, (Byte) 0x5A, (Byte) 0x9a, (Byte) 0x9b, (Byte) 0x5b, (Byte) 0x99, (Byte) 0x59, (Byte) 0x58, (Byte) 0x98, (byte) 0x88, (byte) 0x48, (Byte) 0x49, (Byte) 0x89, (Byte) 0x4B, (Byte) 0x8b, (Byte) 0x8A, (Byte) 0x4A, (Byte) 0x4E, (Byte) 0x8E, (byt e) 0x8F, (Byte) 0x4f, (Byte) 0x8d, (byte) 0x4d,
(byte) 0x4C, (Byte) 0x8c, (Byte) 0x44, (Byte) 0x84, (Byte) 0x85, (Byte) 0x45, (Byte) 0x87, (Byte) 0x47, (Byte) 0x46, (byte ) 0x86, (Byte) 0x82, (Byte) 0x42, (Byte) 0x43, (Byte) 0x83, (Byte) 0x41, (Byte) 0x81, (Byte) 0x80, (byte) 0x40};

/**
* Calculate CRC16 Check
*
* @param data
* Arrays that need to be computed
* @return CRC16 Checksum value
*/
public static int CALCCRC16 (byte[] data) {
return CALCCRC16 (data, 0, data.length);
}

/**
* Calculate CRC16 Check
*
* @param data
* Arrays that need to be computed
* @param offset
* Start position
* @param len
* Length
* @return CRC16 Checksum value
*/
public static int CALCCRC16 (byte[] data, int offset, int len) {
return CALCCRC16 (data, offset, Len, 0xffff);
}

/**
* Calculate CRC16 Check
*
* @param data
* Arrays that need to be computed
* @param offset
* Start position
* @param len
* Length
* @param preval
* Previous checksum value
* @return CRC16 Checksum value
*/
public static int CALCCRC16 (byte[] data, int offset, int len, int preval) {
int Uccrchi = (Preval & 0xff00) >> 8;
int uccrclo = Preval & 0x00ff;
int iIndex;
for (int i = 0; i < len; ++i) {
IIndex = (uccrclo ^ Data[offset + i]) & 0x00ff;
Uccrclo = Uccrchi ^ Crc16_tab_h[iindex];
Uccrchi = Crc16_tab_l[iindex];
}
Return ((Uccrchi & 0X00FF) << 8) | (Uccrclo & 0x00ff) & 0xFFFF;
}
public static char Crc16calc (byte[] data_arr, int data_len)
{
char CRC16 = 0;
int i;
for (i =0; i < (Data_len); i++)
{
CRC16 = (char) ((CRC16 >> 8) | (CRC16 << 8));
CRC16 ^= data_arr[i]& 0xFF;
CRC16 ^= (char) ((CRC16 & 0xFF) >> 4);
CRC16 ^= (char) ((CRC16 << 8) << 4);
CRC16 ^= (char) (((CRC16 & 0xFF) << 4) << 1);
}
return CRC16;
}
private static String GETCRC (byte[] data) {
int high;
int flag;

16-bit registers, all digits are 1
int WCRC = 0xFFFF;
for (int i = 0; i < data.length; i++) {
High byte of 16-bit register
High = WCRC >> 8;
The "XOR" operation of a byte of the checked string with the high byte of the 16-bit register
WCRC = high ^ data[i];

for (int j = 0; J < 8; J + +) {
Flag = WCRC & 0x0001;
Move this 16 register to the right one
WCRC = WCRC >> 1;
If the number of digits moved to the right (marker bit) is 1, then the polynomial 1010 0000 0000 0001 is generated and the register is "XOR"
if (flag = = 1)
WCRC ^= 0xa001;
}
}

Return integer.tohexstring (WCRC);
}
Test
public static String getcrc (byte[] bytes) {
int CRC = 0X0000FFFF;
int polynomial = 0x0000a001;
int I, J;
for (i = 0; i < bytes.length; i++) {
CRC ^= ((int) bytes[i] & 0X000000FF);
for (j = 0; J < 8; J + +) {
if (CRC & 0x00000001)! = 0) {
CRC >>= 1;
CRC ^= polynomial;
} else {
CRC >>= 1;
}
}
}
Return integer.tohexstring (CRC);
}
public static void Main (string[] args) {
crc_8005
0x02 (FF), crc16=7c 09
int CRC = CRC16.CALCCRC16 (New byte[] {0x02, 0x05, 0x00, 0x03, (byte) 0xFF, 0x00});

System.out.println (String.Format ("0x%04x", CRC));
}
}

Java, CRC (type 8005, x16+x15+x2+1)

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.