一、条形码
1
2
3
4
5
6
<code>Code128 code = </code><code>new</code> <code>Code128();</code>
<code>code.ValueFont = </code><code>new</code> <code>Font(</code><code>"Arial"</code><code>, 7);</code><code>//声明条码下方的字体</code>
<code>Bitmap bitMap = code.GetCodeImage(tf6_PERSONIDNUM.Text.Trim(), Code128.Encode.Code128A);</code><code>//通过对文本框的文件进行Code128编码获得位图</code>
<code>string</code> <code>fileName = Server.MapPath(</code><code>"~"</code><code>) + </code><code>"Images\\QRImages\\"</code> <code>+ tf6_PERSONIDNUM.Text.Trim() + </code><code>".jpg"</code><code>;</code><code>//获取图片路径</code>
<code>bitMap.Save(fileName, ImageFormat.Jpeg);</code><code>//保存图片</code>
<code>this</code><code>.QRCodeImage.ImageUrl = </code><code>"~/Images/QRImages/"</code> <code>+ tf6_PERSONIDNUM.Text.Trim() + </code><code>".jpg"</code><code>;</code><code>//图片控件显示</code>
Code39的类使用方法类似。由于Code39编码使用较为广泛,网上也有很多封装好的dll可直接使用,比如BarCode,直接引用dll即可。
引用BarCode方式的代码:
7
8
9
10
11
<code>BarcodeControl barcode = </code><code>new</code> <code>BarcodeControl();</code>
<code>barcode.BarcodeType = BarcodeType.CODE128C;</code>
<code>barcode.CopyRight = </code><code>""</code><code>; </code><code>// 空字符串就会不显示标题;</code>
<code>barcode.Data = tf6_PERSONIDNUM.Text.Trim();</code>
<code> </code>
<code>MemoryStream stream = </code><code>new</code> <code>MemoryStream();</code>
<code>barcode.MakeImage(ImageFormat.Png, 1, 1, </code><code>true</code><code>, </code><code>false</code><code>, </code><code>null</code><code>, stream);</code>
<code>Bitmap bitMap = </code><code>new</code> <code>Bitmap(stream);</code>
<code>string</code> <code>fileName = Server.MapPath(</code><code>"~"</code><code>) + </code><code>"Images\\QRImages\\"</code> <code>+ tf6_PERSONIDNUM.Text.Trim() + </code><code>".jpg"</code><code>;</code>
<code>bitMap.Save(fileName, ImageFormat.Jpeg);</code>
<code>this</code><code>.QRCodeImage.ImageUrl = </code><code>"~/Images/QRImages/"</code> <code>+ tf6_PERSONIDNUM.Text.Trim() + </code><code>".jpg"</code><code>;</code>
最后上个效果图:

