jsp身份证验证代码



jsp身份证验证代码

<%@page import=”java.lang.String”%>
<%@page contentType=”text/html” pageEncoding=”gbk”%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>身份证合法性验证</title>
<style type=”text/css”>
p{display: block;width:440px;}
fieldset{width: 280px;}
p span{width:50px;background: #ff0;
padding:2px;margin-right: 5px;
color:blue;}
</style>
</head>
<body>
<fieldset>
<legend>
身份证合法性验证
</legend>
<form action=”">
<%–
verId方法中应按照如下算法进行对身份证进行验证:
必须是18位,前17位必须是数字
将身份证的前17位分别乘以7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 ,
然后将得到的数字相加后除以11,将得到的余数按照以下转换表进行比对,
如果左侧的余数对应的右侧数字和身份证号码的最后一位相同,则该身份证号码为真:
0–>1 1–>0 2–>X 3–>9 4–>8 5–>7 6–>6 7–>5 8–>4 9–>3 10–>2
–%>
<%! //声明方法
String[] ai=new String[17];//用户的身份证号码数组;
int[] wi=new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//17位数对应的加权因子,自左至右;
int[] yi=new int[]{0,1,2,3,4,5,6,7,8,9,10};//余数;
String[] vi={“1″,”0″,”X”,”9″,”8″,”7″,”6″,”5″,”4″,”3″,”2″};//余数对应的校验码;
public static boolean IsNum(String str){//判断是否是数字
for(int i=0;i<str.length();i++){
if(str.charAt(i)<’0′ || str.charAt(i)>’9′)
return false;
}
return true;
}// end IsNum
int sum=0;int y;String v;
public boolean verId(String idNo){//判断检验结果
idNo=idNo.toLowerCase();
if(idNo.length()==18){
String n17=idNo.substring(0,17);//把obj第0位开始,长度为17的字符串赋给n17
String endNum=idNo.substring(17,18);
if( IsNum(idNo) || ( IsNum(idNo.substring(0,17)) && endNum.equals(“x”) )){
//如果检查的是18为整数,或者前17位是整数未位是x;
String ay=getVer(n17);
if(ay.equals(endNum)){//如果得到的检验码与未位相符合刚返回true;否则都返回false;
return true;
}
else{
return false;
}
}//end of line65
else{
return false;
}
}//end of line62
else{
return false;
}
}
public String getVer(String num17){//检验方法
sum=0;
if(!IsNum(num17) || num17.length()!=17){
return “不是17个数字”;
}
else{
for(int i=0;i<num17.length();i++){
sum+=Integer.parseInt(String.valueOf(num17.charAt(i)))*wi[i];
}
y=sum;v=vi[y];
return String.valueOf(v);
}
}
%>
<%
String idno=”";
if(request.getParameter(“idnumber”)!=null)
idno=request.getParameter(“idnumber”);
%>
<p>请输入要验证的身份证号码:</p><input name=”idnumber” value=<%=idno%> type=”text”/>

<%
if(request.getParameter(“five”)==null){
double number=Math.random()*10;//这是产生一个比10小的数
if(number<9){
number=number+1;//这是让这个书比1大,防止转化成5位时会丢失位数
}
double n=number*10000;//让这个数变成5位的
int num=(int)n;//把随机数变成整数
session.setAttribute(“rdom”,num);//将随机数写入session
}
%>
<p><span><%=session.getAttribute(“rdom”)%></span>输入左侧5位数字:</p>
<input name=”five” value=<%=request.getParameter(“five”)%> type=”text”/>

<%
if(request.getParameter(“five”)!=null){
int random = (java.lang.Integer) session.getAttribute(“rdom”);
session.setAttribute(“myput”,request.getParameter(“five”));
String myput=(String)session.getAttribute(“myput”);
int my=Integer.parseInt(myput);
if(my!=random){
out.println(“<p style=\”color:red;\”>验证码错误!</p>”);
}
else{
if(verId(idno)){
out.println(“<p style=\”color:green;font=weight:bold;\”>该身份证合法!</p>”);
}
else{
out.println(“<p style=\”color:red;font=weight:bold;\”>该身份证不合法!</p>”);
}
}
}
%>
<p><input type=”submit” value=”验证!” /></p>
</form>
</fieldset>
</body>
</html>