<%@pageimport="java.lang.String"%><%@page contentType="text/html"pageEncoding="gbk"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>身份证合法性验证</title> <styletype="text/css"> p{display:block;width:440px;} fieldset{width: 280px;} pspan{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-->X3-->9 4-->8 5-->76-->6 7-->5 8-->49-->3 10-->2 --%> <%!//声明方法 String[] ai=newString[17];//用户的身份证号码数组; int[] wi=newint[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//17位数对应的加权因子,自左至右; int[] yi=newint[]{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 booleanIsNum(String str){//判断是否是数字 for(inti=0;i<str.length();i++){ if(str.charAt(i)<'0' ||str.charAt(i)>'9') returnfalse; } returntrue; }// endIsNum int sum=0;int y;Stringv; public boolean verId(StringidNo){//判断检验结果 idNo=idNo.toLowerCase(); if(idNo.length()==18){ Stringn17=idNo.substring(0,17);//把obj第0位开始,长度为17的字符串赋给n17 StringendNum=idNo.substring(17,18); if(IsNum(idNo) || ( IsNum(idNo.substring(0,17))&& endNum.equals("x") )){ //如果检查的是18为整数,或者前17位是整数未位是x; Stringay=getVer(n17); if(ay.equals(endNum)){//如果得到的检验码与未位相符合刚返回true;否则都返回false; returntrue; } else{ return false; } }//end of line65 else{ return false; } }//end of line62 else{ return false; } } publicString getVer(String num17){//检验方法 sum=0; if(!IsNum(num17) ||num17.length()!=17){ return "不是17个数字"; } else{ for(inti=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><inputname="idnumber" value=<%=idno%>type="text"/> <% if(request.getParameter("five")==null){ doublenumber=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> <inputname="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")); Stringmyput=(String)session.getAttribute("myput"); intmy=Integer.parseInt(myput); if(my!=random){ out.println("<pstyle=\"color:red;\">验证码错误!</p>"); } else{ if(verId(idno)){ out.println("<pstyle=\"color:green;font=weight:bold;\">该身份证合法!</p>"); } else{ out.println("<pstyle=\"color:red;font=weight:bold;\">该身份证不合法!</p>"); } } } %> <p><inputtype="submit" value="验证!"/></p> </form> </fieldset> </body></html>