.NET 绘制 EAN13 (商品条码)

.NET条码识别和解码控件Barcode Reader SDK Barcode Reader SDK for .NET是一款功能强大的条码识别控件,为开发人员添加条码识别和解码功能到.NET应用程序中,该控件可从图像以及扫描文档等识别、读取和解码几乎所有当前流行的1维条码,兼容Visual Studio 2005、2008、2010,同时支持WinForm和WebForm。 具体功能: 识别条码时为每个检测到的条码返回字符串和二进制值可辨别检测到条 阅读详情

EAN商品条码的类

这个使用的比较多

其实 前面的编码是根据前面的6来判断的。是类型A还是类型B

效果

使用方法

  1. //获取验证位
  2.              char  _ISBN=MyImage.BandCode.EAN13.EAN13ISBN( "690102803695" );
  3.             MessageBox.Show(_ISBN.ToString());
  4.      MyImage.BandCode.EAN13 _EAN13Code =  new  MyImage.BandCode.EAN13();
  5.             _EAN13Code.Magnify = 1;
  6.             _EAN13Code.Heigth = 100;
  7.             _EAN13Code.FontSize = 16;
  8.             pictureBox1.Image=_EAN13Code.GetCodeImage( "6901028036955" );
  9.             pictureBox1.Image.Save(@ "C:/1.bmp" );

 

