Ошибка Wiegand: Ошибка четности бит (Parity Mismatch 26/34-bit Stream)
Математика контроля четности в форматах Wiegand 26 и 34 bit
Для обнаружения одиночных ошибок передачи во всех стандартных форматах Wiegand используется контроль четности (Parity Bits): первый бит посылки является четным битом паритета (Even Parity), а последний бит — нечетным битом паритета (Odd Parity).
Структура стандартного формата Wiegand 26 (H10301)
- Бит 1 (Even Parity $E$): Вычисляется по первым 12 битам данных (биты 2–13). Сумма единиц в блоке вместе с битом $E$ обязана быть ЧЕТНОЙ.
- Биты 2–9: Код организации / объекта (Facility Code, 8 бит, диапазон 0–255).
- Биты 10–25: Номер карты (Card ID, 16 бит, диапазон 0–65535).
- Бит 26 (Odd Parity $O$): Вычисляется по младшим 12 битам данных (биты 14–25). Сумма единиц вместе с битом $O$ обязана быть НЕЧЕТНОЙ.
Если контроллер СКУД принимает ровно 26 бит, но математический пересчет паритета $E$ или $O$ не сходится, генерируется ошибка Wiegand Parity Mismatch, а событие доступа отбрасывается как искаженное.
Бизнес-риски
Сотрудники с валидными пропусками получают отказ в доступе (Access Denied / Bad Parity). Служба безопасности видит в журнале СКУД «фантомные» номера карт (например, карта №12450 считывается как №45201 из-за инверсии бита).
Алгоритм устранения ошибки четности Wiegand
Сценарий 1: Проверка правильности подключения жил Data 0 и Data 1
Самая распространенная причина ошибки паритета — перепутанные местами провода Data 0 (зеленый) и Data 1 (белый). При этом все нули превращаются в единицы (побитовая инверсия):
- Если контроллер фиксирует постоянный Parity Error на всех картах подряд — поменяйте местами Data 0 и Data 1 на клеммнике считывателя или контроллера.
- Проверьте чтение карты: номер должен начать считываться корректно.
Сценарий 2: Расчет и валидация контрольной суммы скриптом Python
# Скрипт проверки четности Wiegand 26-bit
def verify_wiegand26(bit_string):
if len(bit_string) != 26:
return False, "Invalid Length"
even_bits = bit_string[1:13] # Биты 2-13
odd_bits = bit_string[13:25] # Биты 14-25
# Проверка Even Parity (Бит 1)
even_calc = 0 if (even_bits.count('1') % 2 == 0) else 1
even_valid = (int(bit_string[0]) == even_calc)
# Проверка Odd Parity (Бит 26)
odd_calc = 1 if (odd_bits.count('1') % 2 == 0) else 0
odd_valid = (int(bit_string[25]) == odd_calc)
return (even_valid and odd_valid), f"Even: {even_valid}, Odd: {odd_valid}"
print(verify_wiegand26("10000001000000000000001010"))Сценарий 3: Несоответствие формата Wiegand в СКУД (26-bit vs 34/37/58-bit)
Если считыватель настроен на выдачу полного 34-битного UID карты (Mifare / EM-Marine), а контроллер жестко ожидает 26-битный формат:
- Контроллер отрезает первые 26 бит из 34, в результате чего хвостовой бит паритета попадает в середину данных и расчет четности гарантированно дает сбой.
- Решение: В конфигураторе СКУД измените формат входного порта с Wiegand-26 на Wiegand-34 (1 Even + 32 Data + 1 Odd) или Wiegand-Auto.
Типовые ошибки администраторов
- Попытка чтения банковских карт и смартфонов в режиме Wiegand-26: Банковские EMV чипы генерируют динамический 4-байтный или 7-байтный UID, требующий формата Wiegand 34 или Wiegand 58.
- Отключение контроля четности («Ignore Parity»): Маскирует проблему помех на линии, приводя к открытию дверей по случайным ложным кодам.
Инженеры ITSTM настроят маски форматов карт любой битности (26/34/37/58 bit) в ПО СКУД и устранят сбои валидации идентификаторов.
Частые вопросы (FAQ)
Чем отличается Wiegand 26 от Wiegand 34?
Wiegand 26 содержит 1 бит Even + 8 бит Facility Code + 16 бит Card ID + 1 бит Odd. Wiegand 34 содержит 1 бит Even + 32 бита данных (UID) + 1 бит Odd, что позволяет передавать полные 4-байтные номера смарт-карт Mifare.
Почему при переполюсовке Data0/Data1 считыватель не сгорает?
Обе линии являются слаботочными логическими линиями открытого коллектора (+5V TTL). Переполюсовка между ними абсолютно безопасна электрически и приводит лишь к логической инверсии данных.
Что означает опция 'Ignore Parity' в настройках контроллера?
Опция заставляет контроллер игнорировать первый и последний биты паритета и извлекать только полезную нагрузку. Это повышает шанс считывания карты на зашумленных линиях, но резко снижает безопасность.
Как считываются карты HID Corporate 1000 по Wiegand?
Формат Corporate 1000 использует 35-битное или 48-битное кодирование с несколькими битами четности (полиномиальный паритет в начале и конце кадра).