ITPub博客

首页 > 应用开发 > Go语言 > JT/T 808 校验码总算错?90% 的人卡在这 3 个地方

JT/T 808 校验码总算错?90% 的人卡在这 3 个地方

原创 Go语言 作者:suoten 时间:2026-10-12 19:52:04 0 删除 编辑

做 JT/T 808 开发,校验码算错是最高频的问题。我见过有人查了一整天,最后发现是转义处理漏了消息头。也见过有人把 BCD 高低位搞反,终端手机号解析出来全是乱码。

今天把最常见的 3 个坑列出来,你对号入座。

坑一:转义处理只做了消息体,没做消息头。

JT/T 808 用 0x7E 作为帧头帧尾,0x7D 作为转义字符。很多人写转义处理时,只对消息体做了 0x7D02 和 0x7D01 的替换,忘了消息头里也可能出现 0x7E 和 0x7D。结果校验码算出来永远差一位。

坑二:BCD 高低位顺序搞反。

终端手机号是 12 位 BCD 编码。有的文档写“高低位互换”,有的写“低高位互换”。不同厂商实现还不一样。我遇到过一家终端,它的 BCD 顺序和协议文档正好相反,导致我解析出来的手机号是乱码。

坑三:校验码计算范围搞错。

JT/T 808 的校验码是从消息头第一个字节开始,到消息体最后一个字节结束,不包括帧头帧尾和校验码本身。有人从帧头开始算,有人从消息体开始算,结果全错。

这 3 个坑,我当年全踩过。后来我用 JT-Simulate 的报文工坊做交叉验证:左边填字段生成报文,右边粘真实报文解析,两边一对比,问题立刻现形。它的合规检查还会自动验证纬度范围、经度范围、速度范围、时间格式,省得我写脚本。

争议留给你们: 校验码到底该手算还是工具算?手算是不是更“硬核”?欢迎在评论区吵。

项目地址:

GitHub:suoten/JT-Simulate

Gitee:suoten/jt-simulate

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70050062/viewspace-3185346/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-05-07

  • 博文量
    72
  • 访问量
    57153