Введение
Код 39 (также известный как Alpha39, Код 3 из 9, Код 3/9, Тип 39, USS Code 39 или USD 3) — это штриховая символика переменной длины, дискретного типа, определенная в ISO/IEC 16388:2007. Спецификация Кода 39 определяет 43 символа, состоящие из прописных букв (от A до Z), цифровых цифр (от 0 до 9) и ряда специальных символов ( , ., $, /, +, %, и пробел). Дополнительный символ (обозначаемый «*») используется в качестве стартового и стопового разделителя. Каждый символ состоит из девяти элементов: пяти штрихов и четырех пробелов. Три из девяти элементов в каждом символе широкие (бинарное значение 1), а шесть элементов узкие (бинарное значение 0). Схема штрих-кода не содержит контрольной цифры (в отличие, например, от Кода 128), но может считаться самопроверяемой, поскольку одна ошибочно интерпретированная штриховая линия не может сгенерировать другой допустимый символ. Вероятно, наиболее серьезным недостатком Кода 39 является его низкая плотность данных: для кодирования данных в Коде 39 требуется больше места, чем, например, в Коде 128. Это означает, что очень маленькие товары нельзя маркировать штрих-кодом на основе Кода 39. Однако Код 39 все еще используется некоторыми почтовыми службами (хотя Всемирный почтовый союз рекомендует использовать Код 128 во всех случаях), и его можно декодировать практически любым сканером штрих-кодов. Одним из преимуществ Кода 39 является то, что, поскольку нет необходимости генерировать контрольную цифру, его можно легко интегрировать в существующую систему печати, добавив шрифт штрих-кода в систему или принтер, а затем печатая исходные данные этим шрифтом. Код 39 был разработан доктором Дэвидом Аллесом и Рэем Стивенсом из Intermec в 1974 году. Их первоначальная конструкция включала две широкие линии и одно широкое пространство в каждом символе, что давало 40 возможных символов. Отложив один из этих символов для стартового и стопового шаблона, осталось 39 символов, что и послужило происхождением названия «Код 39». Позже были добавлены четыре знака препинания, без использования широких штрихов и с тремя широкими пробелами, расширив набор символов до 43 символов. Код 39 был позже стандартизирован как ANSI MH 10.8 M 1983 и MIL STD 1189. MIL STD 1189 был отменен и заменен ANSI/AIM BC1/1995, Единая спецификация символики — Код 39.
Code 39 (also known as Alpha39, Code 3 of 9, Code 3/9, Type 39, USS Code 39, or USD 3) is a variable length, discrete barcode symbology defined in ISO/IEC 16388:2007. The Code 39 specification defines 43 characters, consisting of uppercase letters (A through Z), numeric digits (0 through 9) and a number of special characters ( , ., $, /, +, %, and space). An additional character (denoted '*') is used for both start and stop delimiters. Each character is composed of nine elements: five bars and four spaces. Three of the nine elements in each character are wide (binary value 1), and six elements are narrow (binary value 0). The barcode scheme does not contain a check digit (in contrast to—for instance—Code 128), but it can be considered self checking on the grounds that a single erroneously interpreted bar cannot generate another valid character. Possibly the most serious drawback of Code 39 is its low data density: It requires more space to encode data in Code 39 than, for example, in Code 128. This means that very small goods cannot be labeled with a Code 39 based barcode. However, Code 39 is still used by some postal services (although the Universal Postal Union recommends using Code 128 in all cases), and can be decoded with virtually any barcode reader. One advantage of Code 39 is that since there is no need to generate a check digit, it can easily be integrated into an existing printing system by adding a barcode font to the system or printer and then printing the raw data in that font. Code 39 was developed by Dr. David Allais and Ray Stevens of Intermec in 1974. Their original design included two wide bars and one wide space in each character, resulting in 40 possible characters. Setting aside one of these characters as a start and stop pattern left 39 characters, which was the origin of the name Code 39. Four punctuation characters were later added, using no wide bars and three wide spaces, expanding the character set to 43 characters. Code 39 was later standardised as ANSI MH 10.8 M 1983 and MIL STD 1189. MIL STD 1189 has been cancelled and replaced by ANSI/AIM BC1/1995, Uniform Symbology Specification — Code 39.
Кодирование
Символ «*», представленный ниже, не является истинным кодируемым символом, но служит символом начала и окончания кода 39. Асимметрия символа позволяет считывающему устройству определить направление сканируемого штрих-кода. Этот код традиционно отображается символом «*» в шрифтах штрих-кодов и часто появляется вместе с удобочитаемым представлением рядом со штрих-кодом. В общем случае, расположение двух широких штрихов можно считать кодирующим число от 1 до 10, а расположение широкого интервала (имеющего четыре возможных положения) можно считать классифицирующим символ в одну из четырех групп (слева направо): Буквы (+30) (U–Z), Цифры (+0) (1–9, 0), Буквы (+10) (A–J) и Буквы (+20) (K–T). Например, буква P (являющаяся 16-й буквой алфавита) имеет штрихи, выровненные для представления числа 6, и интервал в крайнем правом положении для выбора группы Букв (+20). При представлении в виде цифры число «10» используется для кодирования числа ноль. Поскольку в группе Букв (+30) всего шесть букв (буквы 30–35, или U–Z), остальные четыре позиции в этой группе (36–39) используются для представления трех символов (тире, точка, пробел), а также символа начала/остановки. Две широкие полосы, из пяти возможных позиций, кодируют число от 1 до 10, используя код «два из пяти» со следующим числовым соответствием: 1, 2, 4, 7, 0. Числа суммируются. Например, число 6 кодируется как NWWNN, при этом широкие полосы занимают позиции 2 и 4 (2+4=6). В случае NNWWN, что равно 1 = 4+7 = 11, оно присваивается 0 для цифр (+0) и 10 для буквенных столбцов (+10 – +30). При кодировании букв (+10 до +30) к уравнению необходимо добавить «-1», поэтому ‘A’ – WNNNW → 1 + 10 − 1 → 10, как показано в таблице. Последние четыре символа состоят из узких штрихов и трех широких интервалов. Существует четыре возможных положения для единственного узкого интервала. В данной таблице представлены спецификации кода 39. Численное значение, присвоенное каждому символу (за исключением начала/остановки), используется в алгоритме контрольной суммы, описанном ниже. + Символы Code 39 (и значения контрольной суммы) Штрихи Интервалы || ||| +0 ||| || +10 |||| | +20 | |||| +30 ▮|||▮ 1 ▮| ||▮ 1 1 ▮|| |▮ A 10 ▮||| ▮ K 20 ▮ |||▮ U 30 |▮||▮ 2 |▮ ||▮ 2 2 |▮| |▮ B 11 |▮|| ▮ L 21 | ▮||▮ V 31 ▮▮||| 3 ▮▮ ||| 3 3 ▮▮| || C 12 ▮▮|| | M 22 ▮ ▮||| W 32 ||▮|▮ 4 || ▮|▮ 4 4 ||▮ |▮ D 13 ||▮| ▮ N 23 | |▮|▮ X 33 ▮|▮|| 5 ▮| ▮|| 5 5 ▮|▮ || E 14 ▮|▮| | O 24 ▮ |▮|| Y 34 |▮▮|| 6 |▮ ▮|| 6 6 |▮▮ || F 15 |▮▮| | P 25 | ▮▮|| Z 35 |||▮▮ 7 || |▮▮ 7 7 ||| ▮▮ G 16 |||▮ ▮ Q 26 | ||▮▮ 36 ▮||▮| 8 ▮| |▮| 8 8 ▮|| ▮| H 17 ▮||▮ | R 27 ▮ ||▮| 37 |▮|▮| 9 |▮ |▮| 9 9 |▮| ▮| I 18 |▮|▮ | S 28 | ▮|▮| ␣ 38 ||▮▮| 10 || ▮▮| 0 0 ||▮ ▮| J 19 ||▮▮ | T 29 | |▮▮| * ||||| | | | || $ 39 | | || | / 40 | || | | + 41 || | | | % 42
Символы разделяются дополнительным узким интервалом. Например, полное кодирование для единственной буквы «A», которое фактически включает символы начала и окончания в виде «*A*», выглядит как "| |▮▮|▮|| |▮| |▮▮|". Код не будет прочитан правильно без этих межсимвольных интервалов. Шрифты штрих-кодов неизменно включают этот интервал в глифе для символа.
Полный код ASCII 39
Код 39 ограничен 43 символами. В полной ASCII версии Кода 39 символы 0–9, A–Z, ". ", " " и пробел соответствуют их представлениям в Коде 39. Строчные буквы, дополнительные знаки препинания и управляющие символы кодируются последовательностями из двух символов Кода 39. Детали кодирования: Nr Символ Кодировка Nr Символ Кодировка Nr Символ Кодировка Nr Символ Кодировка 0 NUL %U 32 [пробел] [пробел] 64 @ %V 96 ` %W 1 SOH $A 33 ! /A 97 a +A 2 STX $B 34 " /B 98 b +B 3 ETX $C 35 # /C 99 c +C 4 EOT $D 36 $ /D 100 d +D 5 ENQ $E 37 % /E 101 e +E 6 ACK $F 38 & /F 102 f +F 7 BEL $G 39 ' /G 103 g +G 8 BS $H 40 ( /H 104 h +H 9 HT $I 41 ) /I 105 i +I 10 LF $J 42 * /J 106 j +J 11 VT $K 43 + /K 107 k +K 12 FF $L 44 , /L 108 l +L 13 CR $M 45 - /M 109 m +M 14 SO $N 46 . /N 110 n +N 15 SI $O 47 / /O 111 o +O 16 DLE $P 48 0 0 112 p +P 17 DC1 $Q 49 1 1 113 q +Q 18 DC2 $R 50 2 2 114 r +R 19 DC3 $S 51 3 3 115 s +S 20 DC4 $T 52 4 4 116 t +T 21 NAK $U 53 5 5 117 u +U 22 SYN $V 54 6 6 118 v +V 23 ETB $W 55 7 7 119 w +W 24 CAN $X 56 8 8 120 x +X 25 EM $Y 57 9 9 121 y +Y 26 SUB $Z 58 : /Z 122 z +Z 27 ESC %A 59 ; %F 91 [ %K 123 { %P 28 FS %B 60 < %G 92 \ %L 124 | %Q 29 GS %C 61 = %H 93 ] %M 125 } %R 30 RS %D 62 > %I 94 ^ %N 126 ~ %S 31 US %E 63 ? %J 95 _ %O 127 DEL %T, %X, %Y, %Z