Nodejs 实现一个CRC16校验
近日在开发一个数据平台,据说nodejs比较适合DIRT类型的程序,所以也搞了一把,虽然接收、转发及其报文解析等功能顺利的实现了,但是由于某些报文涉及到应答,故而需要CRC校验,也算是一个小坑吧,故而记录一下。
//完整报文 //##0101QN=20160801085857223;ST=32;CN=1062;PW=100000;MN=010000A8900016F000169DC0;Flag=5;CP=&&RtdInterval=30&&1C80\r\n //需校验的数据段 var msg = 'QN=20160801085857223;ST=32;CN=1062;PW=100000;MN=010000A8900016F000169DC0;Flag=5;CP=&&RtdInterval=30&&' function crc16(str){ var buf = Buffer.from(str); var crc = 0xFFFF; for(var i =0;i<buf.length;i++){ crc = (crc>>8)^buf[i]; for(var j =0;j<8;j++){ var temp = crc & 0x01; crc>>=0x0001; if(temp == 0x01){ crc ^= 0xA001; } } } return crc; } var crc = crc16(msg); console.log(crc.toString(16).toUpperCase());