介紹
縱向冗餘校驗的
異或校驗和可以簡單快速的計算出來,將一個
數據塊的所有數據位元組
遞歸,經過異或選通後即可產生異或校驗和。由於算法簡單,可以快速簡單地計算縱向冗餘校驗。然而,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等效於使用多項式
的循環冗餘校驗,但是當以這種方式查看時,位流的獨立性不太清楚。