sun.misc.CRC16 也提供了一个 CRC16 校验和,但是结果和下面这个不一致,因为只是单纯的对接接口用,所以没去深究。
public static String crc16(String data) {
int[] regs = new int[data.length()];
for (int i = 0; i < data.length(); i++) {
regs[i] = data.charAt(i);
}
int por = 0XFFFF;
for (Integer reg : regs) {
por = por >> 8;
por ^= reg;
for (int i = 0; i < 8; i++) {
if ((por & 0x01) == 1) {
por = por >> 1;
por = por ^ 0xa001;
} else {
por = por >> 1;
}
}
}
return Integer.toHexString(por).toUpperCase();
}