📹 第十章 GB/T 28181协议原理
📄 一句话概括

国标里所有东西都有 20 位编号,它不是流水号,是五段有含义的编码。 平台、设备、通道用同一套规则,靠第 11 到 13 位区分身份。

📝 本节和前面几节的关系

前面反复出现「20 位编号」,这一节把它拆开。 这是全书最该背下来的一条规则,因为后面每一个流程都要用到它。 Demo 把一串真实编号逐段拆开,再试三种错误写法。

一、五段,各管一件事

20 位分成五段: 1 到 8 位是中心编码、9 到 10 位是行业编码、11 到 13 位是类型编码、14 位是网络标识、 15 到 20 位是序号。 中心编码是和上级平台绑定的,下级平台注册时,这 8 位必须是上级分配的, 否则能注册上但目录同步不下来。 类型编码是最有用的一段,它直接说明「这是个什么东西」: 200 是平台、131 是摄像机、132 是录像机、118 是报警主机。 序号那 6 位是纯流水,但它有个隐含约束:同一类设备在同一中心下不能重号。 所以六位最多九十九万多个,对一个市级平台来说够用,对省级要规划分段。

二、纯数字,一个字母都不许有

这条最容易踩:国标编号是纯数字,大写字母一个都不许有。 而很多人从别的系统导过来的资产编号里带字母,直接塞进平台就注册不上。 更麻烦的是它不报错:平台既不回「格式错」,也不告诉你为什么,它只是不理你。 所以排障时「注册没反应」的第一件事,就是拿编号去数位数、看字符。 还有两个常见的写法错:少一位(19 位)、多一位(21 位)。 这两个都不会报错,只会「查无此设备」。 所以工程上有个笨办法但很有效:把编号规则写进设备端的界面校验里, 长度必须是 20、必须全是数字,不合格直接不让保存—— 把错误挡在录入那一刻,比事后抓包快一百倍。

三、动手 Demo:20 位编号,五段各管一件事

把 34020000001320000001 逐段拆开,再用三种错误写法看看各自错在哪。

code = "34020000001320000001"
parts = [(0, 8, "中心编码"), (8, 10, "行业编码"), (10, 13, "类型编码"),
         (13, 14, "网络标识"), (14, 20, "序号")]
for a, b, name in parts:
    print(name, code[a:b])

for bad in ("3402000000132000001", "340200000013200000011",
            "3402000000132000000A"):
    print(bad, len(bad), bad.isdigit())

实跑输出:

--------------------------------------------------------------------
20 位编号,五段各管一件事
--------------------------------------------------------------------
**国标最基础的一条规则就是「所有东西都有 20 位编号」**。**它不是流水号,是五段有含义的编码。**

  位置             这一段           含义
  -----------------------------------------------
  **1~8 位**       **34020000**     **中心编码**
  **9~10 位**      **00**           **行业编码**
  **11~13 位**     **132**          **类型编码**
  **14 位**        **0**            **网络标识**
  **15~20 位**     **000001**       **序号**

**第三段是最有用的一段**,它的取值直接说明「这是个什么东西」:

  类型码      是什么
  -----------------------------------
  **200**     **平台(SIP 服务器)**
  **131**     **摄像机**
  **132**     **网络录像机**
  **118**     **报警主机**

**所以上面那串 `34020000001320000001` 一读就懂**:
**中心 34020000、行业 00、类型 132(NVR)、网络标识 0、序号 000001。**

**再来看三个常见错误**:

  编号                        为什么不行
  ---------------------------------------------
  `3402000000132000001`       **只有 19 位**
  `340200000013200000011`     **多了一位**
  `3402000000132000000A`      **含非数字字符**

**注意第三条**:**国标编号是纯数字,大写字母一个都不许有**。
**而很多人从别的系统导过来的资产编号里带字母,直接塞进平台就注册不上**——
**平台不报「格式错」,它只是不理你。**

拆开就能读懂:中心 34020000、行业 00、类型 132(录像机)、网络标识 0、序号 000001。 一眼就知道这是一台挂在 34020000 这个中心下的第一台 NVR。 第二张表的类型码值得背下来:200 平台、131 摄像机、132 录像机、118 报警主机。 看到 200 就知道它不该出现在设备列表里,看到 132 就知道「它下面还挂着通道」。 最后那张表里的第三种错最坑:只有 19 位和多一位都能靠长度一眼看出,而那个 A 藏在末尾, 长度对、数字的错觉也对,复制粘贴的时候根本发现不了。 isdigit() 那一列就是为了抓这种东西。

30 秒实验

  1. 算一下:序号六位最多多少个?(一百万个,但实际从 000001 起算)
  2. 想一下:类型码 200 和 132 分别是什么?
  3. 想一下:为什么「编号带字母」不报错却会失败?

常见误区

  1. 以为「编号是流水号」。 它五段各有含义,类型段直接说明身份。
  2. 以为「带字母也能用」。 国标编号纯数字,带字母不报错但永远查不到。
  3. 以为「中心编码可以自己编」。 必须用上级分配的,否则注册成功但目录为空。
自测三问(点开对答案) 1. 20 位编号的五段分别是什么? —— **中心 8 位、行业 2 位、类型 3 位、网络标识 1 位、序号 6 位**。 2. 类型码 131 和 132 分别是什么? —— **131 摄像机、132 网络录像机**。 3. 编号带字母会有什么现象? —— **注册不上,但不报格式错**,平台只是不理你。

下一节算带宽:码率是选出来的,选错了后面全错。

相关笔记