實(shí)現(xiàn)代碼
/// <summary> /// 生成驗(yàn)證碼圖片,保存session名稱VerificationCode /// </summary> public static void CreateVerificationCode() { int number; string checkCode = string.Empty; //隨機(jī)數(shù)種子 Random randoms = new Random(); for (int i = 0; i < 4; i++) //校驗(yàn)碼長(zhǎng)度為4 { //隨機(jī)的整數(shù) number = randoms.Next(); //字符從0-9,A-Z中隨機(jī)產(chǎn)生,對(duì)應(yīng)的ASCII碼分別為 //48-57,65-90 number = number % 36; if (number < 10) { number += 48; } else { number += 55; } checkCode += ((char)number).ToString(); } //在session中保存校驗(yàn)碼 System.Web.HttpContext.Current.Session["VerificationCode"] = checkCode; //若校驗(yàn)碼為空,則直接返回 if (checkCode == null || checkCode.Trim() == String.Empty) { return; } //根據(jù)校驗(yàn)碼的長(zhǎng)度確定輸出圖片的長(zhǎng)度 System.Drawing.Bitmap image = new System.Drawing.Bitmap(55, 20);//(int)Math.Ceiling(Convert.ToDouble(checkCode.Length * 15)) //創(chuàng)建Graphics對(duì)象 Graphics g = Graphics.FromImage(image); try { //生成隨機(jī)數(shù)種子 Random random = new Random(); //清空?qǐng)D片背景色 g.Clear(Color.White); //畫(huà)圖片的背景噪音線 10條 //--------------------------------------------------- for (int i = 0; i < 10; i++) { //噪音線起點(diǎn)坐標(biāo)(x1,y1),終點(diǎn)坐標(biāo)(x2,y2) int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); //用銀色畫(huà)出噪音線 g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } //--------------------------------------------------- //Brush b = Brushes.Silver; //g.FillRectangle(b, 0, 0, image.Width, image.Height); //---------------------以上兩種任選其一------------------------------ //輸出圖片中校驗(yàn)碼的字體: 12號(hào)Arial,粗斜體 Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic)); //線性漸變畫(huà)刷 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Purple, 1.2f, true); g.DrawString(checkCode, font, brush, 2, 2); //畫(huà)圖片的前景噪音點(diǎn) 50個(gè) for (int i = 0; i < 50; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //畫(huà)圖片的邊框線 g.DrawRectangle(new Pen(Color.Peru), 0, 0, image.Width - 1, image.Height - 1); //創(chuàng)建內(nèi)存流用于輸出圖片 using (MemoryStream ms = new MemoryStream()) { //圖片格式指定為png image.Save(ms, ImageFormat.Jpeg); //清除緩沖區(qū)流中的所有輸出 System.Web.HttpContext.Current.Response.ClearContent(); //輸出流的HTTP MIME類型設(shè)置為"image/Png" System.Web.HttpContext.Current.Response.ContentType = "image/Jpeg"; //輸出圖片的二進(jìn)制流 System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray()); } } finally { //釋放Bitmap對(duì)象和Graphics對(duì)象 g.Dispose(); image.Dispose(); } }
創(chuàng)建一個(gè)aspx頁(yè)面
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AuthCode.aspx.cs" Inherits="AuthCode" %> <%Help.CreateVerificationCode(); %>
添加HTML代碼,引用
<div class="positionR"> <label>驗(yàn)證碼:</label> <span class="style1"> *</span> <input type="text" class="yanZm" runat="Server" reg="^.+$" id="txtAuthCode" tip="請(qǐng)輸入驗(yàn)證碼!" /> <img class="yanZm_img" src="AuthCode.aspx" alt="" id="imgAuthCode" /> </div>
如何實(shí)現(xiàn)刷新?
<script type="text/javascript"> $("#imgAuthCode").click(function () { $(this).attr("src", "AuthCode.aspx?code=" + (new Date()).getTime()); }); </script>
效果圖
更多ASP.NET實(shí)現(xiàn)驗(yàn)證碼以及刷新驗(yàn)證碼的小例子相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

TheyieldkeywordinC#simplifiesiteratorcreationbyautomaticallygeneratingastatemachinethatenableslazyevaluation.1.Itallowsreturningitemsoneatatimeusingyieldreturn,pausingexecutionbetweeneachitem,whichisidealforlargeordynamicsequences.2.yieldbreakcanbeus

DependencyInjection(DI)inC#isadesignpatternthatenhancesmodularity,testability,andmaintainabilitybyallowingclassestoreceivedependenciesexternally.1.DIpromotesloosecouplingbydecouplingobjectcreationfromusage.2.Itsimplifiestestingthroughmockobjectinject

Peranan idisposable dan menggunakan dalam C# adalah dengan cekap dan deterministik menguruskan sumber yang tidak diurus. 1. Idisposable menyediakan kaedah pelupusan (), supaya kelas dapat dengan jelas menentukan cara melepaskan sumber yang tidak diurus; 2. Pernyataan yang menggunakan memastikan yang melupuskan () secara automatik dipanggil apabila objek itu keluar dari skop, memudahkan pengurusan sumber dan mengelakkan kebocoran; 3. Apabila menggunakannya, sila ambil perhatian bahawa objek mesti melaksanakan idisposable, boleh mengisytiharkan pelbagai objek, dan harus selalu menggunakan menggunakan jenis seperti Streamreader; 4. Amalan terbaik biasa termasuk tidak bergantung kepada pemusnah untuk membersihkan, mengendalikan objek bersarang dengan betul, dan melaksanakan corak pelupusan (bool).

Lambdaexpressionsandlinqsimplifydatamanipulationinc#byenablingconcise, boleh dibaca, andefficientcode.1.LambdaExpressionsAllowinFunctionDefinitions, MakingeasierToPasslogicasArgumentsForfiltering, transforming, dangregatasi

NullableReferenceTypes (NRTS) Inc#8 HelpCatchNulleFerenceExceptionErrorsatCompileTimeByMakeRereCetypesNon-nullByDefault, MemerlukanExplicitDeclarationFornulability.nrtsmustBeenableDile.csprojfileShileHenableShenabeShen

Empat masalah "anti-corak" dalam pembangunan C# perlu dielakkan. Pertama, penggunaan async/menunggu yang tidak munasabah membawa kepada kebuntuan atau kemerosotan prestasi. Kita harus mematuhi prinsip asynchronousness penuh, mengkonfigurasi configureAwait (palsu) dan menyeragamkan penamaan; Kedua, kebergantungan yang berlebihan terhadap VAR mempengaruhi kebolehbacaan, dan secara eksplisit mengisytiharkan dan menyatukan spesifikasi pasukan apabila jenisnya tidak jelas; Ketiga, penggunaan pelupusan dan pengurusan sumber yang tidak betul menyebabkan kebocoran, dan pernyataan penggunaan harus digunakan dengan betul dan mod standard idisposable harus dilaksanakan; Keempat, penyalahgunaan kelas statik atau singleton menyebabkan kesukaran ujian, dan keutamaan harus diberikan kepada suntikan ketergantungan, ketenteraan, atau kitaran hayat yang diuruskan oleh bekas. Mengelakkan salah faham ini dapat meningkatkan kualiti dan penyelenggaraan kod dengan ketara.

Span dan memori meningkatkan prestasi C# dengan mengurangkan peruntukan memori. 1. Span mengelakkan penyalinan array dan memberikan rujukan cahaya kepada memori yang sedia ada, yang sesuai untuk parsing protokol binari, operasi rentetan dan pengurusan penampan berprestasi tinggi; 2. Memori menyokong lulus irisan memori merentasi kaedah tak segerak, yang sesuai untuk senario di mana kitaran hayat yang lebih fleksibel diperlukan; 3. Kedua -duanya mengurangkan tekanan GC, mengoptimumkan prestasi dengan menggunakan semula buffer dan mengelakkan penyalinan sementara; 4. Span adalah terhad untuk digunakan pada timbunan dan tidak dapat disimpan dalam kelas atau digunakan dalam kaedah asynchronous. Berhati -hati untuk mengelakkan operasi penugasan semula seperti calls.toarray ().

Prinsip pepejal adalah lima prinsip reka bentuk untuk meningkatkan pemeliharaan kod dan skalabilitas dalam pengaturcaraan berorientasikan objek. Mereka adalah: 1. Prinsip Tanggungjawab Tunggal (SRP) menghendaki kelas hanya menganggap satu tanggungjawab, seperti memisahkan generasi laporan dan menghantar e -mel; 2. Prinsip pembukaan dan penutupan (OCP) menekankan bahawa lanjutan disokong melalui antara muka atau kelas abstrak tanpa mengubah kod asal, seperti menggunakan antara muka ishape untuk merealisasikan pengiraan kawasan grafik yang berbeza; 3. Prinsip Penggantian Richter (LSP) menghendaki subkelas boleh menggantikan kelas induk tanpa memusnahkan logik, seperti persegi tidak boleh tersilap mewarisi segi empat tepat, mengakibatkan tingkah laku yang tidak normal; 4. Prinsip Pengasingan Antara Muka (ISP) menganjurkan definisi antara muka halus, seperti percetakan dan fungsi pengimbasan untuk mengelakkan kebergantungan yang berlebihan; 5. Prinsip Inversi Ketergantungan (DIP) menganjurkan
