blog

検証コードのC# Unicom社の新バージョンの実装を識別するために

以前はUnicomのリチャージカードの自動再充電の実装を書いた、最近Unicomの公式サイトが改訂されている発見、何気なく検証コードと以前の異なるの新しいバージョンを見て、彼の識別コードを勉強するため...

Mar 31, 2014 · 6 min. read
シェア

以前はUnicomのリチャージカードの自動再充電の実装を書いたが、最近Unicomの公式サイトがリニューアルされ、何気なくCAPTCHAの新しいバージョンを見て発見し、以前の違いは、彼の識別コードを勉強するために少し時間を送った、それは今、次の検証コードです:

識別の手順は以下の通りです。

1,グレースケールイメージの変換

2,クリア2pxボーダー

3,CAPTCHAの数を分割します。

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%以上となりました。

asp.netのチューニングのC / C + +の実装は、トラブルのいくつかのアンマネージド、System32またはトラブルへの絶対パスに配置する必要がある場合、テストアドレスは、コード100%C#の実装では、asp.netの呼び出しを容易にするために、以下に添付され

テストアドレス

ユニコンテスト.aspx

この記事は

Read next