程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#聯通新版驗證碼識別的實現

C#聯通新版驗證碼識別的實現

編輯:C#入門知識

以前寫了篇 聯通充值卡自動充值的實現,最近發現聯通官網改版了,隨便看了下發現新版的驗證碼和以前的不同,發了點時間研究了下他的識別碼,它現在的驗證碼如下       現在將識別步驟說下   1,轉換灰度圖片   2,清除2px的邊框   3,分割驗證碼個數 (4)   4,生成字模庫   經過以上步驟,可以得到下面這個效果       下面為部分實現代碼     public String GetCheckString(Bitmap bitmap) {            UnCodebase ud = new UnCodebase(bitmap);            ud.GrayByPixels();            ud.ClearPicBorder(2);            ud.CutMap(14, 15, 0, 0);            bitmap = ud.bmpobj;          //  bitmap = ud.ClearNoise(128, 1);            String chkcode = "";            Bitmap[] arrmap = ud.SplitImg(bitmap, 4, 1);            foreach (Bitmap item in arrmap) {                String str = ud.GetCodebybitmap(item, 128);                Boolean isEques = false;                foreach (String strss in code) {                    String[] a = strss.Split(':');                    if (str == a[1]) {                        chkcode += a[0];                        isEques = true;                        break;                    }                }                if (!isEques) {                    String strCurrent = "";                    double max = 0.0;                    foreach (String strss in code) {                        int len1, len2, min, count = 0;                        String[] a = strss.Split(':');                        len1 = a[1].Length;                        len2 = str.Length;                        min = len1;                        if (min > len2) {                            min = len2;                        }                        for (int i = 0; i < min; i++) {                            if (str[i] == a[1][i]) {                                count++;                            }                        }                        double currrent = (count * 100.0 / min);                        if (max < currrent) {                            max = currrent;                            strCurrent = a[0].Trim();                        }                    }                    chkcode += strCurrent.Trim();                }            }            return chkcode;        } 通過這些處理後,識別成功率在90+%以上,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved