65.9K
CodeProject 正在变化。 阅读更多。
Home

生成带随机数的图像

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.31/5 (8投票s)

2006年11月29日

2分钟阅读

viewsIcon

87285

downloadIcon

732

生成一个带有随机代码的图像,用于用户身份验证。

Sample Generated Code Image

引言

我们需要检查注册我们网站的是否是真实用户。因此,我们决定生成一个带有随机代码的图像,该代码对机器人隐藏,并将其馈送到浏览器而不是页面响应。我们在注册表单中显示它,并让用户输入代码进行验证。

创建 Web 项目

  1. 文件 -> 新建 -> 新项目

    创建一个新的 CodeImage Visual Basic ASP.NET Web 应用程序。

修改 Web 表单

  1. WebForm1.aspx 重命名为 CodeImage.aspx。打开它。

  2. 切换到 HTML 视图(右键单击 -> 查看 HTML 源代码)。

  3. 删除所有 HTML 代码。仅保留 <%@ Page ... %> 头部。

  4. 切换到代码视图(右键单击 -> 查看代码)。

修改 Page_Load 方法,添加生成随机代码图像的代码。同时设置 Session("hiddenCode") 以便稍后进行代码检查

Private Sub Page_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
    'Put user code to initialize the page here


    ' Create a Bitmap image

    Dim ImageSrc As System.Drawing.Bitmap = _
        New System.Drawing.Bitmap(155, 85)


    ' Fill it randomly with white pixels
    For iX As Integer = 0 To ImageSrc.Width - 1
        For iY As Integer = 0 To ImageSrc.Height - 1
            If Rnd() > 0.5 Then
                ImageSrc.SetPixel(iX, iY, System.Drawing.Color.White)
            End If
        Next iY
    Next iX

    ' Create an ImageGraphics Graphics object from bitmap Image
    Dim ImageGraphics As System.Drawing.Graphics = _
        System.Drawing.Graphics.FromImage(ImageSrc)

    ' Generate random code. 
    Dim hiddenCode As String = (Fix(Rnd() * 10000000)).ToString
    ' Set Session variable
    Session("hiddenCode") = hiddenCode

    ' Draw random code within Image
    Dim drawFont As New System.Drawing.Font("Arial", _
                    20, FontStyle.Italic)
    Dim drawBrush As New _
       System.Drawing.SolidBrush(System.Drawing.Color.Black)
    Dim x As Single = 5.0 + (Rnd() / 1) * (ImageSrc.Width - 120)
    Dim y As Single = 5.0 + (Rnd() / 1) * (ImageSrc.Height - 30)
    Dim drawFormat As New System.Drawing.StringFormat
    ImageGraphics.drawString(hiddenCode, drawFont, drawBrush, _
        x, y, drawFormat)

    ' Change reponse content MIME type
    Response.ContentType = "image/jpeg"

    ' Sent Image using Response OutputStream
    ImageSrc.Save(Response.OutputStream, _
                  System.Drawing.Imaging.ImageFormat.Jpeg)

    ' Dispose Objects used
    drawFont.Dispose()
    drawBrush.Dispose()
    ImageGraphics.Dispose()

End Sub

构建解决方案 (F7),并运行应用程序 (F5)。

创建检查表单。

  1. 创建一个新的 Default.aspx Web 表单(右键单击 CodeImage 项目 -> 添加 -> 添加 Web 表单)。

  2. 右键单击 Default.aspx -> 设置为启动页。打开它。

  3. 从 IDE 菜单中,单击“视图” -> “工具箱”。从 HTML 选项卡中,将一个 Image 控件拖动到表单上。右键单击 Image -> 属性。将图像源设置为 "CodeImage.aspx"。将备用文本设置为 "隐藏代码"。单击“应用”。单击“确定”。

  4. 从 HTML 选项卡中,将一个 Label 控件拖动到表单上。双击它。将文本更改为 "请输入图像中的代码:"。

  5. 从 Web Forms 选项卡中,将一个 TextBox 控件拖动到表单上。

  6. 从 Web Forms 选项卡中,将一个 Button 控件拖动到表单上。

  7. 从 Web Forms 选项卡中,将一个 Label 控件拖动到表单上。右键单击 -> 属性。将 Text 属性设置为 Nothing

双击 Button1 按钮控件,并修改 Button1_Click 代码为

Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
    If TextBox1.Text <> Session("hiddenCode") Then
        Label1.Text = "Wrong Code!"
    Else
        Label1.Text = "Correct Code!"
    End If
End Sub

构建并运行 Web 应用程序 (F7) (F5)。

关注点

就是这样!

历史

刚刚发布。

生成带有随机数字的图像 - CodeProject - 代码之家
© . All rights reserved.