二、二维码
二维码现在越来越流行,可以使用手机上或其它移动终端上的二维码扫描器软件对着二维码一扫,就可以得到相关信息。在互联网站上,可以找到很多二维码的工具,甚至还有不少在线生成、解析二维码的网站。在业务系统当中,比如档案管理系统中,以前一般都是通过条形码(一维码)来存储档案职工的基本信息,但是存储容量有限。而现在完全可以使用二维码存储更多容量的信息。
我们这里使用了ThoughtWorks.QRCode.dll这个类库,在asp.net项目中引用这个dll文件,就可以使用相关API进行开发。
比如,我们封装了一个最精简的类:
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<code>/// <summary></code>
<code>/// 二维码助手类</code>
<code>/// </summary></code>
<code>public</code> <code>class</code> <code>QRCodeOp</code>
<code>{</code>
<code> </code><code>/// <summary></code>
<code> </code><code>/// 生成二维码</code>
<code> </code><code>/// </summary></code>
<code> </code><code>/// <param name="qrCodeContent">要编码的内容</param></code>
<code> </code><code>/// <returns>返回二维码位图</returns></code>
<code> </code><code>public</code> <code>static</code> <code>Bitmap QRCodeEncoderUtil(</code><code>string</code> <code>qrCodeContent)</code>
<code> </code><code>{</code>
<code> </code><code>QRCodeEncoder qrCodeEncoder = </code><code>new</code> <code>QRCodeEncoder();</code>
<code> </code><code>qrCodeEncoder.QRCodeVersion = 0;</code>
<code> </code><code>Bitmap img = qrCodeEncoder.Encode(qrCodeContent, Encoding.UTF8);</code><code>//指定utf-8编码, 支持中文</code>
<code> </code><code>return</code> <code>img;</code>
<code> </code><code>}</code>
<code> </code>
<code> </code><code>/// 解析二维码</code>
<code> </code><code>/// <param name="bitmap">要解析的二维码位图</param></code>
<code> </code><code>/// <returns>解析后的字符串</returns></code>
<code> </code><code>public</code> <code>static</code> <code>string</code> <code>QRCodeDecoderUtil(Bitmap bitmap)</code>
<code> </code><code>QRCodeDecoder decoder = </code><code>new</code> <code>QRCodeDecoder();</code>
<code> </code><code>string</code> <code>decodedString = decoder.decode(</code><code>new</code> <code>QRCodeBitmapImage(bitmap), Encoding.UTF8);</code><code>//指定utf-8编码, 支持中文</code>
<code> </code><code>return</code> <code>decodedString;</code>
<code>}</code>
使用上面两个方法,就可以生成和解析二维码。
我们在程序中调用的时候,就可以这样。
<code>protected</code> <code>void</code> <code>EncodeClick(</code><code>object</code> <code>sender, DirectEventArgs e)</code>
<code> </code><code>StringBuilder sb = </code><code>new</code> <code>StringBuilder();</code>
<code> </code><code>sb.Append(tf6_PERSONIDNUM.Text.Trim() + </code><code>";"</code><code>);</code><code>//个人身份证号</code>
<code> </code><code>sb.Append(tf_DAID.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code><code>sb.Append(tf_DANAME.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code><code>sb.Append(cb_DABUSKIND.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code><code>sb.Append(cb_DAKIND.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code><code>sb.Append(cb_DALEVELCODE.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code><code>sb.Append(df_DABUILDTIME.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code><code>sb.Append(tf_DAORG.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code><code>sb.Append(cb_DASTATUS.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code><code>sb.Append(tf_DABUILDER.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code><code>sb.Append(tf_DABUILDORG.Text.Trim() + </code><code>";"</code><code>);</code>
<code> </code>
<code> </code><code>Bitmap bitmap = QRCodeOp.QRCodeEncoderUtil((sb.ToString().Trim()));</code><code>//调用二维码编码方法生成位图</code>
<code> </code><code>string</code> <code>fileName = Server.MapPath(</code><code>"~"</code><code>) + </code><code>"Images\\QRImages\\"</code> <code>+ tf6_PERSONIDNUM.Text.Trim() + </code><code>".jpg"</code><code>;</code>
<code> </code><code>bitmap.Save(fileName);</code><code>//保存位图,文件名为个人身份证号</code>
<code> </code><code>this</code><code>.QRCodeImage.ImageUrl = </code><code>"~/Images/QRImages/"</code> <code>+ tf6_PERSONIDNUM.Text.Trim() + </code><code>".jpg"</code><code>;</code><code>//显示图片</code>
<code> </code><code>X.Msg.Alert(</code><code>"二维码信息"</code><code>, QRCodeOp.QRCodeDecoderUtil(bitmap)).Show();</code><code>//调用二维码解码方法弹出编码之前的信息</code>
看下效果:
点击按钮,我们把文本框中的信息(含数字、字母、中文、时间等),生成了二维码图片,并反过来进行了解析。
读者可以在此基础之上进一步封装扩展,与WCF等技术结合,提供一个二维码生成的web service。
本文转自 guwei4037 51CTO博客,原文链接:http://blog.51cto.com/csharper/1344188