Foxtable(狐表)用户栏目专家坐堂 → crc16验证


  共有1829人关注过本帖树形打印复制链接

主题:crc16验证

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
crc16验证  发帖心情 Post By:2017/10/7 16:52:00 [显示全部帖子]

各位老师好,有一个关于 crc16验证的问题:

手机通过ble蓝牙连接扫码枪后,得到数据后,要通过如下的crc16 js 进行验证。


ble通信文档

传输命令格式:

OP (1 BYTE)

Len(1 BYTE)

CRC16(2 BYTE)

Data(0~250BYTE)

 

1OP定义如下:

NORMAL_PACKET         0X37

END_PACKET             0X38

一个长条码可能会分成多帧进行传输,一次最多传输250个字节的条码内容。

如果发送的不是最后一个包,OP填入NORMAL_PACKET

如果发送的是最后一个包,OP填入END_PACKET

 

2Len定义如下:

是指Data域里面的数据长度,不包括CRC16的长度。

 

3CRC16

Data域里面所有数据的校验和。校验方式为自定义校验方式,不是标准的CRC16.

 

4Data定义如下:

Data为扫码枪扫到的数据,如果条码过长会分多个报文进行传输。



js代码:

function crcCheck(msg, len) {

    var crc = Number(0);

    var current = Number(0);

    for (var i = 0; i < len; i++) {

        current = (msg[i] & 0x000000FF) << 8;

        for (var j = 0; j < 8; j++) {

            if ((crc ^ current) & 0x8000) {

                crc = (crc << 1) ^ 0x1021;

            }  

            else { 

                crc <<= 1;

            }

            crc &= 0x0000FFFF;

            current <<= 1;

        }

    }

    return crc;

};


问题在这里,扫入的条码怎么变成这个 buffer的格式呢。。。


var buf = new Buffer([0xEA, 0xAE, 0x01, 0x02,0x59,0xAE]);   //填BLE的条码数据(扫码枪扫入的条码)+秘钥(我这边已设置的8位数)  总长度14+8 =22

var crc16 = crcCheck(buf, buf.length);

console.log("crc16[%j]=%j",buf.length,crc16.toString(16) );

[此贴子已经被作者于2017/10/7 16:51:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/7 17:09:00 [显示全部帖子]

哦哦,谢谢有点甜老师,
扫码枪的内容:(扫码枪扫入的条码14位数字)+秘钥(我这边已设置的8位数)
如:6949907605380 abc12345 (有一个空格)
甜老师,怎么转换成数组呢。。。
[此贴子已经被作者于2017/10/7 17:09:40编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/7 17:25:00 [显示全部帖子]

我也不知道用不用数组,只是这个js的代码示例是这样。
var buf = new Buffer([0xEA, 0xAE, 0x01, 0x02,0x59,0xAE])

那如果不用的话,我就直接把6949907605380 abc12345 填入就可以哈。
var buf = new Buffer("6949907605380 abc12345"
这样符合 buffer的写法吗?


[此贴子已经被作者于2017/10/7 17:25:37编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/7 17:36:00 [显示全部帖子]

恩恩,甜老师,我测试一下,之前一直在找 new Buffer([0xEA, 0xAE, 0x01, 0x02,0x59,0xAE]);怎么写,没想到可以直接用字符进去。

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/7 18:05:00 [显示全部帖子]

这是他们给的示例代码:

var buf = new Buffer([0xEA, 0xAE, 0x01, 0x02,0x59,0xAE]);   //填BLE的条码数据(扫码枪扫入的条码13位和回车)+秘钥(我这边已设置的8位数)  总长度14+8 =22

能看出规则吗?

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/7 22:06:00 [显示全部帖子]

甜老师,你的这种写法可以。
但是我的那个Js有问题。
他们给的是c的代码,我自己网上找的js,和他们的好像不一样。你看下能怎么把c的代码转成js呢?
C语言代码


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20171007221003.png
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:c 代码.txt



要转成js:


图片点击可在新窗口打开查看此主题相关图片如下:js代码.png
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:js代码.txt


[此贴子已经被作者于2017/10/7 22:12:22编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/7 22:15:00 [显示全部帖子]

我里面的代码以及调试的结果是这样:
咱FT做的后台,第三方的软件做的界面

如果校验正确,两个白框的值应该一样,但是不一样。

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20171007221507.png
图片点击可在新窗口打开查看

用网上的工具是一样的:

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20171007221820.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20171007221811.png
图片点击可在新窗口打开查看


[此贴子已经被作者于2017/10/7 22:19:16编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/7 22:22:00 [显示全部帖子]

我用字符串和用hex算出来的值也不一样
刚才算出来是 adf8
现在用hex算是 bbb4

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20171007222250.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2017/10/7 22:23:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/8 9:16:00 [显示全部帖子]

感恩!!
真心感谢FT老师的无私!!
可以了!!

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20171008091416.png
图片点击可在新窗口打开查看


 回到顶部