C#联通新版验证码识别的实现
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public String GetCheckString(Bitmap bitmap) { 2 UnCodebase ud = new UnCodebase(bitmap); 3 ud.GrayByPixels(); 4 ud.ClearPicBorder(2); 5 ud.CutMap(14, 15, 0, 0); 6 bitmap = ud.bmpobj; 7 // bitmap = ud.ClearNoise(128, 1); 8 String chkcode = ""; 9 Bitmap[] arrmap = ud.SplitImg(bitmap, 4, 1); 10 foreach (Bitmap item in arrmap) { 11 String str = ud.GetCodebybitmap(item, 128); 12 Boolean isEques = false; 13 foreach (String strss in code) { 14 String[] a = strss.Split(':'); 15 if (str == a[1]) { 16 chkcode += a[0]; 17 isEques = true; 18 break; 19 } 20 } 21 if (!isEques) { 22 String strCurrent = ""; 23 double max = 0.0; 24 foreach (String strss in code) { 25 int len1, len2, min, count = 0; 26 String[] a = strss.Split(':'); 27 len1 = a[1].Length; 28 len2 = str.Length; 29 min = len1; 30 if (min > len2) { 31 min = len2; 32 } 33 for (int i = 0; i < min; i++) { 34 if (str[i] == a[1][i]) { 35 count++; 36 } 37 } 38 double currrent = (count * 100.0 / min); 39 if (max < currrent) { 40 max = currrent; 41 strCurrent = a[0].Trim(); 42 } 43 } 44 chkcode += strCurrent.Trim(); 45 } 46 } 47 return chkcode; 48 }