Что-то не так с моим штрих-кодом (код 128)

Было легко создать3 из 9 использование штрих-кодаFont()

Font f = new Font("Free 3 of 9", 80);
this.Font = f;

Label l = new Label();
l.Text = "*STACKOVERFLOW*";
l.Size = new System.Drawing.Size(800, 600);
this.Controls.Add(l);

this.Size = new Size(800, 600);

Работает. Я вижу штрих-код и могу его отсканировать. Теперь я хотел бы использовать что-то еще, какКод 128 Для этого мне нужно установить шрифт (готово) и просто изменить

Font f = new Font("Free 3 of 9", 80); вFont f = new Font("Code 128", 80);

После этого я вижу штрих-код на моем окне. Проблема в том, что я не могу сканировать это. И я думаю, это потому, что я не использую правоstart а такжеstop тег для штрих-кода. Как я понял, всегда должен быть начальный / конечный символ или что-то еще. Для 3 из 9 это * для кода 128 я не уверен. На вики естьStart Code A поэтому я попробовал

Font f = new Font("<Start Code A>test<Stop>", 80);, Font f = new Font("<Start Code A>test<Stop Code A>", 80); и так далее ... Я не могу сканировать вывод. Потому что сканер не может найти начальный и конечный символ. Есть идеи? Спасибо

 Geronimo28 июн. 2012 г., 18:02
Я вижу проблему с вашим штрих-кодом, см. Правку внизу моего ответа.

Ответы на вопрос(3)

Посмотри наэта страница чтобы увидеть, как рассчитать контрольную сумму

Для альтернативы взгляните на следующую ссылку - это позволяет создавать растровые изображения штрих-кода:

http://www.codeproject.com/KB/graphics/BarcodeLibrary.aspx?fid=470627&fr=26#xx0xx

 25 июн. 2012 г., 21:24
@Matt хорошие ссылки +1
 25 июн. 2012 г., 11:40
@Geronimo - я отредактировал свой ответ
 sabisabi11 июн. 2012 г., 11:06
Я думал, что могу создать весь штрих-код только с помощью Font (), как для штрих-кода 3 из 9. Почему это должно быть так сложно, я не понимаю ... шрифт есть, и этого недостаточно? Если вы используете Google для & quot; загрузки кода 128 шрифта & quot; Вы найдете несколько загрузок.
 24 июн. 2012 г., 19:57
@sabisabi code128 может быть представлен шрифтом, я опубликую ответ через минуту.

Смотря наСтраница википедии для Barcode128, я думаю, вы должны использовать ASCII-коды 208-210, чтобы разделить блок, в соответствии сBar Code Widths абзац и таблица.

 03 нояб. 2018 г., 23:27
Как это. (char) (0208)). ToString (). Существуют разные способы, если вы конвертируете несколько байтов одновременно, но для этого этого должно быть достаточно.stackoverflow.com/questions/13736480/… или просто Google для преобразования массивов байтов символов в строки.
 sabisabi11 июн. 2012 г., 11:11
Вот что я не понимаю. С 208 по 210 должен быть начальным тегом право? А стоп-тег 211? И затем я добавляю символ ascii как 208 в начало моей строки, а в конце - символ ascii 211 - не уверен, как это сделать с помощью c #
Решение Вопроса

Код 128 может быть представлен шрифтом совершенно нормально. Это сложнее, чем 3 из 9, потому что в конце необходимо включить символ контрольной суммы, который необходимо динамически вычислять на основе содержимого штрих-кода. Есть также 3 разные версии, каждая из которых имеет свой начальный символ.

Другими словами, штрих-код должен быть выложен так:

[start char][barcode][checksum][stop char]

Преимущество кода 128 состоит в том, что он гораздо более краткий, чем 3 из 9.

Эта страница помог мне разработать алгоритм для вычисления моих контрольных сумм.

Общий обзор алгоритма:

Each character of the barcode gets a specific value assigned to it depending on what the character is and where it is located in the barcode.

All of the values in 1) above are added together.

Get the modulus 103 value of the total in 2) above.

In most cases, the checksum char will be the ASCII code for: (modulus value plus 32) as determined in 3) above.

Были некоторые нюансы, мне в конечном итоге нужно было создать этот алгоритм в javascript из всех вещей (без вопросов). Для моей будущей ссылки и для демонстрации некоторых нюансов это выглядит так:

/*
 * This is the variable part of my barcode, I append this to a 
 * static prefix later, but I need to perform logic to compute the 
 * checksum for this variable. There is logic earlier that enforces 
 * this variable as a 9 character string containing only digits.   
 */ 
var formIncrement = // a 9 char "digit" string variable

/*
 * Dynamically compute the total checksum value (before modulus) 
 * for the variable part of my barcode, I will need to get a modulus 
 * from this total when I am done. If you need a variable number of 
 * characters in your barcodes or if they are not all digits 
 * obviously something different would have to be done here.  
 */ 
var incrementCS = ((parseInt(formIncrement.charAt(0)) + 16) * 7) +
                  ((parseInt(formIncrement.charAt(1)) + 16) * 8) +
                  ((parseInt(formIncrement.charAt(2)) + 16) * 9) +
                  ((parseInt(formIncrement.charAt(3)) + 16) * 10) +
                  ((parseInt(formIncrement.charAt(4)) + 16) * 11) +
                  ((parseInt(formIncrement.charAt(5)) + 16) * 12) +
                  ((parseInt(formIncrement.charAt(6)) + 16) * 13) +
                  ((parseInt(formIncrement.charAt(7)) + 16) * 14) + 
                  ((parseInt(formIncrement.charAt(8)) + 16) * 15);

/*
 * 452 is the total checksum for my barcodes static prefix (600001), 
 * so it doesn't need to be computed dynamically, I just add it to 
 * the variable checksum total determined above and then get the 
 * modulus of that sum:  
 */ 
var checksum = (452 + incrementCS) % 103


var barcode = "š600001" + formIncrement

/*
 * The 0 and the 95 - 102 cases had to be defined explicitly because 
 * their checksum figures do not line up with the javascript char 
 * codes for some reason (see the code 128 definition table in the 
 * linked page) otherwise we simply need to get the charCode of the 
 * checksum + 32. I also tack on the stop char here. 
 */ 
switch (checksum) {
    case 0 :
    barcode += "€œ";
    break;
    case 95 :
    barcode += "‘œ";
    break;
    case 96 :
    barcode += "’œ";
    break;
    case 97 :
    barcode += "“œ";
    break;
    case 98 :
    barcode += "”œ";
    break;
    case 99 :
    barcode += "•œ";
    break;
    case 100 :
    barcode += "–œ";
    break;
    case 101 :
    barcode += "—œ";
    break;
    case 102 :
    barcode += "˜œ";
    break;
    default :
    barcode += String.fromCharCode(checksum + 32) + "œ";
}

return barcode;

Вы можете заметить, что мои начальные и конечные символы в моем примере (& # x161 ;, & # x153;), похоже, не совпадают с теми, которые показаны на связанной странице. Если я помню, я думаю, что это потому, что у меня был какой-то нестандартный шрифт code128, и эти символы переведены на правильные.

EDIT

Я проверил обратно в моей документации. Похоже, я получил шрифт отПрямо здесь, С этим шрифтом специально и используя алгоритм выше, я просто сделал штрих-код code128b дляtest который вышел наštestwœСканировал нормально. Ваш алгоритм контрольной суммы, кажется, работает нормально, потому что у нас обоихw но похоже, что ваши стартовые и стоп коды отключены, если вы получаете:ÌtestwÎ.

Я решил поискать тот же шрифт штрих-кода, который я использую, потому что у меня есть ощущение, что разные марки шрифтов code128 могут реализовывать разные символы для представления стартового и конечного штрих-кодов.

 sabisabi27 июн. 2012 г., 10:07
Это интересно, спасибо. Если я загружаю sourcode со страницы и запускаю его, я могу сгенерировать код 128 (или что-то похожее на код 128), но не могу его отсканировать. Хм, что-то не так.
 sabisabi28 июн. 2012 г., 14:09
привет, мое входное значение - "тест" и моим значением кодирования является & quot; & # xCC; testw & # xCE; & quot; - Я получил штрих-код, но я не смог его отсканировать (jtbarton.com/Barcodes/BarcodeStringBuilderExample.aspx)
 sabisabi04 июл. 2012 г., 14:48
Каким-то образом это работает сейчас. Я попытался удалить все другие шрифты штрих-кода и установил только один код 128 - я до сих пор не получаю его на 100%, но он работает;) Полезно знать, и, как мы видим, многие люди (даже SO 'помощники') думая, что это не может работать со стандартными шрифтами, НО это делает. Спасибо.
 22 мар. 2013 г., 19:46
Я могу правильно сгенерировать штрих-код и прочитать его, однако указанный шрифт не может отображать символ при контрольной сумме 32 (например, 100004392). И не может найти шрифт, который может отображать это 32 И префикс / суффикс. Любая идея ?
 27 июн. 2012 г., 17:52
@sabisabi, если вы отправите символы, которые содержит ваш штрих-код, я, вероятно, скажу вам, что с ним не так.

Ваш ответ на вопрос