随机英文验证(大小写字母组合)跟前面的随机数字验证码差不多。
由于大小写字母一共有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是英文加数字混合的代码。