實(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

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

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

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).

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.

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

ASP.Netcore adalah rangka kerja lintas-platform, rangka kerja berprestasi tinggi yang dilancarkan oleh Microsoft, yang direka untuk pembangunan aplikasi web moden di C#. Kelebihan terasnya termasuk: 1. 2. Senibina modular, yang meningkatkan prestasi dan fleksibiliti melalui fungsi pemuatan saluran paip middleware; 3. Suntikan ketergantungan terbina dalam (DI), menyokong pengurusan kitaran hayat, dan meningkatkan kebolehpercayaan dan kebolehlaksanaan kod; 4 Prestasi prestasi tinggi, berdasarkan pelayan Kestrel, dapat mengendalikan permintaan serentak yang tinggi di bawah konfigurasi lalai, sesuai untuk senario dengan sumber terhad atau keperluan kelajuan tindak balas yang tinggi.

Pokok ekspresi digunakan dalam C# untuk mewakili kod sebagai data. Mereka membolehkan pemaju menganalisis, mengubahsuai, atau runtime untuk menjana kod baru dengan membina struktur pokok yang menggambarkan operasi kod dan bukannya melaksanakan kod secara langsung. Komponen terasnya termasuk ungkapan parameter, ungkapan binari, dan ekspresi lambda. Kegunaan umum adalah linqtosql dan ort (seperti entityframework), di mana pokok ekspresi membolehkan pertanyaan C# linq diterjemahkan ke dalam pernyataan SQL. Kegunaan lain termasuk penapisan dinamik dan pertanyaan, sistem bersiri atau skrip, rangka kerja simulasi, dan bekas suntikan pergantungan. Walau bagaimanapun, lebih sesuai untuk menggunakan fungsi biasa atau ekspresi lambda tanpa memerlukan pemeriksaan atau logik penukaran. 1. Membina pertanyaan dinamik; 2. Terjemahkannya ke dalam bentuk lain
