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());

  

猜你喜欢

转载自www.cnblogs.com/ShengunErshu/p/9365159.html