一、條形碼
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