C#生成圖形驗證碼
- 2019 年 11 月 7 日
- 筆記
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_42449444/article/details/90723302
我弄的這個圖形驗證碼是通過偽隨機驗證碼+label控件+背景圖來實現的,我覺得我這個圖形驗證碼寫得比較low,用代碼實現起來也特別簡單。
偽隨機驗證碼的生成:
偽隨機驗證碼的生成,其實就是偽隨機字符串的生成。這部分我是通過無腦for循環+Random隨機選擇字符來實現的。
先把驗證碼中包含的所有元素(大小寫字母和數字)放入一個string型的字符串list中,然後調用Random()隨機生成一個下標,通過這個下標來獲取list中對應的字符,for循環length次後,就能得到一個長度為length的偽隨機驗證碼。是不是很簡單很low呀??我直接把這段代碼寫在了項目的靜態類Program中,這樣的話,所有窗體都可以通過調用靜態方法Program.CreateRandomCode(length)來生成一個包含大小寫字母和數字的、長度位length的偽隨機驗證碼。
public static string CreateRandomCode(int length) //生成由數字和大小寫字母組成的驗證碼 { string list = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890"; //list中存放着驗證碼的元素 Random random = new Random(); string code = ""; //驗證碼 for (int i = 0; i < length; i++) //循環6次得到一個偽隨機的六位數驗證碼 { code += list[random.Next(0, list.Length - 1)]; } return code; }
label控件的設置:
我們可以在窗體中添加一個lable,然後調用CreateRandomCode(length)來進行實例化,代碼如下。
lable.Text = CreateRandomCode(4); //生成一個4位的驗證碼,並顯示在標籤lable上。
然而這樣的驗證碼是沒有靈魂,我們可以給label設置一個好看點的背景圖,讓這個low到爆炸的驗證碼看起來高大上一點。
對lable進行右鍵選中屬性,然後在Image屬性這一欄添加一張圖片來作為label的背景,這樣看起來效果是不是好一點啦?


點擊更換驗證碼的實現:
要是看不清圖形驗證碼怎麼點擊更換呢?我們可以在窗體中雙擊lable對它添加一個Click事件,當鼠標點擊label時,調用靜態類Program中的靜態方法CreateRandomCode(length)來生成一個新的圖形驗證碼,從而實現"看不清,點擊更換驗證碼"的操作。
private void lable_Click(object sender, EventArgs e) { lable.Text = Program.CreateRandomCode(4); }
當然,我們還可以在label旁邊添加一個linklabel(linklabel.Text為"看不清?點擊更換"),然後對linklabel添加Click事件即可。LinkBehavior屬性我設置成了HoverUnderline,只有當鼠標放在linklabel上才會有下劃線。
private void LinkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { lable_Click(sender, e); }

驗證碼正誤判斷:
驗證碼的判斷是忽略字母大小寫的,這裡我把文本框textBox中輸入的內容和驗證碼都轉換成小寫字母再進行比對。
if (textBox.Text.ToLower() != lable.Text.ToLower()) //驗證碼輸入錯誤 { MessageBox.Show("您輸入的驗證碼有誤!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); CheckCode_Click(sender,e); //刷新一遍驗證碼 textBox.Text = ""; //清空驗證碼輸入框 } else //驗證成功 { MessageBox.Show("驗證成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); }