纵向冗余校验
纵向冗余校验(LRC,Longitudinal Redundancy Check)是通信中常用的一种校验形式。纵向冗余校验(LRC)是一种从纵向通道上的特定比特串产生校验比特的错误检测方法。在行列格式中(例如,在磁带中),LRC经常是与VRC一起使用,这样就会为每个字元校验码。
基本介绍
- 中文名:纵向冗余校验
- 外文名:LRC,Longitudinal Redundancy Check
- 特点:通信中常用的一种校验形式
- 实质:校验形式
介绍
纵向冗余校验的异或校验和可以简单快速的计算出来,将一个数据块的所有数据位元组递归,经过异或选通后即可产生异或校验和。由于算法简单,可以快速简单地计算纵向冗余校验。然而,LRC并不很可靠,多个错误可能相互抵消,在一个数据块内位元组顺序的互换根本识别不出来。因此LRC主要用于快速校验很小的数据块儿(如32B)。在射频识别系统中,由于标籤的容量一般较小,每次交易的数据量也不大,所以这种算法还是比较适合的。
实现
Set LRC = 0
For each character c in the string
do
Set LRC = LRC XOR c
end do
最佳矩形码
虽然简单的纵向奇偶校验只能检测错误,但它可以与附加的错误控制编码(例如横向冗余校验)组合以纠正错误。 横向冗余校验存储在专用的“奇偶校验轨道”上。
每当在数据传输块中发生任何单比特错误,这种二维奇偶校验或“双坐标奇偶校验”时,使接收器能够使用TRC来检测错误发生在哪个位元组,以及 LRC準确检测出错误发生的轨道,準确发现哪个位出错,然后通过翻转纠正该位。
伪代码
国际标準ISO 1155规定,可以通过以下算法在软体中计算位元组序列的纵向冗余校验:
Set LRC = 0For each byte b in the bufferdo Set LRC = (LRC + b) AND 0xFFend doSet LRC = (((LRC XOR 0xFF) + 1) AND 0xFF)
它可以表示为“模数为28的所有位元组之和的8位二进制补码值”(x AND 0xFF等于x MOD 28)。
许多协定使用基于XOR的纵向冗余校验位元组(通常称为块校验字元或BCC),包括串列线路网际网路协定(SLIP),[8] IEC 62056-21电錶读数标準,智慧卡定义 在ISO / IEC 7816和ACCESS.bus协定中。
这样的8位LRC等效于使用多项式
的循环冗余校验,但是当以这种方式查看时,位流的独立性不太清楚。
