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);

}
--显示结果:

--显示结果:

补充说明:

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

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

条码生成代码(Code39码)相关推荐

  1. 【VBA研究】Excel条码控件生成的Code-39码不能识别问题

    作者:iamlaosong 在做一个回执打印工具时,业务部门要求加上条码,以便将来录入查找.生成条码用的是Excel自带的控件,以前也用过,那次生成的是128码,这次希望和邮件条码一致,采用code- ...

  2. 条码生成软件如何批量生成Code39码

    Code39码多用于物流跟踪.生产线流程等方面,也是最常用的条形码类型之一.Code39码支持26个英文大写字母(A-Z),十个数字(0-9),连接号(-),空格,英文的句号(.),加号(+),斜杠( ...

  3. ZPL 打印条码、二维码及小票(中文/汉字),生成条码、二维码图片【Asp.Net】-含示例代码

    生成条码(图1).二维码(图2)图片及打印出二维码标签(图3)效果                 图1                                       图2        ...

  4. 微信小程序条码、二维码生成模块

    代码地址如下: http://www.demodashi.com/demo/13994.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  5. H5 嵌入条码和二维码生成

    效果动画演示 实现步骤 第一步:创建窗口"H5" 第二步:找到对应的H5处理页面(自己可以自行开发,或开发打印功能都可以的) Html5页面对应的页面代码如下: <!DOCT ...

  6. Android超方便 集成 Zxing实现扫一扫,闪光灯,生成二维码图片,解析二维码(条码)等功能

    之前我写过一篇博客是关于如何将zxing集成到Android Studio中,以及简单的实现扫一扫功能. 详情请看:Android Studio集成Zxing扫一扫 但是,上面那篇博客只有有一个扫一扫 ...

  7. Code39码如何批量生成

    Code 39是 Intermec公司在1975年研制成功的一维条码.包括数字.字母和一些符号在内,条形码共包括43个字符.由于可以处理字母,CODE 39在工业领域必不可少,多用于汽车.电子等工厂自 ...

  8. APIcoud 手机二维码or条码 生成与扫描模块

    APIcoud 手机二维码or条码 生成与扫描模块 刚接触APIcoud 的时候觉得很多模块真的好难,初次接触二维码的时候觉得,生成二维码真的很费劲呢,其实不然,是真的很难,但是APIcoud 已经封 ...

  9. ZXing 生成二维码 QRCode 和条码 CODE128 和 ZXing 解析或读取 QR_Code 和 条码 CODE_128

    二维码是国际标准,由日本某公司发明,并保留版权,免费让全世界使用,目前在中国金融支付领域大放异彩. 条码的联合发明人诺曼·约瑟夫·伍德兰德(Norman Joseph Woodland)于上世纪70年 ...

最新文章

  1. opencl track资料整理
  2. 如何成为一位「不那么差」的程序员
  3. html5判断text文本是数字,JavaScript常用判断写法大全
  4. html元素分类以及嵌套规则
  5. JIRA中vm后缀文件语法说明
  6. 使用 plot 绘制折线图,关于如何让坐标轴纵向显示和显示图例的一点技巧
  7. linux mode4的双网卡绑定,Linux实现双网卡绑定自动化脚本 | 聂扬帆博客
  8. 旷视科技IPO过会,AI技术“立业”难言轻松
  9. Android Studio升级中的“未找到默认活动”
  10. 螺栓预紧力_斯姆勒知识讲解:螺栓预紧力的计算
  11. cmake错误:Could not find a package configuration file provided by 的一种解决方法
  12. oracle实际是什么意思,Oracle遇到的应用实际教程
  13. c语言中宏名的作用时段,C语言中的宏定义!
  14. OPENWRT:编译E8820V2总结
  15. Google一些关键词的运用
  16. C#判断是否是节假日
  17. Win10 - 打开资源管理器显示的不是磁盘
  18. OpenCV开发笔记(四十六):红胖子8分钟带你深入了解仿射变化(图文并茂+浅显易懂+程序源码)
  19. 微信运营必备!专业的微信粉丝和社群管理工具!功能强大好用,而且免费!
  20. 群体智能集群机器人研究综述

热门文章

  1. activiti 视图
  2. edittext 属性
  3. python 之configparser模块
  4. MYSQL和JAVA(课堂笔记)
  5. 慎用stl中的erase的返回值
  6. Python线程指南 ---转自 http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
  7. 在.Net如何制作自定义的快捷方式(转)
  8. iOS 富文本风格NSMutableParagraphStyle、定制UITextView插入图片和定制复制
  9. DHCP服务器 出现的故障
  10. Lvs Tun隧道模式配置