条码生成代码(Code39码)

zryou 的 条码生成代码(Code39码)

『Code 39条形码介绍』

 code39条码能表示字母、数字和其它一些符号共43个字符:A -Z, 0-9, -.$/ + %, space等,其主要特点如下:
  ◆条码的长度是可变化的
  ◆通常用“*”号作为起始、终止符
  ◆校验码不用
  ◆代码密度介于3 - 9.4个字符/每英寸       
  ◆空白区是窄条的10倍
  ◆用于工业、图书、以及票证自动化管理上

三九码是Intermec公司于1975年推出的一种条码,它可表示数字、英文字母以及“-”、“.”、“/”、“ ”、“%”、“$”、“ ”(空格)和“*”共44个符号,其中“*”仅作为启始符和终止符。
三九码且有编码规则简单、误码率低、所能表示字符个数多等特点,因此在各个领域有着极为广泛的应用。我国也制定了相应的国家标准(GB12908-91)。
三九码仅有两种单元宽度——分别为宽单元和窄单元。宽单元这宽度为窄单元的1到3倍,一般多选用2倍、2.5倍或3倍。三九码的每一个条码字符由九个单元组成,其中有三个宽单元,其余是窄单元,因此称为三九码。
我国有的图书馆使用的39码使用了特殊的校验字符,条码软件都可打印适用于图书馆的39码。

代码原创: LovlyPuppy

实现该功能分两个类,第一个类 DrawImageBord.cs

