JAVA CRC-16(CRC-16/IBM)计算校验值
前言:对接硬件设备的通信协议需要用到CRC-16进行计算校验值,然后再网上找了很多个版本,很久都没找到这个版本的,然后好不容易找到了,就记录一下
注意:
这个是CRC-16(CRC-16/IBM)的版本,不是CRC-16/MODBUS或其他版本,如果想要其他版本可以另外搜索
代码如下:
public class CRC16Utils {
/**
* CRC-16 校验
* 低位在前高位在后
* @param data
* @return
*/
public static byte[] getCRCBytes(byte[] data) {
int crc = 0x0000;
for (byte b : data) {
crc = (crc >>> 8) ^ table[(crc ^ b) & 0xff];
}
return new byte[] { (byte) (0xff & crc), (byte) ((0xff00 & crc) >> 8) };
}
private static final int[] table = { 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741,
0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD4