Pull to refresh

Comments 33

Просто жесть. Можно было хоть библиотеку оформить. Или что-то новое рассказать. Хотя чего тут нового может быть?

В интернете сего добра просто навалом. Например, GenCode128.
Не так уж и много. ИМХО, самая правильная библиотека из всего этого шлака — Zint.
Целью написания статьи было ознакомить человека как написать самому подобный генератор. Хотя я и не дал много ссылок, я специально выложил весь код, по которому можно понять как программа работает. Думаю, что смотря информацию в интернете и имея данный код, существенно проще написать что-то свое более функциональное. Также я планирую написать статтю о генерации 2D кодов. Как идея?
может простыню кода лучше вынести в pastebin-подобный сервис? :)
Вообще, подобного рода код самостоятельно стоит писать в очень редких случаях, я бы сказал никогда. Намного проще обернуть существующую библиотеку, например.

Кроме того, зачем же выставлять напоказ такие портянки страшного кода?
Если тебе надо только результат — да, проще использовать библиотеку. НО если тебе нужно будет реализовать, например свой формат штрих кода, то нужно понимать как механизм работает. Иначе просто не сделаешь. И кроме того, зная и имея алгоритм, создать библиотеку можно без особого труда. А вот без знания алгоритма, не составишь.
Именно здесь есть тег habracut. Но он почему-то не работает. Кроме того, я дал ссылку в статье на кодирование форматом Code128. Она почему то для меня не видна, хотя в HTML коде есть. Так что я наверное прислушаюсь вас и выложу код на pastebin.
Детальная информация об алгоритме кодирования и о расчете контрольной цифры есть тут:
а по точнее?
Спрячьте этот код!

Использовать конкатенацию в стринг string — моветон, это собственно азы программирования .net, для этого есть StringBuilder.
Названия переменных lst, htb, z, zz (!) и тп. просто так и просятся переимноваться.

Так и сделал, кому надо мой код — он есть на PasteBin
не надо везде пихать StringBuilder, если дело происходит не в цикле на 100500 итераций, то это экономия на спичках.
Это «правила хорошего тона».

Теперь представьте, что этот код начали использовать в производстве, к примеру в автоматизированных системах, где вдруг этот метод должен вызываться, как вы выразились, 100500 раз.

В итоге на вот таких вот «спичках» мы получаем провал в производительности. А потом начнутся разговоры, что C# ерунда, это только для домохозяей и в сложных, крупных проектах его использовать нельзя.
я вообще предпочитаю использовать больше функциональный подход, потому в некоторых местах циклы я заменю не на StringBuilder, а на String.Join. А вот htb.Add(...) я бы заменил на инициализацию, причем табличу эту явно надо сделать статической.
Еще раз напишу, что целью написания статьи была дать представление и показать на примере. Мой код действительно написан без правил хорошего тона. А что касается

lst = new List(){ " ","!","\"","#",… }

То данный код вставлен другой моей программой, которая пропарсила HTML, и извлекла данные из таблицы кодов. Я признаю ( и тут никак не поспоришь) что код написан «на скорую руку».
Ладно, с хорошим тоном все ясно, а что насчет обилия «магических констант» в коде? Что все эти цифры означают? Вы сказали, что целью было показать, как написать свой генератор и даже выложили весь код, по которому якобы можно понять, как программа работает. Но, глядя в ваш код, все, что я понимаю, это что без чтения дополнительного материала (в том числе и по ссылке в тексте) ничего понять вообще нельзя.
Какая именно константа? Потому как я не совсем понимаю, что подразумевается под «магической константой».
lst = new List<string>();
lst.Add(" ");
lst.Add("!");
lst.Add("\"");
lst.Add("#");
...

Брюки превращаются:

lst = new List<string>(" !\"#...".ToCharArray().Select(c => c.ToString())

Для htb сильно подойдут инициализаторы коллекций, а код EAN13 и правда лучше спрятать, порефакторить, а потом уже показывать.
lst = new List(){ " ","!","\"","#",… }
Вы уверены, что Ваш код лучше тех пяти строчек? :)
Каким образом проходил проверка с ABBYY?
Я сделал на форме кнопку, которая копировала изображение самого кода в буфер обмена. Так же можно сделав снимок экрана, самому найти код. Далее нужно вставить изображение в FineReader. У меня лицензионная версия FineReader Professional, и она у меня сама определила, что это штрих код, и чему он равен.
UFO just landed and posted this here
Хотя бы ссылки на википедию по этим двум форматам стоит добавить и рассказать что-нибудь про их историю. Например о том, что EAN-13 это самый распространенный код для маркировки товаров. А также то, что в EAN-13 одна цифра не кодируется явно через последовательность черных и белых штрихов, а кодируется через выбор L или G кодов для первых 6 цифр. Еще стоило бы сказать, что есть такой тип баркода UPC-A, который является предком и подмножеством EAN-13, и у которого не было этой веселухи с 13-й цифрой.
А вообще, для всех основных типов баркодов в интернете есть их генераторы, и даже можно найти бесплатные и с открытым исходным кодом. Бесплатных распознавалок меньше, но тоже есть.
PS. Скажу спасибо тому, кто найдет бесплатную распознавалку MaxiCode
С принтерами штрих-кодов всегда идут драйвера + библиотеки на все случаи жизни и почти все платформы.
Нет проблем с юнитами и безобразными искажениями, с 1D, 2D кодами, текстом и графиком в одной этикетке.

Хэх. Мы такую фигную в универе(КПИ ФПМ) как курсач писали. Только у нас оно учитывало угол поворота, ему было пофик на размер штрихкода(т.е. можно было закодировать, потом расайзнуть и наша прога раскодировала его без особых проблем). Кароче у нас вам бы тройку еле еле поставили бы.
Слабовато для курсовой, вообще говоря…
За один день курсовую не напишешь. Кстати, никто вам бесплатно не напишет хороший код. Я согласен, что прога дырявая, но согласитесь, что она может помочь в изучении материала и дать представление о принципе работы.
Я сам пишу код бесплатно. И мне верится, что хороший.

Но говорил я о том, что такое задание не тянет на задание для курсовой, слишком мелко.

P.S. Я вообще не понимаю, о чем идет речь, какое изучение, какое представление о принципе работы? Открыл вики — посмотрел схему кодирования — написал.
Sign up to leave a comment.

Articles