(二)验证码模块(随机英文验证and随机英文数字混合验证+Session)

    随机英文验证(大小写字母组合)跟前面的随机数字验证码差不多。

由于大小写字母一共有52个,我不可能一个一个的写出来弄成一个数字,所以,我上网查找了资料,可以利用ascii将数字转为字母。但是在转换过程中也出现了一系列问题。存在一直出现索引超出范围的问题,后来调试了蛮久,才发现是我定义的空String数组没有初始化,初始化必须要指定长度。

letter.cs代码
namespace number
{
    public partial class letter : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                  Label1.Text = getletters(4);        
            }
            if (!string.IsNullOrEmpty(HiddenField1.Value))
            {
                Session["letters"] = HiddenField1.Value.ToLower();
                Label1.Text = HiddenField1.Value;
            }
        }  
        private String getletters(int n)
        {
            String s = "";
            int cal = 0;
            String[] num = new String[52];//必须要初始化,在你初始化的时候要指定长度
            for (int i = 65; i <= 122; i++)
            {
                if (i > 90 && i < 97)
                    continue;
                System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
                byte[] btNumber = new byte[] { (byte)i };
                num[cal] = asciiEncoding.GetString(btNumber);
                cal += 1;
            }
            Random ran = new Random();
            for (int i = 0; i < n; i++)
              {
                 int t = ran.Next(num.Length);//产生一个小于num.Length的数字
                  s += num[t];
             }
            Session["letters"] = s.ToLower();
            return s;
        }
         protected void Button1_Click1(object sender, EventArgs e)
         {
             if (TextBox1.Text.ToLower() == Session["letters"].ToString())
             {
                 Response.Write("成功!");
                 TextBox1.Text = "";
             }
             else
             {
                 Response.Write("失败!");
                 TextBox1.Text = "";
                 HiddenField1.Value = "";
                 Label1.Text = getletters(4);//重新产生随机数字
             }
         }
     }    
}
letter.aspx代码
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>随机英文验证码</title>
    <script type="text/javascript">
        function getletters(n) {
            var s = "";                   
            var cal = 0;
            var num = new Array(52);           
            for(var i=65;i<=122;i++)
            {
                if (i > 90 && i < 97)
                    continue;             
                num[cal] = String.fromCharCode(i);               
                cal+=1;
            }          
            for (var i = 0; i < n; i++) {
                var t = Math.ceil(Math.random() * num.length);//Math.ceil(n); 返回大于等于n的最小整数。
                s += num[t];
            }
            document.getElementById("Label1").innerHTML = s;//这里不能是.Text,label在客户端会变成<span>,如果不用innerHTML改变不了值                    
            document.getElementById("HiddenField1").value = s;
        }
        function changestyle() {
            document.getElementById("lab").style.cursor = 'pointer';
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
        <p>
            验证码:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</p>
         <div id="lab" οnclick="getletters(4)" οnmοusemοve="changestyle()"><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>          
        <%--<a href="javascript:void(0)" οnclick="getletters(4)" >看不清,换一张</a> --%>
        <%--  <!-- -->, html comment会包含在最终生成的html文件中
           现在使用的注释,aspx comment 不会包含在最终生成的html文件中 --%>
        <asp:HiddenField ID="HiddenField1" runat="server" />
        <asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click1"  />
    </form>
</body>
</html>

效果图


   随机字母加数字验证就不多废话了,把随机数字和英文验证的代码整合在一起就可以了。

代码放在https://github.com/1126048156/-.git

letter这部分就是随机英文验证码的代码,mixture是英文加数字混合的代码。




       


    


   
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值