Алгоритм формирования штрих-кода EAN-8
Последнее изменение: 17/03/2022 13:38:24Некоторое время назад, мне понадобилось написать одну систему, использующую штрих-коды для отслеживания оборудования. В силу ряда причин, после анализа доступных вариантов был выбран в качестве основного штрих-код стандарта EAN-8. Мне нужен был алгоритм формирования штрих-кода, чтобы я мог автоматически генерировать нужные изображения. Результаты изысканий и подробное описание работы алгоритма я и привожу ниже.
Немного общей информации
Система штрих-кодов используется для быстрого маркирования различных товаров или оборудования. Штрих-код может быть затем легко прочитан при помощи сканера штрих-кодов и автоматически преобразован в цифровой код. Системы делятся на линейные и двухмерные.
На данный момент существует несколько стандартных штрих-кодов, отличающихся форматом самого штрих-кода, а также количеством уникальных комбинаций. Самые распространенные системы штрих-кодирования:
- EAN-13 / EAN-8
- EAN-128
- ITF-14
- PDF417 code (двухмерный)
- Datamatrix code (двухмерный)
Штрих-код EAN-8, который описывается далее, является одним из самых распространенных форматов штрих-кодирования с емкостью в 8 цифр и по структуре похоже на код EAN-13.
Алгоритм расчета и формирования
Штрих-код EAN-8 состоит из 8 цифр, первые 7 из которых являются значащими, а последняя цифра кодирует контрольную сумму и должна быть рассчитана на основе предыдущих 7 цифр. Ниже описан общий алгоритм формирования кода, найденный на этом сайте.
Расчет контрольной суммы
Числа нумеруются слева направо. Контрольная сумма рассчитывается по следующему алгоритму.
x = сумма четных чисел y = сумма нечетных чисел z = x + 3 * y m - ближайшее большее к Z число, которое делится на 10 CheckSum = m - z
Пример расчета контрольной суммы:
Исходный 7-значный код: 3596710 x = 5 + 6 + 1 = 12; y = 3 + 9 + 7 + 0 = 19; z = 12 + 3 * 19 = 69; m = 70 CheckSum = 70 - 69 = 1 EAN-8 -> 3596 7101
Формирование штрих-кода
При кодировании исходной цифровой последовательности, используются следующие соглашения:
- Цифры кодируются согласно приведенной ниже таблице
- Ширина тонкой вертикальной линии (0.33мм по стандарту) определяет модуль
- Cуществуют вертикальные линии шириной 1, 2, 3 или 4 модуля и то же самое для пробелов между между вертикальными линиями
- Каждая цифра кодируется при помощи 7 модулей и всегда включает в себя две вертикальные линии и два пробела
Если обозначить вертикальную черту цифрой "1", а пробел цифрой "0", то:
- Начальный и конечный маркер обозначаются как "101"
- Средний разделитель после 4-ой цифры определяется комбинацией "01010"
- Общая длина кода всегда 7 * 7 + 2 * 3 + 5 = 60 модулей и всегда 22 вертикальные линии
- Разделительные вертикальные линии снизу всегда на 5 модулей длиннее, чем все остальные
- Для кода необходима пустая зона, как минимум, 11 модулей слева и 7 модулей справа
Таблицы кодирования
Для преобразования исходных цифр в соответствующие им вертикальные линии для кодов EAN-13 и ЕАН-8, используется следующая таблица:
Digit | Table A | Table B | Table C |
---|---|---|---|
0 | 0001101 | 0100111 | 1110010 |
1 | 0011001 | 0110011 | 1100110 |
2 | 0010011 | 0011011 | 1101100 |
3 | 0111101 | 0100001 | 1000010 |
4 | 0100011 | 0011101 | 1011100 |
5 | 0110001 | 0111001 | 1001110 |
6 | 0101111 | 0000101 | 1010000 |
7 | 0111011 | 0010001 | 1000100 |
8 | 0110111 | 0001001 | 1001000 |
9 | 0001011 | 0010111 | 1110100 |
При кодирования в EAN-8, для первых четырех цифр используется таблица A, а для вторых четырех цифр таблица C.