zoukankan      html  css  js  c++  java
  • C#联通新版验证码识别的实现

    以前写了篇 联通充值卡自动充值的实现,最近发现联通官网改版了,随便看了下发现新版的验证码和以前的不同,发了点时间研究了下他的识别码,它现在的验证码如下

    现在将识别步骤说下

    1,转换灰度图片

    2,清除2px的边框

    3,分割验证码个数 (4)

    4,生成字模库

    经过以上步骤,可以得到下面这个效果

    下面为部分实现代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    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+%以上,

    下面附上测试地址,代码  100%C#实现,方便asp.net调用,如果是C/C++实现 asp.net 调非托管的有些麻烦,非得放到System32 或是一个绝对路径下麻烦

    测试地址

    http://www.fox163.com/UniconTest.aspx 

    --幸福海

    博客地址:http://www.cnblogs.com/ningqhai/

  • 相关阅读:
    图解 perspective && perspective-origin && transform3d && transform-origin
    【CSS3练习】3D盒子制作
    【CSS3练习】在圆上旋转的菜单
    【CSS3练习】transform 2d变形实例练习
    -webkit-overflow-scrolling : touch 快速滚动 回弹 效果
    【canvas】blackboard 黑板
    【canvas】高级功能一 变形
    【canvas】基础练习三 图片
    【canvas】基础练习二 文字
    【canvas】基础练习一 图形
  • 原文地址:https://www.cnblogs.com/ImaY/p/3777168.html
Copyright © 2011-2022 走看看