C# 二维码、条形码生成

摘要:
","!","01","222122");47_mCode128.Rows.Add("2",""",""","02","222221");48_mCode128.Rows.Add("3","#","#","03","121223");49_mCode128.Rows.Add("4","$","$","04","121322");50_mCode128.Rows.Add("5","%","%","05","131222");51_mCode128.Rows.Add("6","&","&","06","122213");52_mCode128.Rows.Add("7","'","'","07","122312");53_mCode128.Rows.Add("8","(","(","08","132212");54_mCode128.Rows.Add("9",")",")","09","221213");55_mCode128.Rows.Add("10","*","*","10","221312");56_mCode128.Rows.Add("11","+","+","11","231212");57_mCode128.Rows.Add("12",",",",","12","112232");58_mCode128.Rows.Add("13","-","-","13","122132");59_mCode128.Rows.Add("14",".",".","14","122231");60_mCode128.Rows.Add("15","/","/","15","113222");61_mCode128.Rows.Add("16","0","0","16","123122");62_mCode128.Rows.Add("17","1","1","17","123221");63_mCode128.Rows.Add("18","2","2","18","223211");64_mCode128.Rows.Add("19","3","3","19","221132");65_mCode128.Rows.Add("20","4","4","20","221231");66_mCode128.Rows.Add("21","5","5","21","213212");67_mCode128.Rows.Add("22","6","6","22","223112");68_mCode128.Rows.Add("23","7","7","23","312131");69_mCode128.Rows.Add("24","8","8","24","311222");70_mCode128.Rows.Add("25","9","9","25","321122");71_mCode128.Rows.Add("26",":",":","26","321221");72_mCode128.Rows.Add("27",";",";","27","312212");73_mCode128.Rows.Add("28","˂","","˃","30","212123");76_mCode128.Rows.Add("31","?","?

1.工具类:BarCodeHelper(条码生成类),二维码生成类(QRCodeHelper)

2.BarCodeHelper(条码生成类)代码:

1   public classBarCodeHelper
2 {
3         public classCode128
4 {
5             private readonly DataTable _mCode128 = newDataTable();
6             private uint _mHeight = 40;
7 
8             /// <summary>
9             ///高度
10             /// </summary>
11             public uint Height { get { return _mHeight; } set { _mHeight =value; } }
12             privateFont _mValueFont;
13 
14             /// <summary>
15             ///是否显示可见号码  如果为NULL不显示号码
16             /// </summary>
17             public Font ValueFont { get { return _mValueFont; } set { _mValueFont =value; } }
18             private byte_mMagnify;
19 
20             /// <summary>
21             ///放大倍数
22             /// </summary>
23             public byte Magnify { get { return _mMagnify; } set { _mMagnify =value; } }
24 
25             /// <summary>
26             ///条码类别
27             /// </summary>
28             public enumEncode
29 {
30 Code128A,
31 Code128B,
32 Code128C,
33 Ean128
34 }
35 
36             publicCode128()
37 {
38                 _mCode128.Columns.Add("ID");
39                 _mCode128.Columns.Add("Code128A");
40                 _mCode128.Columns.Add("Code128B");
41                 _mCode128.Columns.Add("Code128C");
42                 _mCode128.Columns.Add("BandCode");
43                 _mCode128.CaseSensitive = true;
44                 #region 数据表
45                 _mCode128.Rows.Add("0", " ", " ", "00", "212222");
46                 _mCode128.Rows.Add("1", "!", "!", "01", "222122");
47                 _mCode128.Rows.Add("2", """, """, "02", "222221");
48                 _mCode128.Rows.Add("3", "#", "#", "03", "121223");
49                 _mCode128.Rows.Add("4", "$", "$", "04", "121322");
50                 _mCode128.Rows.Add("5", "%", "%", "05", "131222");
51                 _mCode128.Rows.Add("6", "&", "&", "06", "122213");
52                 _mCode128.Rows.Add("7", "'", "'", "07", "122312");
53                 _mCode128.Rows.Add("8", "(", "(", "08", "132212");
54                 _mCode128.Rows.Add("9", ")", ")", "09", "221213");
55                 _mCode128.Rows.Add("10", "*", "*", "10", "221312");
56                 _mCode128.Rows.Add("11", "+", "+", "11", "231212");
57                 _mCode128.Rows.Add("12", ",", ",", "12", "112232");
58                 _mCode128.Rows.Add("13", "-", "-", "13", "122132");
59                 _mCode128.Rows.Add("14", ".", ".", "14", "122231");
60                 _mCode128.Rows.Add("15", "/", "/", "15", "113222");
61                 _mCode128.Rows.Add("16", "0", "0", "16", "123122");
62                 _mCode128.Rows.Add("17", "1", "1", "17", "123221");
63                 _mCode128.Rows.Add("18", "2", "2", "18", "223211");
64                 _mCode128.Rows.Add("19", "3", "3", "19", "221132");
65                 _mCode128.Rows.Add("20", "4", "4", "20", "221231");
66                 _mCode128.Rows.Add("21", "5", "5", "21", "213212");
67                 _mCode128.Rows.Add("22", "6", "6", "22", "223112");
68                 _mCode128.Rows.Add("23", "7", "7", "23", "312131");
69                 _mCode128.Rows.Add("24", "8", "8", "24", "311222");
70                 _mCode128.Rows.Add("25", "9", "9", "25", "321122");
71                 _mCode128.Rows.Add("26", ":", ":", "26", "321221");
72                 _mCode128.Rows.Add("27", ";", ";", "27", "312212");
73                 _mCode128.Rows.Add("28", "<", "<", "28", "322112");
74                 _mCode128.Rows.Add("29", "=", "=", "29", "322211");
75                 _mCode128.Rows.Add("30", ">", ">", "30", "212123");
76                 _mCode128.Rows.Add("31", "?", "?", "31", "212321");
77                 _mCode128.Rows.Add("32", "@", "@", "32", "232121");
78                 _mCode128.Rows.Add("33", "A", "A", "33", "111323");
79                 _mCode128.Rows.Add("34", "B", "B", "34", "131123");
80                 _mCode128.Rows.Add("35", "C", "C", "35", "131321");
81                 _mCode128.Rows.Add("36", "D", "D", "36", "112313");
82                 _mCode128.Rows.Add("37", "E", "E", "37", "132113");
83                 _mCode128.Rows.Add("38", "F", "F", "38", "132311");
84                 _mCode128.Rows.Add("39", "G", "G", "39", "211313");
85                 _mCode128.Rows.Add("40", "H", "H", "40", "231113");
86                 _mCode128.Rows.Add("41", "I", "I", "41", "231311");
87                 _mCode128.Rows.Add("42", "J", "J", "42", "112133");
88                 _mCode128.Rows.Add("43", "K", "K", "43", "112331");
89                 _mCode128.Rows.Add("44", "L", "L", "44", "132131");
90                 _mCode128.Rows.Add("45", "M", "M", "45", "113123");
91                 _mCode128.Rows.Add("46", "N", "N", "46", "113321");
92                 _mCode128.Rows.Add("47", "O", "O", "47", "133121");
93                 _mCode128.Rows.Add("48", "P", "P", "48", "313121");
94                 _mCode128.Rows.Add("49", "Q", "Q", "49", "211331");
95                 _mCode128.Rows.Add("50", "R", "R", "50", "231131");
96                 _mCode128.Rows.Add("51", "S", "S", "51", "213113");
97                 _mCode128.Rows.Add("52", "T", "T", "52", "213311");
98                 _mCode128.Rows.Add("53", "U", "U", "53", "213131");
99                 _mCode128.Rows.Add("54", "V", "V", "54", "311123");
100                 _mCode128.Rows.Add("55", "W", "W", "55", "311321");
101                 _mCode128.Rows.Add("56", "X", "X", "56", "331121");
102                 _mCode128.Rows.Add("57", "Y", "Y", "57", "312113");
103                 _mCode128.Rows.Add("58", "Z", "Z", "58", "312311");
104                 _mCode128.Rows.Add("59", "[", "[", "59", "332111");
105                 _mCode128.Rows.Add("60", "\", "\", "60", "314111");
106                 _mCode128.Rows.Add("61", "]", "]", "61", "221411");
107                 _mCode128.Rows.Add("62", "^", "^", "62", "431111");
108                 _mCode128.Rows.Add("63", "_", "_", "63", "111224");
109                 _mCode128.Rows.Add("64", "NUL", "`", "64", "111422");
110                 _mCode128.Rows.Add("65", "SOH", "a", "65", "121124");
111                 _mCode128.Rows.Add("66", "STX", "b", "66", "121421");
112                 _mCode128.Rows.Add("67", "ETX", "c", "67", "141122");
113                 _mCode128.Rows.Add("68", "EOT", "d", "68", "141221");
114                 _mCode128.Rows.Add("69", "ENQ", "e", "69", "112214");
115                 _mCode128.Rows.Add("70", "ACK", "f", "70", "112412");
116                 _mCode128.Rows.Add("71", "BEL", "g", "71", "122114");
117                 _mCode128.Rows.Add("72", "BS", "h", "72", "122411");
118                 _mCode128.Rows.Add("73", "HT", "i", "73", "142112");
119                 _mCode128.Rows.Add("74", "LF", "j", "74", "142211");
120                 _mCode128.Rows.Add("75", "VT", "k", "75", "241211");
121                 _mCode128.Rows.Add("76", "FF", "I", "76", "221114");
122                 _mCode128.Rows.Add("77", "CR", "m", "77", "413111");
123                 _mCode128.Rows.Add("78", "SO", "n", "78", "241112");
124                 _mCode128.Rows.Add("79", "SI", "o", "79", "134111");
125                 _mCode128.Rows.Add("80", "DLE", "p", "80", "111242");
126                 _mCode128.Rows.Add("81", "DC1", "q", "81", "121142");
127                 _mCode128.Rows.Add("82", "DC2", "r", "82", "121241");
128                 _mCode128.Rows.Add("83", "DC3", "s", "83", "114212");
129                 _mCode128.Rows.Add("84", "DC4", "t", "84", "124112");
130                 _mCode128.Rows.Add("85", "NAK", "u", "85", "124211");
131                 _mCode128.Rows.Add("86", "SYN", "v", "86", "411212");
132                 _mCode128.Rows.Add("87", "ETB", "w", "87", "421112");
133                 _mCode128.Rows.Add("88", "CAN", "x", "88", "421211");
134                 _mCode128.Rows.Add("89", "EM", "y", "89", "212141");
135                 _mCode128.Rows.Add("90", "SUB", "z", "90", "214121");
136                 _mCode128.Rows.Add("91", "ESC", "{", "91", "412121");
137                 _mCode128.Rows.Add("92", "FS", "|", "92", "111143");
138                 _mCode128.Rows.Add("93", "GS", "}", "93", "111341");
139                 _mCode128.Rows.Add("94", "RS", "~", "94", "131141");
140                 _mCode128.Rows.Add("95", "US", "DEL", "95", "114113");
141                 _mCode128.Rows.Add("96", "FNC3", "FNC3", "96", "114311");
142                 _mCode128.Rows.Add("97", "FNC2", "FNC2", "97", "411113");
143                 _mCode128.Rows.Add("98", "SHIFT", "SHIFT", "98", "411311");
144                 _mCode128.Rows.Add("99", "CODEC", "CODEC", "99", "113141");
145                 _mCode128.Rows.Add("100", "CODEB", "FNC4", "CODEB", "114131");
146                 _mCode128.Rows.Add("101", "FNC4", "CODEA", "CODEA", "311141");
147                 _mCode128.Rows.Add("102", "FNC1", "FNC1", "FNC1", "411131");
148                 _mCode128.Rows.Add("103", "StartA", "StartA", "StartA", "211412");
149                 _mCode128.Rows.Add("104", "StartB", "StartB", "StartB", "211214");
150                 _mCode128.Rows.Add("105", "StartC", "StartC", "StartC", "211232");
151                 _mCode128.Rows.Add("106", "Stop", "Stop", "Stop", "2331112");
152                 #endregion
153 }
154 
155             /// <summary>
156             ///获取128图形
157             /// </summary>
158             /// <param name="pText">文字</param>
159             /// <param name="pCode">编码</param>      
160             /// <returns>图形</returns>
161             public Bitmap GetCodeImage(stringpText, Encode pCode)
162 {
163                 string viewText =pText;
164                 string text = "";
165                 IList<int> textNumb = new List<int>();
166                 int examine;    //首位
167                 switch(pCode)
168 {
169                     caseEncode.Code128C:
170                         examine = 105;
171                         if ((pText.Length & 1) != 0) throw new Exception("128C长度必须是偶数");
172                         while (pText.Length != 0)
173 {
174                             var temp = 0;
175                             try
176 {
177                                 var codeNumb128 = Int32.Parse(pText.Substring(0, 2));
178 }
179                             catch
180 {
181                                 throw new Exception("128C必须是数字!");
182 }
183                             text += GetValue(pCode, pText.Substring(0, 2), reftemp);
184 textNumb.Add(temp);
185                             pText = pText.Remove(0, 2);
186 }
187                         break;
188                     caseEncode.Ean128:
189                         examine = 105;
190                         if ((pText.Length & 1) != 0) throw new Exception("EAN128长度必须是偶数");
191                         textNumb.Add(102);
192                         text += "411131";
193                         while (pText.Length != 0)
194 {
195                             var temp = 0;
196                             try
197 {
198                                 var codeNumb128 = Int32.Parse(pText.Substring(0, 2));
199 }
200                             catch
201 {
202                                 throw new Exception("128C必须是数字!");
203 }
204                             text += GetValue(Encode.Code128C, pText.Substring(0, 2), reftemp);
205 textNumb.Add(temp);
206                             pText = pText.Remove(0, 2);
207 }
208                         break;
209                     default:
210                         examine = pCode == Encode.Code128A ? 103 : 104;
211 
212                         while (pText.Length != 0)
213 {
214                             var temp = 0;
215                             var valueCode = GetValue(pCode, pText.Substring(0, 1), reftemp);
216                             if (valueCode.Length == 0) throw new Exception("无效的字符集!" + pText.Substring(0, 1));
217                             text +=valueCode;
218 textNumb.Add(temp);
219                             pText = pText.Remove(0, 1);
220 }
221                         break;
222 }
223                 if (textNumb.Count == 0) throw new Exception("错误的编码,无数据");
224                 text = text.Insert(0, GetValue(examine)); //获取开始位
225 
226                 for (int i = 0; i != textNumb.Count; i++)
227 {
228                     examine += textNumb[i] * (i + 1);
229 }
230                 examine = examine % 103;           //获得严效位
231                 text += GetValue(examine);  //获取严效位
232                 text += "2331112"; //结束位
233                 var codeImage =GetImage(text);
234 GetViewText(codeImage, viewText);
235                 returncodeImage;
236 }
237 
238             /// <summary>
239             ///获取目标对应的数据
240             /// </summary>
241             /// <param name="pCode">编码</param>
242             /// <param name="pValue">数值 A b  30</param>
243             /// <param name="pSetId">返回编号</param>
244             /// <returns>编码</returns>
245             private string GetValue(Encode pCode, string pValue, ref intpSetId)
246 {
247                 if (_mCode128 == null) return "";
248                 var row = _mCode128.Select(pCode + "='" + pValue + "'");
249                 if (row.Length != 1) throw new Exception("错误的编码" +pValue);
250                 pSetId = Int32.Parse(row[0]["ID"].ToString());
251                 return row[0]["BandCode"].ToString();
252 }
253 
254             /// <summary>
255             ///根据编号获得条纹
256             /// </summary>
257             /// <param name="pCodeId"></param>
258             /// <returns></returns>
259             private string GetValue(intpCodeId)
260 {
261                 var row = _mCode128.Select("ID='" + pCodeId + "'");
262                 if (row.Length != 1) throw new Exception("验效位的编码错误" +pCodeId);
263                 return row[0]["BandCode"].ToString();
264 }
265 
266             /// <summary>
267             ///获得条码图形
268             /// </summary>
269             /// <param name="pText">文字</param>
270             /// <returns>图形</returns>
271             private Bitmap GetImage(stringpText)
272 {
273                 var value =pText.ToCharArray();
274                 var width = 0;
275                 for (int i = 0; i != value.Length; i++)
276 {
277                     width += Int32.Parse(value[i].ToString(CultureInfo.InvariantCulture)) * (_mMagnify + 1);
278 }
279                 var codeImage = new Bitmap(width, (int)_mHeight);
280                 var garphics =Graphics.FromImage(codeImage);
281                 //Pen _Pen;
282                 var lenEx = 0;
283                 for (int i = 0; i != value.Length; i++)
284 {
285                     int valueNumb = Int32.Parse(value[i].ToString(CultureInfo.InvariantCulture)) * (_mMagnify + 1);  //获取宽和放大系数
286                     garphics.FillRectangle((i & 1) != 0 ?Brushes.White : Brushes.Black,
287                         new Rectangle(lenEx, 0, valueNumb, (int)_mHeight));
288                     //_Garphics.(_Pen, new Point(_LenEx, 0), new Point(_LenEx, m_Height));
289                     lenEx +=valueNumb;
290 }
291 garphics.Dispose();
292                 returncodeImage;
293 }
294 
295             /// <summary>
296             ///显示可见条码文字 如果小于40 不显示文字
297             /// </summary>
298             /// <param name="pBitmap">图形</param>
299             /// <param name="pViewText"></param>           
300             private void GetViewText(Bitmap pBitmap, stringpViewText)
301 {
302                 if (_mValueFont == null) return;
303 
304                 Graphics graphics =Graphics.FromImage(pBitmap);
305                 SizeF drawSize =graphics.MeasureString(pViewText, _mValueFont);
306                 if (drawSize.Height > pBitmap.Height - 10 || drawSize.Width >pBitmap.Width)
307 {
308 graphics.Dispose();
309                     return;
310 }
311 
312                 int starY = pBitmap.Height - (int)drawSize.Height;
313                 graphics.FillRectangle(Brushes.White, new Rectangle(0, starY, pBitmap.Width, (int)drawSize.Height));
314                 graphics.DrawString(pViewText, _mValueFont, Brushes.Black, 5, starY);
315 }
316 }
317     }

3.二维码生成类(QRCodeHelper)引用:ThoughtWorks.QRCode.dll

1  public classQRCodeHelper
2 {
3         privateSystem.Drawing.Printing.PrintPageEventArgs e;
4         private int Top = 20;//提供一个基准Top,用户不提供Top时,就取该Top,每次有内容增加都会刷新
5         private int Left = 20;//提供一个基准Left,用户不提供Left时,就取该Left
6         private int Interval = 5;//提供一个基准间隔值
7 
8 
9         #region 根据链接生成二维码
10         /// <summary>
11         ///根据链接获取二维码
12         ///所需参数:URL;距左Left值;距上Top值
13         ///默认值:无
14         /// </summary>
15         /// <param name="url">链接</param
16         /// <param name="left">二维码:x</param>
17         /// <param name="top">二维码:y</param>
18         /// <returns>返回二维码图片的高度</returns>
19         public int DrawQRCodeBmp(string url, int left, inttop)
20 {
21             QRCodeEncoder qrCodeEncoder = newQRCodeEncoder();
22             qrCodeEncoder.QRCodeEncodeMode =QRCodeEncoder.ENCODE_MODE.BYTE;
23             qrCodeEncoder.QRCodeScale = 4;
24             qrCodeEncoder.QRCodeVersion = 0;
25             qrCodeEncoder.QRCodeErrorCorrect =QRCodeEncoder.ERROR_CORRECTION.M;
26             Image bmp =qrCodeEncoder.Encode(url);
27             e.Graphics.DrawImage(bmp, new Point(left, top));//不同的URL图片大小不同,可以根据需要调整left坐标
28 
29             Top += bmp.Height + this.Interval;
30 
31             returnbmp.Height;
32 }
33 
34         /// <summary>
35         ///根据链接获取二维码
36         ///所需参数:URL;距左Left值
37         ///默认值:距上Top值:顺位值
38         /// </summary>
39         /// <param name="url">链接</param
40         /// <param name="left">二维码:x</param>        
41         /// <returns>返回二维码图片的高度</returns>
42         public int DrawQRCodeBmp(string url, intleft)
43 {
44             QRCodeEncoder qrCodeEncoder = newQRCodeEncoder();
45             qrCodeEncoder.QRCodeEncodeMode =QRCodeEncoder.ENCODE_MODE.BYTE;
46             qrCodeEncoder.QRCodeScale = 4;
47             qrCodeEncoder.QRCodeVersion = 0;
48             qrCodeEncoder.QRCodeErrorCorrect =QRCodeEncoder.ERROR_CORRECTION.M;
49             Image bmp =qrCodeEncoder.Encode(url);
50             e.Graphics.DrawImage(bmp, new Point(left, this.Top));//不同的URL图片大小不同,可以根据需要调整left坐标
51 
52             Top += bmp.Height + this.Interval;
53 
54             returnbmp.Height;
55 }
56         /// <summary>
57         ///根据链接获取二维码
58         ///所需参数:URL
59         ///默认值:距左Left值;距上Top值:顺位值
60         /// </summary>
61         /// <param name="url">链接</param>
62         /// <returns></returns>
63         //public int DrawQRCodeBmp(string url)
64         //{
65         //QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
66         //qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
67         //qrCodeEncoder.QRCodeScale = 4;
68         //qrCodeEncoder.QRCodeVersion = 0;
69         //qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
70         //Image bmp = qrCodeEncoder.Encode(url);
71         //e.Graphics.DrawImage(bmp, new Point(Left, Top));//不同的URL图片大小不同,可以根据需要调整left坐标
72 
73         //Top += bmp.Height + this.Interval;
74 
75         //return bmp.Height;
76         //}
77         #endregion
78 
79         public Bitmap DrawQRCodeBmp(stringurl)
80 {
81             QRCodeEncoder qrCodeEncoder = newQRCodeEncoder();
82             qrCodeEncoder.QRCodeEncodeMode =QRCodeEncoder.ENCODE_MODE.BYTE;
83             qrCodeEncoder.QRCodeScale = 4;
84             qrCodeEncoder.QRCodeVersion = 0;
85             qrCodeEncoder.QRCodeErrorCorrect =QRCodeEncoder.ERROR_CORRECTION.M;
86             returnqrCodeEncoder.Encode(url);
87 }
88     }

4.form窗体调用:

1  /// <summary>
2         ///获取条形码保存路径
3         /// </summary>
4         /// <returns></returns>
5         private stringGetBarCodeMap()
6 {
7             var path = string.Empty;
8             var code = DateTime.Now.ToString("yyyymmddhhmmss");
9 
10             path = System.AppDomain.CurrentDomain.BaseDirectory + "BarCode\" + Guid.NewGuid().ToString() + ".gif";
11 
12             Code128 _Code = newCode128();
13             _Code.Height = 61;
14             _Code.ValueFont = new Font("宋体", 10);
15             System.Drawing.Bitmap imgTemp =_Code.GetCodeImage(code, Code128.Encode.Code128A);
16 imgTemp.Save(path, System.Drawing.Imaging.ImageFormat.Gif);
17 
18             returnpath;
19 }
20 
21         /// <summary>
22         ///获取二维码保存路径
23         /// </summary>
24         /// <returns></returns>
25         private stringGetQRCodeMap()
26 {
27             var path = string.Empty;
28             var url = "www.baidu.com";
29 
30             path = System.AppDomain.CurrentDomain.BaseDirectory + "BarCode\" + Guid.NewGuid().ToString() + ".gif";
31 
32             QRCodeHelper _QRCode = newQRCodeHelper();
33             System.Drawing.Bitmap imgTemp =_QRCode.DrawQRCodeBmp(url);
34 imgTemp.Save(path, System.Drawing.Imaging.ImageFormat.Gif);
35 
36             returnpath;
37         }

免责声明:文章转载自《C# 二维码、条形码生成》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ip头、tcp头、udp头详解及定义,结合Wireshark抓包看实际情况通过CSS控制图片样式,实现图片弹出效果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Tomcat常用的过滤器

前言 之前我很肤浅的以为为了实现某种请求过滤功能(比如图片转换、文件上传、安全认证等),都需要自己去实现javax.servlet.Filter。之后在web.xml中配置即可。 但事实上,Tomcat已经提供了部分相关的过滤器(本文只介绍常用的7个过滤器),只需要简单配置就可以使用。最近通过系统学习Tomcat架构之后,结合部分源码记录总结最常用的几种...

钉钉开发笔记(四)-签名验证问题的处理

忙了一天竟然在一个以前自认为,很基础的问题上卡顿了,为了防止以后出现类似错误,决定还是记录下来,顺便整理下思路! 钉钉开发中有PC和移动之分,这个已经讲过,其中最基础也是最重要的当属其中的签名验证了,也只有这个步骤成功了你才可以调取JSAPI文档中的一些组件的接口。(不用钉钉组件的童鞋可以无视我这句  -。-) 其中PC版的签名验证算法如图: 1 JS...

URL编码与解码

 通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。   例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者...

loadrunner乱码问题解决办法

  7、LoadRunner回放脚本时,在浏览器显示的中文是乱码 最近,遇到了好多乱码的问题,解决了一些,还有最后一个乱码,能想到的各种办法都试过了,还是不行,很奇怪啊。 解决这些乱码时,涉及到了http头数据,不是很了解。 第一个乱码: 操作返回的提示信息:操作成功、失败原因,这样的信息返回到页面乱码。最后找到的原因是:返回的ContentType格式...

URL的编码和解码

URL的编码和解码   参考:阮一峰--关于URL编码 1 为什么要URL编码 在因特网上传送URL,只能采用ASCII字符集      也就是说URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,即只有字母和数字[0-9a-zA-Z]、一些特殊符号$-_.+!*'()[不包括双引号]、以及某些保留字(空格转换为+),才可以不经过编...

GBK、GB2312、iso-8859-1之间的区别

转自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK、GB2312、iso-8859-1之间的区别   GB2312,由中华人民共和国政府制定的,简体汉字编码规范,大陆所有计算机中的简体中文,都使用此种编码格式。目前,我也不知道还有另外的简体汉字编码规范。与此对应的还有BIG5,是中华民国...