You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算二进制字符串的奇偶校验并按26位Wiegand格式添加?

26位Wiegand格式二进制字符串的奇偶校验位计算与添加

嘿,我来帮你搞定26位Wiegand格式的奇偶校验位计算和添加问题!咱们先把规则掰扯清楚,再用你给的示例一步步演示,最后还能给你个实用的代码实现~

核心规则回顾

26位Wiegand格式的校验逻辑非常明确:

  • 第1位(开头的X):是第2到13位的偶校验位——简单说,就是让第1到13位里1的总数是偶数。如果第2-13位的1个数已经是偶数,X就是0;要是奇数,X就设为1。
  • 第26位(结尾的Y):是第14到25位的奇校验位——要求第14到26位里1的总数是奇数。如果第14-25位的1个数是奇数,Y就是0;要是偶数,Y就设为1。

示例实操步骤

拿你给出的原二进制字符串1111 1011 0111 0111 1111 1010来实际计算:

  1. 预处理:先去掉所有空格,得到24位核心数据:111110110111011111111010
  2. 计算开头的偶校验位X:
    • 取前12位:111110110111
    • 数里面1的个数:一共10个(是偶数)
    • 所以偶校验位X为0(保证前13位总1数还是偶数)
  3. 计算结尾的奇校验位Y:
    • 取后12位:011111111010
    • 数里面1的个数:一共9个(是奇数)
    • 所以奇校验位Y为0(保证后13位总1数还是奇数)
  4. 拼接结果:把X放开头,Y放结尾,再按4位分组加空格,最终得到:0 1111 1011 0111 0111 1111 1010 0

通用实现代码(Python)

如果需要批量处理或者自动化计算,这段代码可以直接用:

def compute_wiegand26_parity(binary_str):
    # 预处理:清理空格,验证长度
    cleaned = binary_str.replace(" ", "")
    if len(cleaned) != 24:
        raise ValueError("原二进制字符串必须是24位(含空格的话是6组4位)")
    
    # 计算偶校验位(第1位)
    first_12 = cleaned[:12]
    even_parity = '0' if first_12.count('1') % 2 == 0 else '1'
    
    # 计算奇校验位(第26位)
    last_12 = cleaned[12:]
    odd_parity = '0' if last_12.count('1') % 2 == 1 else '1'
    
    # 格式化为易读的分组形式
    full_26 = even_parity + cleaned + odd_parity
    formatted = f"{full_26[0]} " + " ".join([full_26[i:i+4] for i in range(1, 26, 4)])
    return formatted

# 测试你的示例
original = "1111 1011 0111 0111 1111 1010"
result = compute_wiegand26_parity(original)
print(f"原字符串:{original}")
print(f"带校验位的26位Wiegand字符串:{result}")

运行这段代码后,输出和我们手动计算的结果完全一致~

内容的提问来源于stack exchange,提问作者myke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:17:39