具体绘制类

 

  1. using  System;
  2. using  System.Collections;
  3. using  System.ComponentModel;
  4. using  System.Drawing;
  5. using  System.Data;
  6. namespace  MyImage.BandCode
  7. {
  8.      public   class  EAN13
  9.     {
  10.          private  DataTable m_EAN13 =  new  DataTable();
  11.          public  EAN13()
  12.         {
  13.             m_EAN13.Columns.Add( "ID" );
  14.             m_EAN13.Columns.Add( "Type" );
  15.             m_EAN13.Columns.Add( "A" );
  16.             m_EAN13.Columns.Add( "B" );
  17.             m_EAN13.Columns.Add( "C" );
  18.             m_EAN13.Rows.Add( "0" ,  "AAAAAA" ,  "0001101" ,  "0100111" ,  "1110010" );
  19.             m_EAN13.Rows.Add( "1" ,  "AABABB" ,  "0011001" ,  "0110011" ,  "1100110" );
  20.             m_EAN13.Rows.Add( "2" ,  "AABBAB" ,  "0010011" ,  "0011011" ,  "1101100" );
  21.             m_EAN13.Rows.Add( "3" ,  "AABBBA" ,  "0111101" ,  "0100001" ,  "1000010" );
  22.             m_EAN13.Rows.Add( "4" ,  "ABAABB" ,  "0100011" ,  "0011101" ,  "1011100" );
  23.             m_EAN13.Rows.Add( "5" ,  "ABBAAB" ,  "0110001" ,  "0111001" ,  "1001110" );
  24.             m_EAN13.Rows.Add( "6" ,  "ABBBAA" ,  "0101111" ,  "0000101" ,  "1010000" );
  25.             m_EAN13.Rows.Add( "7" ,  "ABABAB" ,  "0111011" ,  "0010001" ,  "1000100" );
  26.             m_EAN13.Rows.Add( "8" ,  "ABABBA" ,  "0110111" ,  "0001001" ,  "1001000" );
  27.             m_EAN13.Rows.Add( "9" ,  "ABBABA" ,  "0001011" ,  "0010111" ,  "1110100" );
  28.         }
  29.          private   uint  m_Height = 40;
  30.          /// <summary>
  31.          /// 绘制高
  32.          /// </summary>
  33.          public   uint  Heigth {  get  {  return  m_Height; }  set  { m_Height = value; } }
  34.          private   byte  m_FontSize = 0;
  35.          /// <summary>
  36.          /// 字体大小(宋体)
  37.          /// </summary>
  38.          public   byte  FontSize {  get  {  return  m_FontSize; }  set  { m_FontSize = value; } } 
  39.       
  40.          private   byte  m_Magnify = 0;
  41.          /// <summary>     
  42.          /// 放大系数    
  43.          /// </summary>
  44.          public   byte  Magnify {  get  {  return  m_Magnify; }  set  { m_Magnify = value; } }
  45.          public  Bitmap GetCodeImage( string  p_Text)
  46.         {
  47.              if  (p_Text.Length != 13)  throw   new  Exception( "数字不是13位!" );
  48.              string  _CodeText = p_Text.Remove(0, 1);
  49.              string  _CodeIndex =  "101" ;
  50.              char [] _LeftType = GetValue(p_Text.Substring(0, 1),  "Type" ).ToCharArray();
  51.              for  ( int  i = 0; i != 6; i++)
  52.             {
  53.                 _CodeIndex += GetValue(_CodeText.Substring(0, 1), _LeftType[i].ToString());
  54.                 _CodeText = _CodeText.Remove(0, 1);
  55.             }
  56.             
  57.             _CodeIndex +=  "01010" ;
  58.             
  59.              for  ( int  i = 0; i != 6; i++)
  60.             {
  61.                 _CodeIndex += GetValue(_CodeText.Substring(0, 1),  "C" );
  62.                 _CodeText = _CodeText.Remove(0, 1);
  63.             }          
  64.             _CodeIndex +=  "101" ;
  65.              return  GetImage(_CodeIndex, p_Text);
  66.         }
  67.          /// <summary>
  68.          /// 获取目标对应的数据
  69.          /// </summary>
  70.          /// <param name="p_Code">编码</param>
  71.          /// <param name="p_Value">类型</param>        
  72.          /// <returns>编码</returns>
  73.          private   string  GetValue( string  p_Value,  string  p_Type)
  74.         {
  75.              if  (m_EAN13 ==  null )  return   "" ;
  76.             DataRow[] _Row = m_EAN13.Select( "ID='"  + p_Value +  "'" );
  77.              if  (_Row.Length != 1)  throw   new  Exception( "错误的编码"  + p_Value.ToString());
  78.              return  _Row[0][p_Type].ToString();
  79.         }
  80.          /// <summary>
  81.          /// 绘制编码图形
  82.          /// </summary>
  83.          /// <param name="p_Text">编码</param>
  84.          /// <returns>图形</returns>
  85.          private  Bitmap GetImage( string  p_Text, string  p_ViewText)
  86.         {
  87.              char [] _Value = p_Text.ToCharArray();
  88.              int  _FontWidth = 0;
  89.             Font _MyFont =  null ;
  90.              if  (m_FontSize != 0)
  91.             {
  92.                 #region 获取符合大小的字体
  93.                 _MyFont =  new  Font( "宋体" , m_FontSize);
  94.                 Bitmap _MyFontBmp =  new  Bitmap(m_FontSize, m_FontSize);
  95.                 Graphics _FontGraphics = Graphics.FromImage(_MyFontBmp);
  96.                 
  97.                  for  ( byte  i = m_FontSize; i != 0; i--)
  98.                 {
  99.                     SizeF _DrawSize = _FontGraphics.MeasureString(p_ViewText.Substring(0, 1), _MyFont);
  100.                      if  (_DrawSize.Height > m_FontSize)
  101.                     {
  102.                         _MyFont =  new  Font( "宋体" , i);
  103.                     }
  104.                      else
  105.                     {
  106.                         _FontWidth = ( int )_DrawSize.Width;
  107.                          break ;
  108.                     }
  109.                 }
  110.                 #endregion
  111.             }
  112.              if  (ScanDrawText(_MyFont, p_Text, _FontWidth) ==  false )
  113.             {
  114.                 _FontWidth = 0;
  115.                 m_FontSize = 0;
  116.             }
  117.              //宽 == 需要绘制的数量*放大倍数 + 两个字的宽   
  118.             Bitmap _CodeImage =  new  Bitmap(_Value.Length * (( int )m_Magnify + 1) + (_FontWidth * 2), ( int )m_Height);
  119.             Graphics _Garphics = Graphics.FromImage(_CodeImage);
  120.             _Garphics.FillRectangle(Brushes.White,  new  Rectangle(0, 0, _CodeImage.Width, _CodeImage.Height));                
  121.           
  122.              int  _Height = 0;
  123.              int  _LenEx = _FontWidth;
  124.              for  ( int  i = 0; i != _Value.Length; i++)
  125.             {
  126.                  int  _DrawWidth = m_Magnify + 1;
  127.                  if  (i == 0 || i == 2 || i==46 || i==48 || i==92 || i==94)
  128.                 {
  129.                     _Height = ( int )m_Height;                  
  130.                 }
  131.                  else
  132.                 {
  133.                     _Height = ( int )m_Height - m_FontSize;
  134.                 }
  135.                  if  (_Value[i] ==  '1' )
  136.                 {
  137.                     _Garphics.FillRectangle(Brushes.Black,  new  Rectangle(_LenEx, 0, _DrawWidth, _Height));
  138.                   
  139.                 }
  140.                  else
  141.                 {
  142.                     _Garphics.FillRectangle(Brushes.White,  new  Rectangle(_LenEx, 0, _DrawWidth, _Height));
  143.                 }
  144.                 _LenEx += _DrawWidth;              
  145.             }
  146.              //绘制文字
  147.              if  (_FontWidth != 0 && m_FontSize != 0)
  148.             {
  149.                  int  _StarX = 0;
  150.                  int  _StarY=( int )m_Height - _MyFont.Height;
  151.                 _Garphics.DrawString(p_ViewText.Substring(0, 1), _MyFont, Brushes.Black, 0, _StarY);
  152.                 _StarX = _FontWidth + (3 * (m_Magnify + 1));
  153.                 _Garphics.DrawString(p_ViewText.Substring(1, 6), _MyFont, Brushes.Black, _StarX, _StarY);
  154.                 _StarX = _FontWidth + (50 * (m_Magnify + 1));
  155.                 _Garphics.DrawString(p_ViewText.Substring(7, 6), _MyFont, Brushes.Black, _StarX, _StarY);
  156.             }
  157.             _Garphics.Dispose();
  158.              return  _CodeImage;
  159.         }
  160.          /// <summary>
  161.          /// 判断字体是否大与绘制图形
  162.          /// </summary>
  163.          /// <param name="_MyFont">字体</param>
  164.          /// <param name="p_Text">文字</param>
  165.          /// <param name="p_Width">字体的宽</param>
  166.          /// <returns>true可以绘制 False不可以绘制</returns>
  167.          private   bool  ScanDrawText(Font _MyFont, string  p_Text, int  p_Width)
  168.         {
  169.              if (_MyFont== null ) return   false ;
  170.              int  _Width = (p_Text.Length - 6 - 5) * (( int )m_Magnify + 1);
  171.              if  ((p_Width*12) > _Width)  return   false ;
  172.              return   true ;
  173.         }
  174.          /// <summary>
  175.          /// 获得条码的最后一位(验证位)
  176.          /// </summary>
  177.          /// <param name="ANumbers">条码</param>
  178.          /// <returns></returns>
  179.          public   static   char  EAN13ISBN( string  _Numb)
  180.         {
  181.              int  _Sum = 0; 
  182.              int  _i = 1;    //权值
  183.              foreach  ( char  _Char  in  _Numb)
  184.             {
  185.                  if  ( "0123456789" .IndexOf(_Char) < 0)  continue ;  // 非数字
  186.                 _Sum += (_Char -  '0' ) * _i;
  187.                 _i = _i == 1 ? 3 : 1; 
  188.             }
  189.              return   "01234567890" [10 - _Sum % 10];
  190.         }
  191.      
  192.     }
  193. }

