📜  垂直冗余校验 (VRC) 或奇偶校验(1)

📅  最后修改于: 2023-12-03 15:23:38.989000             🧑  作者: Mango

垂直冗余校验 (VRC) 或奇偶校验

简介

垂直冗余校验(Vertical Redundancy Check,VRC)也叫奇偶校验(Parity Check),以一位二进制数据为单位进行校验,包括奇校验和偶校验两种方式。奇偶校验的主要作用是检测数据传输过程中是否出现了传输错误。

实现

在实现奇偶校验时,通常需要使用以下步骤:

  1. 将需要进行校验的数据按照二进制位进行划分,每个划分可以包括8位二进制位,也可以更少。
  2. 对于每一份划分的数据,进行奇偶校验。
    • 奇校验:将数据中二进制位1的个数加起来,如果为奇数,则在该份数据的最高位添加1,使得总的二进制中1的个数变成奇数;
    • 偶校验:将数据中二进制位1的个数加起来,如果为偶数,则在该份数据的最高位添加0,使得总的二进制中1的个数变成偶数。
  3. 当校验接收到被检验数据时,重复以上操作,与校验位进行比较。
    • 如果数据中出现了传输错误,则校验位与校验接收到的数据不匹配,校验失败;
    • 如果数据中未出现传输错误,则校验位与校验接收到的数据匹配,校验成功。

以下是一个用Python实现奇偶校验的例子:

def odd_parity_check(data: str) -> str:
    """
    奇校验检查函数
    :param data: 待检查数据(二进制字符串)
    :return: 带有奇校验位的数据(二进制字符串)
    """
    binary_data = [int(bit) for bit in data]
    parity_bit = 1 if sum(binary_data) % 2 == 0 else 0
    return ''.join([str(parity_bit)] + data)

def even_parity_check(data: str) -> str:
    """
    偶校验检查函数
    :param data: 待检查数据(二进制字符串)
    :return: 带有偶校验位的数据(二进制字符串)
    """
    binary_data = [int(bit) for bit in data]
    parity_bit = 0 if sum(binary_data) % 2 == 0 else 1
    return ''.join([str(parity_bit)] + data)

def parity_check(data: str, parity: str) -> bool:
    """
    校验函数
    :param data: 待校验数据(带有奇偶校验位的二进制字符串)
    :param parity: 指定的校验方式,可能的值为 'odd' 或 'even'
    :return: 校验结果,True表示校验成功,False表示校验失败
    """
    binary_data = [int(bit) for bit in data[1:]]
    parity_bit = int(data[0])
    parity_sum = sum(binary_data)
    if parity == 'odd':
        return (parity_sum + parity_bit) % 2 == 1
    elif parity == 'even':
        return (parity_sum + parity_bit) % 2 == 0
    else:
        raise ValueError('Invalid parity setting')
总结

奇偶校验作为最简单的校验方法之一,虽然只能检测出1位错误,但仍然具有一定的应用价值,尤其在数据传输距离短、误差率低的场合下。