針對字體固定、位置固定、干擾點與字體顏色無交叉的簡單驗證碼,採三步驟:特徵碼建立 → 圖片切割 → 逐一比對,程式碼不超過 100 行。
每個數字以 7x10 陣列表示像素特徵 (1=前景色),如 _num0 至 _num9。
static int[,] getNum(Bitmap bmp, int index) { /* 切割第 index 個字元區域 */ }
static int CheckNumber(int[,] number) { /* 依序比對 0-9 特徵碼 */ }
static bool CheckNumber(int[,] dic, int[,] number) { /* 逐像素比對,dic 有 1 處 number 必為 1 */ }
static public string getNumber(Bitmap bmp) { /* 迴圈辨識 4 位數字 */ }
WebClient wb = new WebClient();
byte[] b = wb.DownloadData("url");
MemoryStream ms = new MemoryStream(b);
Bitmap bmp = new Bitmap(ms);
string str = BmpNumber.Number.getNumber(bmp); // 輸出如 "9637"
僅適用簡單驗證碼,擴充特徵庫可支援規範字母。