剩下CODE39了 这个过几天再做把。

C# 使用ZXing.Net生成二维码和条码 条码生成是一个经常需要处理的功能,本文介绍一个条码处理类库,ZXing用Java实现的多种格式的一维二维条码图像处理库,而ZXing.Net是其.Net版本的实现。在WinForm下使用该类库需要从NuGet安装两个组件:ZXing.Net。 阅读详情

相关推荐

C# vb .NET读取识别条形码线性条码EAN-13

EAN-13是比较常见的条形码编码规则类型的一种。如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效、准确的条形码,线性条码,QR二维码的读取和生成类库。接口调用简单,文档齐全。 初识SharpBarcode 您可以点击下面的链接了解更多信息: 1、SharpBarcode简介 2、一张图看懂SharpB...

那方山水 431

asp.net(c#)生成EAN13条形码,webform版本

        做一个项目需要用到条形码,在网上搜索一下,基本上都是winform版本。于是我就找了一个老外的代码修改了一下,版权属于原作者。          写一个条形码的类,名称为EAN13BarCode.cs,代码如下:using System;using System.Text;using System.Drawing;using System.Web;namespace Uti

aspgreener的专栏 1895

C#条形码生成避坑指南:从Code39到EAN-13的完整示例

本文详细介绍了C#条形码生成的实战技巧,从Code39到EAN-13的完整实现方案。通过ZXing.Net库的深度配置和优化,解决工业级应用中的常见问题,提升条形码生成质量和扫描识别率。适用于零售、物流等需要高效条形码生成的场景。

hh234的博客 886

EAN13条形码生成器

EAN13条形码生成器

GitHub:https://github.com/Shaoyc 1万+

C# 结合ZXing.Net实现动态二维码与条码生成实战

本文详细介绍了如何在C#项目中利用ZXing.Net库实现动态二维码与条码的生成。内容涵盖从环境配置、核心参数设置到实战应用,包括生成标准EAN-13商品条码、为二维码添加Logo和颜色,并提供了封装工具类与常见问题避坑指南,帮助开发者快速集成可靠的条码生成功能。

weixin_29278805的博客 603

VintaSoft条码读写.NET控件VintaSoftBarcode.NET Library控件详细介绍及下载

VintaSoftBarcode.NET Library 是一个完美的条码读写.NET 库,支持从数码图片读取条码或者生成数码图片条码。 具体功能: 支持多线程支持创建条码图片支持为生成的条码指定大小和分辨率拥有许多选项控制条码创建支持从图片对象、图片文件、和PDF文档读取条码编程环境:.NET 框架。这是一个可完全操纵的.NET 库,保证在.NET 框架中实现快速工作。能够识别图片中

方案专家 1002

C#如何打印条形码EAN13码

google_ad_client = "pub-2048279401139630";google_ad_slot = "8856771542";google_ad_width = 728;google_ad_height = 90;document.write("");条形码相信大家都不陌生,但自己写程序打印条形码就不是很容易了。最近用条码字体打印了39码,觉的太长,不美观。后来,在国外网站(

aspgreener的专栏 1360

LK32T102 单片机 操作GPIO实现流水灯(1)

前言: LK32T10232(32位)单片机是一款专为电机控制器和数字电源开发的高性能 MCU。采Cortex-M0 内核,最高工作频率可达 72Mhz,ADC 采样速率 达 1Msps。同时具备协处理器单元可满足各种乘法、除法、移位以及各种 复杂函数运算。 LK32T102(32位)支持单电源供电,且内嵌高精度高速及低速振荡器,以及具备 多种低功耗工作模式。同时,集成了多路增强型 PWM,多通道模拟比较 器和高速运算放大器,可满足多种电机及功率控制应用,并简化系统成本。...

qq_58676187的博客 3189

zxing .net 多种条码格式的生成

下载地址:http://zxingnet.codeplex.com/ zxing.net是.net平台下编解条形码和二维码的工具,使用非常方便。 本文主要说明一下多种类型条码的生成。 适用的场景,标签可视化设计时,自定义条码类型,预览。 遍历zxing支持的全部条码类型 if (rb == rb1wm) { ...

weixin_34337381的博客 610

Cgroup对进程所占用的CPU与内存资源同时进行限制的测试

测试环境:Ubuntu。处理器数量:1CPU。内存大小:2048MB。 以下是测试程序mem_cpu_test.c的代码。 将mem_cpu_test.c编译为可以运行的程序mem_cpu_test。 运行程序,并用top命令查看mem_cpu_test所占用的系统资源情况,可以看到,mem_cpu_test使用了50%左右的内存资源,也就是1000MB左右,并占用了接近全部的CPU资源。 关闭以上的程序后,在Cgroup子系统memory和cpu下分别创建进程组test1和test2。 并设置tes

qq_44998067的博客 1154

STM32+W5500实战:5分钟搞定FreeModbus TCP移植(附完整代码)

本文详细介绍了如何在STM32微控制器上,结合W5500以太网芯片,快速完成FreeModbus TCP协议栈的移植,构建稳定可靠的工业级Modbus TCP服务器。内容涵盖硬件连接、软件架构、驱动适配、核心移植代码实现及调试优化技巧,旨在提供可直接应用于实际项目的完整解决方案。

life6的博客 879

VB.NET 绘制 EAN13 (商品条码)

   今天在Zgke(http://blog.csdn.net/zgke/archive/2008/12/11/3496721.aspx)看到了C#版的 绘制 EAN13 (商品条码)的代码,然后自己仿照着写了个VB.NET版本的.下面是界面和代码:      在textbox里输入13为条形码,例如6901028036955,然后点击生成按钮,即可绘制出商品条码. Pri

forrest23的专栏 7628

从MATLAB到版图:手把手复现一篇16位1MSPS SAR ADC的完整设计流程(含Cadence与Verilog代码)

本文详细介绍了16位1MSPS SAR ADC的完整设计流程,从MATLAB行为级建模到Cadence电路实现,再到Verilog数字逻辑编码和版图生成。重点讲解了高精度逐次逼近型模数转换器的关键技术,包括电容阵列建模、校准算法实现、FFT性能验证以及混合信号仿真等,为工程师提供了实用的工业级设计指南。

weixin_28703507的博客 302

[转].NET 绘制 EAN13 (商品条码)

本文转自:http://blog.csdn.net/zgke/article/details/3496721   EAN商品条码的类   这个使用的比较多 其实 前面的编码是根据前面的6来判断的。是类型A还是类型B 效果   使用方法           //获取验证位             char _ISBN=MyImage.BandCode.EAN13...

weixin_34122548的博客 137

Python爬虫实战:使用最新技术抓取百度贴吧帖子内容

本文详细介绍了使用Python最新技术抓取百度贴吧帖子的完整流程。通过库,我们实现了高效的异步爬虫,具备JavaScript渲染、智能反爬应对、数据持久化等高级功能。这个爬虫框架具有良好的扩展性,可以根据具体需求进行功能增强。

2201_76125261的博客 779

5. SAP UI5 视图控制器(Controller)初探

本教程的前一个步骤也就是第四个步骤,我们了解了 SAP UI5 XML 视图的使用方法。在该步骤里,我们在 XML 视图里声明了一个 Text 控件实例,该控件位于 sap.m 这个命名空间内。 本步骤会继续接触 SAP UI5 MVC 框架中三大基石的另一块:C - Controller,即控制器。 先看看本步骤完成之后,我们得到的 SAP UI5 应用能实现一个什么样的效果。 访问如下 url: http://localhost:8080/webapp/index.html 能看到一个 Say Hell

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4598

MFC C++ 绘制 EAN13 (商品条码)

绘制方法参考的 http://blog.csdn.net/zgke/archive/2008/12/11/3496721.aspx C#.NET下绘制EAN13 有兴趣的同学还可以参考http://blog.csdn.net/forrest23/archive/2009/08/21/4470858.aspx VB.NET绘制EAN13  DEMOCClientDC dc

loongee的专栏 4793

ChangeMamba训练调试

此仓库的代码是在 Linux 系统下运行的。我们尚未测试是否能在其他操作系统下运行。 首先需要安装VMama仓库。以下安装顺序取自VMama仓库。克隆该版本库并导航至项目目录: 建议设置 conda 环境并通过 pip 安装依赖项。使用以下命令设置环境: 创建并激活新的 conda 环境 安装依赖项 检测和分割任务的依赖库(在 VMamba 中为可选项) 二、下载预训练权重 另外,请下载VMamba-Tiny, VMamba-Small, and VMamba-Base在ImageNet上的预训练权重并把它

hanfeng5268的博客 576

转载-EAN13条码控件(VB.NET 2005)

 通过EAN13编码规则可以轻松的生成条码控件,该控件允许输入12位或者13位数字,并绘制成EAN13条码,并提供图象打印功能的接口。 代码如下: Imports System.Text.RegularExpressions Imports System.Text Imports System.Drawing Imports System.Windows.Forms Imports System.

懒兔Jodie 2067

损失函数大汇总(四十三)(Boundary Loss附公式推导与代码)

摘要 Boundary Loss是一种针对图像分割任务的边界优化损失函数,特别适用于小目标、细长结构和类别不平衡场景。它通过引入真实边界的有符号距离场(SDF),将边界距离优化问题转化为区域积分形式。与Dice Loss等区域重叠损失不同,Boundary Loss更关注预测边界与真实边界的精确对齐,而非整体区域重叠。其核心公式为像素级SDF值与预测概率的乘积求和,通过梯度调整使预测概率在真实边界内部升高、外部降低。该损失通常与区域型损失(如CE或Dice)联合使用,形成"区域分割+边界修正&qu

悦学共鸣,温柔以待,汇聚光芒,共同成长 355

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

报表生成器FastReport .Net用户指南:EAN-13条形码使用

本文主要接受 在FastReport .Net中使用EAN-13条形码,欢迎查阅~

励志做最业余的专业博主,控件产品可以私我~ 503

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

(zxing.net)一维码EAN 8的简介、实现与解码

一、简介 一维码EAN 8:属于国际标准条码,由8个数字组成,属EAN的简易编码形式(EAN缩短码)。当包装面积小于120平方公分以下无法使用标准码时,可以申请使用缩短码。 依结构的不同,EAN条码可区分为: EAN 13码: 由13个数字组成,为EAN的标准编码型式(EAN标准码)。 EAN 8码: 由8个数字组成,属EAN的简易编码型式(EAN缩短码)。 EAN码的全名为欧洲...

weixin_30505751的博客 724

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【C#】EAN-13条形码生成与识别

一EAN-13条形码编码规则 条码构成 条码编码原则 1检验码计算 2左侧字符编码原则 3右侧字符编码原则 二生成条形码 十进制转二进制 1 获取编码方式 2对编码表进行处理转化为三维数组的形式 绘制条形码 1 根据上一步得到的二进制数组0代表黑色1代表白色开始绘制图像 2 对输入的条码编号进行简单验证 三识别条形码 识别方法 zxingnet的使用 四源代码 五截图一、EAN-13条形码编码规则1

哈哈哈哈哈哈哈 1万+
上一篇: .NET绘制条码Code128A,Code128B,Code128C,EAN128
下一篇: 条形码知识
heyangbin
博客等级 码龄19年 57粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值