欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js中实现对数据的crc校验

程序员文章站 2022-03-03 13:43:18
...

对于读取一些标签数据,需要对数据的正确性进行校验,经过多次测试,终于实现了在js中对数据的校验,参考如下代码:

//把字符串转换为byte数组
function stringToBytes( str ) {  
	var ch, st, re = []; 
	for (var i = 0; i < str.length; i++ ) { 
		ch = str.charCodeAt(i);
		st = [];
	   do {  
			st.push( ch & 0xFF );
			ch = ch >> 8;
		}    
		while ( ch );  
		re = re.concat( st.reverse() ); 
	}  
	return re;  
}
//crc16校验,传入要校验的字符串,返回计算的crc16结果
function crc16(str) {
		var data = stringToBytes(str);
		var CRCStr="";
		var i, j;
		var current_crc_value = 0xFFFF;
		for (i = 0; i <data.length ; i++)
		{
			current_crc_value = current_crc_value ^ (data[i] & 0xFF);
			for (j = 0; j < 8; j++)
			{
				if ((current_crc_value & 0x01) != 0)
					current_crc_value = (current_crc_value >> 1) ^ 0x8408;
				else
					current_crc_value = (current_crc_value >> 1);
			}
		}
		var temp = (current_crc_value & 0xFF).toString(16);
		if(temp.length==1)temp="0"+temp;
		CRCStr +=temp;
		temp = ((current_crc_value >> 8) & 0xFF).toString(16);
		if(temp.length==1)temp="0"+temp;
		CRCStr +=temp;
		return CRCStr.toUpperCase();
}

 

获取设备上传的数据为:E280689100000001ED539CA9,1:D664,冒号后面的“D664“为校验码,需要校验前面的”E280689100000001ED539CA9,1“计算的结果是否为D664,如果结果相等,则表示数据正确。

调用方式:

console.log(crc16("E280689100000001ED539CA9,1"));