Comments 33
Просто жесть. Можно было хоть библиотеку оформить. Или что-то новое рассказать. Хотя чего тут нового может быть?
В интернете сего добра просто навалом. Например, GenCode128.
В интернете сего добра просто навалом. Например, GenCode128.
Целью написания статьи было ознакомить человека как написать самому подобный генератор. Хотя я и не дал много ссылок, я специально выложил весь код, по которому можно понять как программа работает. Думаю, что смотря информацию в интернете и имея данный код, существенно проще написать что-то свое более функциональное. Также я планирую написать статтю о генерации 2D кодов. Как идея?
может простыню кода лучше вынести в pastebin-подобный сервис? :)
Вообще, подобного рода код самостоятельно стоит писать в очень редких случаях, я бы сказал никогда. Намного проще обернуть существующую библиотеку, например.
Кроме того, зачем же выставлять напоказ такие портянки страшного кода?
Кроме того, зачем же выставлять напоказ такие портянки страшного кода?
Если тебе надо только результат — да, проще использовать библиотеку. НО если тебе нужно будет реализовать, например свой формат штрих кода, то нужно понимать как механизм работает. Иначе просто не сделаешь. И кроме того, зная и имея алгоритм, создать библиотеку можно без особого труда. А вот без знания алгоритма, не составишь.
Именно здесь есть тег habracut. Но он почему-то не работает. Кроме того, я дал ссылку в статье на кодирование форматом Code128. Она почему то для меня не видна, хотя в HTML коде есть. Так что я наверное прислушаюсь вас и выложу код на pastebin.
Детальная информация об алгоритме кодирования и о расчете контрольной цифры есть тут:
а по точнее?
а по точнее?
Теперь и в статье ссылка должна быть.
www.barcodeman.com/info/c128.php3
www.barcodeman.com/info/c128.php3
Спрячьте этот код!
Использовать конкатенацию в стринг string — моветон, это собственно азы программирования .net, для этого есть StringBuilder.
Названия переменных lst, htb, z, zz (!) и тп. просто так и просятся переимноваться.
Использовать конкатенацию в стринг string — моветон, это собственно азы программирования .net, для этого есть StringBuilder.
Названия переменных lst, htb, z, zz (!) и тп. просто так и просятся переимноваться.
Так и сделал, кому надо мой код — он есть на PasteBin
не надо везде пихать StringBuilder, если дело происходит не в цикле на 100500 итераций, то это экономия на спичках.
Это «правила хорошего тона».
Теперь представьте, что этот код начали использовать в производстве, к примеру в автоматизированных системах, где вдруг этот метод должен вызываться, как вы выразились, 100500 раз.
В итоге на вот таких вот «спичках» мы получаем провал в производительности. А потом начнутся разговоры, что C# ерунда, это только для домохозяей и в сложных, крупных проектах его использовать нельзя.
Теперь представьте, что этот код начали использовать в производстве, к примеру в автоматизированных системах, где вдруг этот метод должен вызываться, как вы выразились, 100500 раз.
В итоге на вот таких вот «спичках» мы получаем провал в производительности. А потом начнутся разговоры, что C# ерунда, это только для домохозяей и в сложных, крупных проектах его использовать нельзя.
Еще раз напишу, что целью написания статьи была дать представление и показать на примере. Мой код действительно написан без правил хорошего тона. А что касается
То данный код вставлен другой моей программой, которая пропарсила HTML, и извлекла данные из таблицы кодов. Я признаю ( и тут никак не поспоришь) что код написан «на скорую руку».
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 и правда лучше спрятать, порефакторить, а потом уже показывать.
Каким образом проходил проверка с ABBYY?
Я сделал на форме кнопку, которая копировала изображение самого кода в буфер обмена. Так же можно сделав снимок экрана, самому найти код. Далее нужно вставить изображение в FineReader. У меня лицензионная версия FineReader Professional, и она у меня сама определила, что это штрих код, и чему он равен.
А как быть с PDF417?
Неделя говнокода на хабре?
Хотя бы ссылки на википедию по этим двум форматам стоит добавить и рассказать что-нибудь про их историю. Например о том, что EAN-13 это самый распространенный код для маркировки товаров. А также то, что в EAN-13 одна цифра не кодируется явно через последовательность черных и белых штрихов, а кодируется через выбор L или G кодов для первых 6 цифр. Еще стоило бы сказать, что есть такой тип баркода UPC-A, который является предком и подмножеством EAN-13, и у которого не было этой веселухи с 13-й цифрой.
А вообще, для всех основных типов баркодов в интернете есть их генераторы, и даже можно найти бесплатные и с открытым исходным кодом. Бесплатных распознавалок меньше, но тоже есть.
PS. Скажу спасибо тому, кто найдет бесплатную распознавалку MaxiCode
PS. Скажу спасибо тому, кто найдет бесплатную распознавалку MaxiCode
С принтерами штрих-кодов всегда идут драйвера + библиотеки на все случаи жизни и почти все платформы.
Нет проблем с юнитами и безобразными искажениями, с 1D, 2D кодами, текстом и графиком в одной этикетке.
Нет проблем с юнитами и безобразными искажениями, с 1D, 2D кодами, текстом и графиком в одной этикетке.
Хэх. Мы такую фигную в универе(КПИ ФПМ) как курсач писали. Только у нас оно учитывало угол поворота, ему было пофик на размер штрихкода(т.е. можно было закодировать, потом расайзнуть и наша прога раскодировала его без особых проблем). Кароче у нас вам бы тройку еле еле поставили бы.
Слабовато для курсовой, вообще говоря…
За один день курсовую не напишешь. Кстати, никто вам бесплатно не напишет хороший код. Я согласен, что прога дырявая, но согласитесь, что она может помочь в изучении материала и дать представление о принципе работы.
Sign up to leave a comment.
Штриховое кодирование: программная реализация на С#