using System.Drawing;
using System.Drawing.Imaging;
public   abstract   class   DrawImageBord
 ...{
     protected   virtual   string   BordRuleName
      ...{
         get   ...{   return   string.Empty;   }
      }

     protected   virtual   System.Collections.Hashtable   Roles
      ...{
         get   ...{   return   new   System.Collections.Hashtable();   }
      }

     string   drawString;
     int   width   =   800;   //画布的宽度(可计算)
     int   height   =   36;//1CM
     int   unitWidth   =   1;   //

     int   currentLocation   =   0;

     public   DrawImageBord(string   s)
     ...{
         drawString   =   s;
     }

     public   virtual   void   Draw(System.IO.Stream   target)
     ...{
         Bitmap   bm   =   new   Bitmap(width,   height);
         Graphics   g   =   Graphics.FromImage(bm);
         g.SmoothingMode   =   System.Drawing.Drawing2D.SmoothingMode.Default;
         g.TextRenderingHint   =   System.Drawing.Text.TextRenderingHint.AntiAlias;

         //画布和边的设定  
         g.Clear(Color.White);

         g.DrawRectangle(Pens.White,   0,   0,   width,   height);
         for(int   i   =   0;   i   <   drawString.Length;   i++)
               ...{
                   this.DrawString(drawString[i].ToString(),   g);
               }
        bm.Save(target,   ImageFormat.Jpeg);
     }
    protected   virtual   void   DrawString(string   s,   Graphics   g)
    ...{
          System.Collections.Hashtable   hash   =   this.Roles;
          object   o   =   hash[s];
          if   (o   ==   null)   return;
          char[]   chars   =   o.ToString().ToCharArray();
          if   (chars.Length   >   9)   return;
              SolidBrush   blackBrush   =   new   SolidBrush(Color.Black);
              SolidBrush   witeBrush   =   new   SolidBrush(Color.White);

           for(int   i   =   0;   i   <   5;   i++)
              ...{
                 //画第一个   0   黑条
                  if   (chars[i]   ==   '0')
                  ...{
                         Rectangle   re1   =   new   Rectangle(currentLocation,   0,   unitWidth,   height);
                         g.FillRectangle(blackBrush,   re1);
                         currentLocation   +=   unitWidth;
                  }
                  else
                  ...{
                         Rectangle   re1   =   new   Rectangle(currentLocation,   0,   3   *   unitWidth,   height);
                         g.FillRectangle(blackBrush,   re1);
                         currentLocation   +=   3   *   unitWidth;
                  }
                 //画第6个     5   白条
                  if   ((i   +   5)   <   9)
                  ...{
                       if   (chars[i+5] ==  '0')
                       ...{
                             Rectangle   re1   =   new   Rectangle(currentLocation,   0,   unitWidth,   height);
                             g.FillRectangle(witeBrush,   re1);
                             currentLocation   +=   unitWidth;
                       }
                       else
                       ...{
                               Rectangle   re1   =   new   Rectangle(currentLocation,   0,   3   *   unitWidth,   height);
                               g.FillRectangle(witeBrush,   re1);
                               currentLocation   +=   3   *   unitWidth;
                       }
                  }
               }
                 Rectangle   re2   =   new   Rectangle(currentLocation,   0,   unitWidth,   height);
                 g.FillRectangle(witeBrush,   re2);
                currentLocation   +=   unitWidth;

    }
}
第二个类CODE39DrawImageBord.cs 继承DrawImageBord.cs

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/**//**//** <summary>
/// CODE39DrawImageBord 的摘要说明
/// </summary>
public class CODE39DrawImageBord : DrawImageBord
......{
    private System.Collections.Hashtable hash = new System.Collections.Hashtable();
    protected override string BordRuleName
    ......{
        get ......{ return "CODE39"; }
    }
    public CODE39DrawImageBord(string s)
        : base(s)
    ......{

    }

    protected override System.Collections.Hashtable Roles
    ......{
        get
        ......{
            if (hash.Count > 0) return hash;
            hash.Add("0", "001100100");
            hash.Add("1", "100010100");
            hash.Add("2", "010010100");
            hash.Add("3", "110000100");
            hash.Add("4", "001010100");
            hash.Add("5", "101000100");
            hash.Add("6", "011000100");
            hash.Add("7", "000110100");

            hash.Add("8", "100100100");
            hash.Add("9", "010100100");
            hash.Add("A", "100010010");
            hash.Add("B", "010010010");
            hash.Add("C", "110000010");
            hash.Add("D", "001010010");
            hash.Add("E", "101000010");

            hash.Add("F", "011000010");
            hash.Add("G", "000110010");
            hash.Add("H", "100100010");
            hash.Add("I", "010100010");
            hash.Add("J", "001100010");
            hash.Add("K", "100010001");
            hash.Add("L", "010010001");

            hash.Add("M", "110000001");
            hash.Add("N", "001010001");
            hash.Add("O", "101000001");
            hash.Add("P", "011000001");
            hash.Add("Q", "000110001");
            hash.Add("R", "100100001");
            hash.Add("S", "010100001");


            hash.Add("T", "001100001");
            hash.Add("U", "100011000");
            hash.Add("V", "010011000");
            hash.Add("W", "110001000");
            hash.Add("X", "001011000");
            hash.Add("Y", "101001000");
            hash.Add("Z", "011001000");


            hash.Add("-", "000111000");
            hash.Add("%", "100101000");
            hash.Add("$", "010101000");
            hash.Add("*", "001101000");

            return hash;
        }
    }
}

调用的方法:

  protected void Page_Load(object sender, EventArgs e)
    ...{
        CODE39DrawImageBord dr = new CODE39DrawImageBord("*3949178*");
        dr.Draw(Response.OutputStream);

    }
--显示结果:

--显示结果:

引用 条码生成代码(Code39码) - chaoyueg - chaoyueg的博客

补充说明:

生成的这个条码,并没有用扫描枪去识别,
以后我会用Symbol DS6608数字扫描器 来识别它的准确性.

转载于:https://www.cnblogs.com/host-2008/archive/2011/04/09/2010186.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql那些事(6) WHERE条件 字符串的引号

前言&#xff1a;所谓的坑&#xff0c;两个意思&#xff0c;一个是软件本身的bug&#xff0c;一个是使用者常犯的错误。 phper在日常开发中经常和mysql打交道。特别是在没有分层的中小应用中&#xff0c;phper开发要关注sql语句的实现。 入正题&#xff0c;上建表语句&#xff…

mysql延迟关联为什么快_MySQL 覆盖索引与延迟关联详解

本期来谈谈覆盖索引与延迟关联。在此之前&#xff0c;我们先简单建立一个订单表 Orders 用于举例说明。表中共包含 3 个字段&#xff1a;idintproduct_idnameCREATETABLEordersidint10NOTNULLCOMMENT订单 IDproduct_idint10DEFAULTNULLCOMMENT商品 IDnamevarchar255CHARACTERSE…

学一下Unix/C啊

发信人: Winmine (挖地雷), 信区: Career_Upgrade标 题: Oracle(原bea)研发中心Tuxedo组&#xff0c;招Unix/C人才发信站: 水木社区 (Mon Apr 11 13:28:06 2011), 站内工作地点在中关村软件园&#xff0c;西二旗附近。要求至少2年相关工作经验----但一般来说&#xff0c;除非您…

Qt使用信号与槽时出现的错误“Incompatible sender/receiver arguments”

在学习使用qt的过程中&#xff0c;没有好好的去了解信号与槽的机制&#xff0c;导致出现了这么一段代码&#xff1a; connect(timer1, SIGNAL(timeout()), this, SLOT(exeMonitor(QString))); 在编译时没有出现错误&#xff0c;但当触发该信号时输出框显示&#xff1a; 即&…

mysql通过函数完成10的阶乘_请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!...

点击查看请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!具体信息 答:include "stdio.h" int fac(int k) { if(k==1) return 1; else return k*fac(k-1); }/*递归求阶乘*/ void main() { int i=1; for(i;i=5;i++) { fac(i);/*调用函数计算阶乘*/…

《大话数据结构》第9章 排序 9.3 冒泡排序(上)

9.3.1 最简单排序实现 无论你学习哪种编程语言&#xff0c;在学到循环和数组时&#xff0c;通常都会介绍一种排序算法来作为例子&#xff0c;而这个算法一般就是冒泡排序。并不是它的名称很好听&#xff0c;而是说这个算法的思路最简单&#xff0c;最容易理解。因此&…

简易js模板引擎

前阵子参考别人的文章自己理解了一下模板引擎的实现&#xff0c;虽然是照着敲了一边&#xff0c;但是自己也加深了理解吧。 原文链接 自己的代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><ti…

五款常用邮件管理系统评测

以邮件为主要沟通媒介的外贸企业&#xff0c;对邮件的依赖性可以说已经达到不能或缺的地步。软件厂商们深谙这一定律&#xff0c;为外贸企业提供了种类庞大的软件系统以供选择。以下笔者抽出其中五款使用较为普遍的邮件管理系统&#xff0c;根据其性能、系统稳定性、性价比等方…

for each java_Java 实例 - for 和 foreach循环使用

Java 实例 - for 和 foreach循环使用for 语句比较简单&#xff0c;用于循环数据。for循环执行的次数是在执行前就确定的。语法格式如下&#xff1a;for(初始化; 布尔表达式; 更新) {//代码语句}foreach语句是java5的新特征之一&#xff0c;在遍历数组、集合方面&#xff0c;for…

EditPlus 注册码在线生成

虽然editplus现在不常用&#xff0c;但是它轻便&#xff0c;我还是很喜欢的&#xff0c;推荐一个注册码生成器&#xff0c;真是好好用 http://www.jb51.net/tools/editplus/ 点击链接输入自己想要的用户名&#xff0c;就能自动生成了&#xff0c;相当方便。转载于:https://www.…

如何启用 Ubuntu 中的 root 帐号

执行下面的操作&#xff1a; sudo passwd root 此命令将会重新设置 root 的密码&#xff0c;按照提示输入新的密码&#xff0c;并加以确认。 之后&#xff0c;重启系统时&#xff0c;就可以用 root 登录了。 如果你想要禁用 root 帐号&#xff0c;则执行下列命令&#xff1a; …

java代码块的定义_Java几种代码块的定义与常见问题

Java几种代码块的定义与常见问题代码块&#xff0c;通俗的说就是用一对“{}”括起来的一段代码&#xff0c;代码块可以根据位置分为以下几类&#xff1a;局部代码块&#xff1a;局部代码块就是指直接在方法或是语句中定义的代码块&#xff0c;请看如下范例&#xff1a;package …

gradle各版本下载地址

gradle各版本下载地址 原创 2016年08月16日 11:17:25标签&#xff1a;gradle更新 /android studio59713gradle各版本下载地址&#xff1a;http://services.gradle.org/distributions 以前都是手动下载gradle的文件&#xff0c;然后修改的&#xff0c;今天想从一些博客网站上下载…

SUSE中LVM的使用心得

一、服务器分区规划(按100个商务群规划&#xff0c;可扩展) myvg卷组容量&#xff0d;&#xff0d;700G(硬盘空间的80%左右) /boot 100M 用于系统启用需要的空间 / 20G 用于放置一些系统用户文件 /usr 150G    用于tomcat&#xff1a;发布程序…

thinkphp 5数据库操作

1、原生sql $optionsDb::table(__MALL_POST__) ->alias(m) ->join(__MALL_CATEGORY_VALUE__ v,m.id v.itemid) ->join(__MALL_CATEGORY_OPTION__ o,v.oid o.oid) ->where(m.id,$articleId) ->select(); 参见 &#xff1a;https://www.kancloud.cn/manual/thin…

使用CRT调试内存分配堆来找出未释放的内存空间

忘记释放已经分配的内存是一种常见的编程错误&#xff0c;当然我指的是在C编程当中&#xff0c;例如下面的代码里面就存在一个忘记释放内存的编程错误。我个人觉得忘记释放内存的编程错误是不可避免的&#xff0c;毕竟程序员都是人&#xff0c;困了&#xff0c;心情不好了&…

java bean工厂_从零构建轻量级Java Web框架

Bean工厂回顾下前面的知识&#xff0c;通过加载配置文件获取应用基础包名&#xff0c;加载基础包名下所有的类&#xff0c;获取Controller,Service类。到目前为止&#xff0c;我们只是加载了类&#xff0c;但是无法通过获取的类来实例化对象。因此需要一个反射工具&#xff0c;…

生活

爱上旁白&#xff0c;爱上娓娓道来&#xff0c;爱上有故事的声音。无需任何背景音乐&#xff0c;只想细细体验独有的味道转载于:https://www.cnblogs.com/Fsiswo/p/8167756.html

int指令01 - 零基础入门学习汇编语言64

第十三章&#xff1a;int指令01 让编程改变世界 Change the world by program 引言 在第12章中&#xff0c;我们讲解了中断过程和两种内中断的处理。 这一章中&#xff0c;我们讲解另一种重要的内中断&#xff0c;由int指令引发的中断。 万众瞩目&#xff0c;是什么呢&am…

JAVA中常用的逻辑运算符_Java中的常见运算符以及使用

Java中的运算符有算术运算符、关系运算符、逻辑运算符、赋值运算符、字符串连接运算符、三目运算符等。下面介绍一下这几种。1、算术运算符包括&#xff1a;加()、减(-)、乘(*)、除(/)、取余(%)、自加()、自减(--)。<1>使用乘法时&#xff0c;需注意乘积结果是否会出现溢…